mirror of
				https://git.suyu.dev/suyu/suyu
				synced 2025-10-30 23:49:01 -05:00 
			
		
		
		
	Merge pull request #1498 from lioncash/aslr
svc: Clarify enum values for AddressSpaceBaseAddr and AddressSpaceSize in svcGetInfo()
This commit is contained in:
		| @@ -448,25 +448,12 @@ static ResultCode GetInfo(u64* result, u64 info_id, u64 handle, u64 info_sub_id) | ||||
|     case GetInfoType::RandomEntropy: | ||||
|         *result = 0; | ||||
|         break; | ||||
|     case GetInfoType::AddressSpaceBaseAddr: | ||||
|         *result = vm_manager.GetCodeRegionBaseAddress(); | ||||
|     case GetInfoType::ASLRRegionBaseAddr: | ||||
|         *result = vm_manager.GetASLRRegionBaseAddress(); | ||||
|         break; | ||||
|     case GetInfoType::AddressSpaceSize: { | ||||
|         const u64 width = vm_manager.GetAddressSpaceWidth(); | ||||
|  | ||||
|         switch (width) { | ||||
|         case 32: | ||||
|             *result = 0xFFE00000; | ||||
|             break; | ||||
|         case 36: | ||||
|             *result = 0xFF8000000; | ||||
|             break; | ||||
|         case 39: | ||||
|             *result = 0x7FF8000000; | ||||
|             break; | ||||
|         } | ||||
|     case GetInfoType::ASLRRegionSize: | ||||
|         *result = vm_manager.GetASLRRegionSize(); | ||||
|         break; | ||||
|     } | ||||
|     case GetInfoType::NewMapRegionBaseAddr: | ||||
|         *result = vm_manager.GetNewMapRegionBaseAddress(); | ||||
|         break; | ||||
|   | ||||
| @@ -41,8 +41,8 @@ enum class GetInfoType : u64 { | ||||
|     RandomEntropy = 11, | ||||
|     PerformanceCounter = 0xF0000002, | ||||
|     // 2.0.0+ | ||||
|     AddressSpaceBaseAddr = 12, | ||||
|     AddressSpaceSize = 13, | ||||
|     ASLRRegionBaseAddr = 12, | ||||
|     ASLRRegionSize = 13, | ||||
|     NewMapRegionBaseAddr = 14, | ||||
|     NewMapRegionSize = 15, | ||||
|     // 3.0.0+ | ||||
|   | ||||
| @@ -393,30 +393,35 @@ void VMManager::InitializeMemoryRegionRanges(FileSys::ProgramAddressSpaceType ty | ||||
|  | ||||
|     switch (type) { | ||||
|     case FileSys::ProgramAddressSpaceType::Is32Bit: | ||||
|     case FileSys::ProgramAddressSpaceType::Is32BitNoMap: | ||||
|         address_space_width = 32; | ||||
|         code_region_base = 0x200000; | ||||
|         code_region_end = code_region_base + 0x3FE00000; | ||||
|         map_region_size = 0x40000000; | ||||
|         heap_region_size = 0x40000000; | ||||
|         aslr_region_base = 0x200000; | ||||
|         aslr_region_end = aslr_region_base + 0xFFE00000; | ||||
|         if (type == FileSys::ProgramAddressSpaceType::Is32Bit) { | ||||
|             map_region_size = 0x40000000; | ||||
|             heap_region_size = 0x40000000; | ||||
|         } else { | ||||
|             map_region_size = 0; | ||||
|             heap_region_size = 0x80000000; | ||||
|         } | ||||
|         break; | ||||
|     case FileSys::ProgramAddressSpaceType::Is36Bit: | ||||
|         address_space_width = 36; | ||||
|         code_region_base = 0x8000000; | ||||
|         code_region_end = code_region_base + 0x78000000; | ||||
|         aslr_region_base = 0x8000000; | ||||
|         aslr_region_end = aslr_region_base + 0xFF8000000; | ||||
|         map_region_size = 0x180000000; | ||||
|         heap_region_size = 0x180000000; | ||||
|         break; | ||||
|     case FileSys::ProgramAddressSpaceType::Is32BitNoMap: | ||||
|         address_space_width = 32; | ||||
|         code_region_base = 0x200000; | ||||
|         code_region_end = code_region_base + 0x3FE00000; | ||||
|         map_region_size = 0; | ||||
|         heap_region_size = 0x80000000; | ||||
|         break; | ||||
|     case FileSys::ProgramAddressSpaceType::Is39Bit: | ||||
|         address_space_width = 39; | ||||
|         code_region_base = 0x8000000; | ||||
|         code_region_end = code_region_base + 0x80000000; | ||||
|         aslr_region_base = 0x8000000; | ||||
|         aslr_region_end = aslr_region_base + 0x7FF8000000; | ||||
|         map_region_size = 0x1000000000; | ||||
|         heap_region_size = 0x180000000; | ||||
|         new_map_region_size = 0x80000000; | ||||
| @@ -490,6 +495,18 @@ u64 VMManager::GetAddressSpaceWidth() const { | ||||
|     return address_space_width; | ||||
| } | ||||
|  | ||||
| VAddr VMManager::GetASLRRegionBaseAddress() const { | ||||
|     return aslr_region_base; | ||||
| } | ||||
|  | ||||
| VAddr VMManager::GetASLRRegionEndAddress() const { | ||||
|     return aslr_region_end; | ||||
| } | ||||
|  | ||||
| u64 VMManager::GetASLRRegionSize() const { | ||||
|     return aslr_region_end - aslr_region_base; | ||||
| } | ||||
|  | ||||
| VAddr VMManager::GetCodeRegionBaseAddress() const { | ||||
|     return code_region_base; | ||||
| } | ||||
|   | ||||
| @@ -205,6 +205,15 @@ public: | ||||
|     /// Gets the address space width in bits. | ||||
|     u64 GetAddressSpaceWidth() const; | ||||
|  | ||||
|     /// Gets the base address of the ASLR region. | ||||
|     VAddr GetASLRRegionBaseAddress() const; | ||||
|  | ||||
|     /// Gets the end address of the ASLR region. | ||||
|     VAddr GetASLRRegionEndAddress() const; | ||||
|  | ||||
|     /// Gets the size of the ASLR region | ||||
|     u64 GetASLRRegionSize() const; | ||||
|  | ||||
|     /// Gets the base address of the code region. | ||||
|     VAddr GetCodeRegionBaseAddress() const; | ||||
|  | ||||
| @@ -306,6 +315,9 @@ private: | ||||
|     VAddr address_space_base = 0; | ||||
|     VAddr address_space_end = 0; | ||||
|  | ||||
|     VAddr aslr_region_base = 0; | ||||
|     VAddr aslr_region_end = 0; | ||||
|  | ||||
|     VAddr code_region_base = 0; | ||||
|     VAddr code_region_end = 0; | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 bunnei
					bunnei