2016-05-05 2 views
0

は私はGDBを発見だし、それは、例えば、関数の宣言のメモリアドレスを取得することが可能ですかどうかは知りたい:私はアドレスが機能func()宣言される知るにはどうすればよいGDB:行番号を知っている関数宣言のアドレスを取得するには?

int func() 
{ 
    return 1; 
} 

int main() 
{ 
    func(); 
    return 0; 
} 

+0

()'始まりますか?あなたはそれの開始アドレスが欲しいですか? – Gopi

+0

開始アドレスは「はい」 – aurelien75000

答えて

0

あなたはまた、以下のように行番号のアドレスを取得するためにinfo line <line number>を使用することができます:あなたは、関数 `FUNCため、正確にスタックを知りたいわけ

(gdb) list 
1 #include <stdio.h> 
2 
3 int func() 
4 { 
5  return 1; 
6 } 
7 
8 int main() 
9 { 
10  func(); 
(gdb) info line 3 
Line 3 of "test.c" is at address 0x4004ed <func> but contains no code. 
(gdb) p &func 
$1 = (int (*)()) 0x4004ed <func> 
(gdb) 
0

宣言(および型システム)は、コンパイラにとって重要です。実行可能ファイルには表現がないため、メモリアドレスはありません(デバッグシンボル以外)。

static - リンケージ定義は、リンカによってメモリ内に配置され、アドレスを持っています。あなたはシンボルのメモリアドレスを取得したい場合、あなたはそれに&operator¹を使用する必要があります。

(gdb) print &func 

まさにあなたががあることを必要とする理由私は、わかりません。 funcのスタックフレームを意味する場合は、フレームを選択またはステッピングした後にinfo frameを使用できます。


[1]:機能のために&を省略することができます。

関連する問題