|
@@ -393,30 +393,35 @@ void VMManager::InitializeMemoryRegionRanges(FileSys::ProgramAddressSpaceType ty
|
|
|
|
|
|
|
|
switch (type) {
|
|
switch (type) {
|
|
|
case FileSys::ProgramAddressSpaceType::Is32Bit:
|
|
case FileSys::ProgramAddressSpaceType::Is32Bit:
|
|
|
|
|
+ case FileSys::ProgramAddressSpaceType::Is32BitNoMap:
|
|
|
address_space_width = 32;
|
|
address_space_width = 32;
|
|
|
code_region_base = 0x200000;
|
|
code_region_base = 0x200000;
|
|
|
code_region_end = code_region_base + 0x3FE00000;
|
|
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;
|
|
break;
|
|
|
case FileSys::ProgramAddressSpaceType::Is36Bit:
|
|
case FileSys::ProgramAddressSpaceType::Is36Bit:
|
|
|
address_space_width = 36;
|
|
address_space_width = 36;
|
|
|
code_region_base = 0x8000000;
|
|
code_region_base = 0x8000000;
|
|
|
code_region_end = code_region_base + 0x78000000;
|
|
code_region_end = code_region_base + 0x78000000;
|
|
|
|
|
+ aslr_region_base = 0x8000000;
|
|
|
|
|
+ aslr_region_end = aslr_region_base + 0xFF8000000;
|
|
|
map_region_size = 0x180000000;
|
|
map_region_size = 0x180000000;
|
|
|
heap_region_size = 0x180000000;
|
|
heap_region_size = 0x180000000;
|
|
|
break;
|
|
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:
|
|
case FileSys::ProgramAddressSpaceType::Is39Bit:
|
|
|
address_space_width = 39;
|
|
address_space_width = 39;
|
|
|
code_region_base = 0x8000000;
|
|
code_region_base = 0x8000000;
|
|
|
code_region_end = code_region_base + 0x80000000;
|
|
code_region_end = code_region_base + 0x80000000;
|
|
|
|
|
+ aslr_region_base = 0x8000000;
|
|
|
|
|
+ aslr_region_end = aslr_region_base + 0x7FF8000000;
|
|
|
map_region_size = 0x1000000000;
|
|
map_region_size = 0x1000000000;
|
|
|
heap_region_size = 0x180000000;
|
|
heap_region_size = 0x180000000;
|
|
|
new_map_region_size = 0x80000000;
|
|
new_map_region_size = 0x80000000;
|
|
@@ -490,6 +495,18 @@ u64 VMManager::GetAddressSpaceWidth() const {
|
|
|
return address_space_width;
|
|
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 {
|
|
VAddr VMManager::GetCodeRegionBaseAddress() const {
|
|
|
return code_region_base;
|
|
return code_region_base;
|
|
|
}
|
|
}
|