2017-12-03 4 views
1

私のC++アプリケーションの.text開始とサイズを知りたい。私はこれに関する関連トピック(link)を読んでいましたが、私は自分が望むことをすることができません。私のサンプルプログラムのreadelfが出力を分析Linux elf .text direction

私はこれだ:だから私は私のプログラムの.textセクションは0x400830アドレスから開始することを理解

Section Headers: 
[Nr] Name    Type    Address   Offset 
Size    EntSize   Flags Link Info Align 

[14] .text    PROGBITS   0000000000400830 00000830 
0000000000000252 0000000000000000 AX  0  0  16 

を。

しかし、私は私のプログラムからこのアドレスへのアクセスをカント:

printf("My process ID : %d\n", getpid()); 
printf("Executable Start address: 0x%lx\n", (unsigned long)&__executable_start); 
printf("Text Start Address: 0x%lx\n", (unsigned long)&__etext); 

しかし、出力は次のとおりです。

My process ID : 4029 
Executable Start address: 0x400000 
Text Start Address: 0x400a8d 

あなたは開始アドレスが同じではありません見ることができるように。 .textセクションの開始アドレスへのアクセス方法。私はサイズまたは最終アドレスを知る必要があります...これは可能ですか?

+0

__etextはテキストセクションの最後であり、 "e"はあなたにそれを示唆しています。 –

+0

C!= C++。両方が実際に関連している場合を除き、使用している言語のみでタグを設定してください。 – tambre

+0

__etextがテキストセクションの終わりの場合...どのようにテキストセクションの先頭を取得できますか? –

答えて

0

私のC++アプリケーションの.text開始とサイズを知りたいと思っています。

あなたはなぜを語ってくれた場合は、あなたはおそらくより良い答えを得ているだろうことを知ってほしいです。実行可能はすべて.textセクションを持っている必要はありませないこと

注:セクションテーブルが取り除かれると、実行可能ファイルはまだうまく動作します。そのようなバイナリの場合、あなたの質問に答えることはできません。

.textのELFバイナリの正確なオフセットとサイズを知るには、単にセクションテーブル(readelfのように)を読み取らなければなりません。それはnot hardです。

ヒューリスティック/近似を使用することで、非常に近くになることができます。

すでに__executable_start__etextが見つかりました。 -通常.textセクションの最初のシンボル)を使用すると、より厳しい境界が得られます。

関連する問題