Merge pull request #1498 from lioncash/aslr
svc: Clarify enum values for AddressSpaceBaseAddr and AddressSpaceSize in svcGetInfo()
This commit is contained in:
		
						commit
						6e8752881c
					
				@ -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;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user