Memory GRUB内存映射给了我奇怪的值

Memory GRUB内存映射给了我奇怪的值,memory,kernel,osdev,grub,grub2,Memory,Kernel,Osdev,Grub,Grub2,我试图使用grub来获取内存映射,而不是通过bios路径。问题是grub似乎出于某种原因给了我非常奇怪的值。有人能帮忙吗 相关代码: 这就是我解析mmap的方式 void mm_init(mmap_entry_t*mmap_addr,uint32_t长度) { mmap=mmap_addr; /*通过mmap循环*/ printk(“--扫描内存映射--”); 对于(大小i=0;mmaptype==1){ uint64\u t起始地址=((uint64\u t)mmap->基本地址高)基本地址低

我试图使用grub来获取内存映射,而不是通过bios路径。问题是grub似乎出于某种原因给了我非常奇怪的值。有人能帮忙吗

相关代码:

这就是我解析mmap的方式

void mm_init(mmap_entry_t*mmap_addr,uint32_t长度)
{
mmap=mmap_addr;
/*通过mmap循环*/
printk(“--扫描内存映射--”);
对于(大小i=0;mmap<(mmap地址+长度);i++){
/*内存可用*/
如果(mmap->type==1){
uint64\u t起始地址=((uint64\u t)mmap->基本地址高)基本地址低);
uint64_t长度=((uint64_t)mmap->length_high)length_low);
printk(“找到的段从0x%x开始,长度为%i”,起始地址,长度);
}
/*下一个条目*/
mmap=(mmap_entry_t*)((uint32_t)mmap+mmap->size+sizeof(mmap->size));
}
}
这是我的mmap_entry_t结构(不是multiboot.h中的结构):

struct mmap\u条目{
uint32_t尺寸;
uint32基本地址低,基本地址高;
uint32长度低,长度高;
uint8_t型;
}_uuu属性_uuu((压缩));
类型定义结构mmap_条目mmap_条目;
这就是我如何调用
mm_init()

/*内核主函数*/
无效kmain(多引导信息)
{
/*检查grub是否可以给我们一个内存映射*/
/*TODO:手动检测*/
如果(!(信息->标志和(1米地图长度);
对于(;);
}
这是我在qemu上得到的输出:

-- Scanning memory map --
Found segment starting from 0x0, with a length of 0
Found segment starting from 0x100000, with a length of 0

是的,在调用
kmain
之前,我正在按
eax
ebx
。你知道这里出了什么问题吗?

原来是位屏蔽的问题。如果我们放弃它,我们仍然可以有32位地址,内存映射也可以正常工作