2010-11-25 48 views
1

我使用readelf實用程序檢查(-h)可執行文件,並且我看到e_entry字段的值爲:0x8048530。然後我重新編譯已檢查的程序,並通過添加printf(「%p \ n」,(void *)main)和output:0x80485e4來打印自己的程序條目。爲什麼我有這種差異? (OS:Linux 32位)ELF輸入字段和實際程序輸入

回答

3

可執行文件的入口點通常不main本身而是一個平臺特定的功能(我們會打電話給_start)的調用main之前要進行初始化。

+0

我可以從主體進入_start標籤? – 2010-11-25 09:43:54

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; 
}