2010-11-25 6 views
1

私はreadelfユーティリティーを使って実行可能ファイルをチェックします(そして、-h).e_entryフィールドの値は0x8048530です。次に、チェックされたプログラムを再コンパイルして、行:printf( "%p \ n"、(void *)main)を追加して独自のプログラムエントリを出力させ、出力する:0x80485e4。なぜ私はこの違いがありますか? (OS:Linux 32ビット)の実行のELFエントリーフィールドと実際のプログラムエントリー

答えて

3

エントリポイントが通常mainそのものではなくmainを呼び出す前に初期化を実行するプラットフォーム固有の機能(私たちは_startを呼ぶだろうということ)ではありません。質問に答える

+0

iは、本体から_startラベルにアクセスすることはできますか? –

1

iは、本体から_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; 
} 
関連する問題