2012-05-07 36 views
0

私のgdb bt callstackは関数のアドレスに関数名を与えます。その後、nm binary を実行し、関数名とアドレスマッピングを生成しました。私はnm出力とgdbアドレスを一致させようとしましたが、一致しませんでした。関数アドレスが(gdb) btで、高すぎる(物理アドレスのように見えます)。GDB CallStack仮想または物理アドレスを指定しますか?

gdbの関数のアドレス(例えば0x00007fffe6fc150f):

#9 0x00007fffe6fc150f in read_alias_file (fname=<value optimized out>, fname_len=<value optimized out>) at localealias.c:224 
#10 0x00007fffe6fc1a4e in _nl_expand_alias (name=0x7fffffffed04 "en_IN") at localealias.c:189 
#11 0x00007fffe6fbb62f in _nl_find_locale (locale_path=0x7fffe70df580 "/usr/lib/locale", locale_path_len=16, category=12, name=0x7fffffffdb90) at findlocale.c:119 
#12 0x00007fffe6fbacf6 in *__GI_setlocale (catesagory=12, locale=<value optimized out>) at setlocale.c:303 
#13 0x00007ffff17b8686 in 

が、私は私が得たバイナリからnmアドレスをしたときのマシンが64ビットである。この

0000000005ddda04 t StubGLBindFragDataLocationIndexed 
0000000005ddda3f t StubGLBindFramebuffer 
0000000005ddda65 t StubGLBindRenderbuffer 
0000000005ddda8b t StubGLBindTexture 
0000000005dddab1 t StubGLBlendColor 
0000000005dddaef t StubGLBlendFunc 
0000000005dddb15 t StubGLBlitFramebuffer 
0000000005dddb7e t StubGLBufferData 
0000000005dddbbd t StubGLBufferSubData 
0000000005dddc00 t StubGLCheckFramebufferStatus 
0000000005dddc1e t StubGLClear 
0000000005dddc3c t StubGLClearColor 
0000000005dddc7a t StubGLClearStencil 
0000000005dddc98 t StubGLColorMask 
0000000005dddcda t StubGLCompileShader 

のようなものです。

私が知っているように、gdbは仮想アドレスのみを表示します。しかし、なぜそれがどうして高すぎるのか分からず、 は現在のアドレスと一致していませんnm出力

gdbアドレスは仮想アドレスですか? nm o/pは000000000から始まっているので実際の仮想アドレスと似ています。しかし、なぜベースアドレスが自動的に追加されるのですか?

注:サンプルtest.outを試しました。それはうまく動作します。 btコールスタックアドレスは仮想アドレスで、nm a.outシンボル出力と完全に一致します。

答えて

2

0x00007fffe6fc150fのアドレスは共有ライブラリ(この場合はlibc.so.6)から来ています。それは、仮想アドレスですが、それはnm /lib/libc.so.6からではない一致出力は、ライブラリは、実行ごとに異なる特定の負荷アドレス、時にロードされますので。

libc.so.6がロードされた時刻は、info proc map GDBコマンドを実行すると分かります。 libc.so.6のロードアドレスを知ったら、nm出力のすべてのアドレスに追加し、結果はとなります。はGDB出力と一致します。

これは単純なa.outのために働いていた理由は、a.out(共有ライブラリとは違って)固定のロードアドレス(のLinux x86_64での通常0x400000)でロードされるようにリンクされ、ダイナミックローダによって移転されていないということです。

関連する問題