关于lab1 bootmain ELFHDR的一些疑问 以及readseg函数的一个问题
匿名2023/07/31 19:52:24提问
    lab1student
361

在bootmain.c里面可以看到

#define ELFHDR          ((struct elfhdr *)0x10000)

这里用的是结构体指针强转的方式定义了一个0x10000的地址作为elf文件在内存中的入口地址

而观察tools/kernel.ld文件,开头有这么几句话:

ENTRY(kern_init)

SECTIONS {
    /* Load the kernel at this address: "." means the current address */
    . = 0x100000;

这里的意思不是说默认了kern_init从内存的0x100000开始嘛?与bootmain复制的0x10000不一致

请问我这里理解哪里有问题

我观察了试验一的答案程序,仍然是复制到0x10000这个地址去,如果改成0x100000反而会出现死机报错的现象,因为初次接触makefile或许还有我没注意的地方,麻烦高手解答一下为什么复制到0x10000地址

此外还有一个问题:

readseg函数中有这么一句:

va -= offset % SECTSIZE;

这句程序为什么要用减法来对齐sector地址,这样的话如果offset不是整512字节调用的话就会执行减法,除非指定的va能相对配合,且需要的字节不在硬盘sector头部,虽然整段程序实际上保证了没用到这个计算,读取的都是整段的sector,那么这句话很奇怪的写在这里,还占用了引导扇区的宝贵字节,到底是为了什么呢?

回答(0
    推荐问答
      Simple Empty
      暂无数据