ELF输入字段和实际程序输入

时间:2010-11-25 09:29:35

标签: linux elf

我使用readelf实用程序检查(-h)可执行文件,我看到e_entry字段的值为:0x8048530。然后我重新编译已检查的程序,并通过添加以下行来打印自己的程序条目:printf(“%p \ n”,(void *)main)和输出:0x80485e4。为什么我有这个区别? (操作系统:Linux 32位)

2 个答案:

答案 0 :(得分:3)

可执行文件的入口点通常不是main本身,而是一个特定于平台的函数(我们称之为_start),它在调用main之前执行初始化。

答案 1 :(得分:1)

回答问题“我可以从主体访问_start标签吗?”:

#include <stdio.h>
int main()
{
    void* res;
    #if defined(__i386__)
        asm("movl _start, %%eax" : "=a" (res));
    #elif defined(__x86_64__)
        asm("movq _start, %%rax" : "=a" (res));
    #else
        #error Unsupported architecture
    #endif
    printf("%p\n", res);
    return 0;
}