下面这段代码让我有点迷惑。这是什么意思?定义精灵指针的起始位置?
#define ELFHDR ((struct Elf *) 0x10000)
看了下面的一些回答后,我意识到我的问题不够清楚。我不确定这个代码是什么意思?
((struct Elf *) 0x10000)
宏用于以下函数:
readseg((uint32_t) ELFHDR, SECTSIZE*8, 0);
将宏ELFHDR
定义为指向地址0x10000
的指针。显然,代码的作者知道ELF头在那里,但这并不是设置它的原因。它仍然在链接器脚本中设置。
由于这个设置是正确的(通常它是正确的…),访问ELFHDR导致读取可执行文件自己的ELF头。
在我读了这个线程之后,我意识到有两种方法来定义指针:
int *a
或
int* a
这篇文章解释得很好。
这个宏意味着它定义了一个ELF结构类型的指针,它的虚拟内存地址从0x10000
开始。