1
我正在寫一個裝載在0xC0000000(3GByte)虛擬地址的較高一半的32位內核,並且我使用multiboot_info結構來獲取物理內存映射。當我使用#1時,我得到的第一個mmap_addr是0x9000,但我無法使用gdb檢查地址。通過點擊和跟蹤,我寫了#2,它完美的作品。我可否知道我所做的是正確的?它究竟如何正確?謝謝。更高一半的x86內核Grub內存映射
#1
void get_mbmmap(void){
memory_map_t* mmap = (memory_map_t*)(mbinfo_addr -> mmap_addr);
while((uint32_t)mmap < mbinfo_addr->mmap_addr + mbinfo_addr->mmap_length)
mmap = (memory_map_t*)((uint32_t)mmap + mmap->size + sizeof(mmap->size));}
#2
void get_mbmmap(void){
memory_map_t* mmap = (memory_map_t*)(mbinfo_addr -> mmap_addr + 0xC0000000);
while((uint32_t)mmap < mbinfo_addr->mmap_addr + 0xC0000000 + mbinfo_addr->mmap_length)
mmap = (memory_map_t*)((uint32_t)mmap + mmap->size + sizeof(mmap->size));
}