gdbを使用して環境変数を確認する

gdbを使用して環境変数を確認する

Ubuntu 12.04システムのプログラムでSHELL環境変数のアドレスを見つけようとしました。 ASLRをオフにします。

同様の投稿を見つけました。だから質問はそしてブログ投稿

gdbで以下を試しました。

 (gdb) x/s *((char **)environ)

しかし、次のようなメッセージを受け取りました。

 (gdb) No symbol "environ" in current context

Ubuntu 12.04では動作しませんか? gdbを使用してプロセス内の環境変数のアドレスを確認する別の方法はありますか?

ベストアンサー1

stripバイナリ記号がpedされていますか?その場合、シンボルテーブルもなく、シンボルを見つける可能性もありません。readelf私のhelloバイナリはここで見つけることができます。するシンボルテーブルがあります:

$ readelf -S hello | grep -i symtab
  [28] .symtab           SYMTAB           0000000000000000  000018f8
$ 

また、GDBを実行するとプログラムは実際に起動しますか?シンボルテーブルがロードされるまで、このシンボルを確認できないようです。 GDBを初めて起動するときはロードされませんが、クリックするとロードする必要がありますmain()main()プログラムにブレークポイントを配置してrunブレークmain()ポイントに達すると、変数を調べることができます。

Reading symbols from hello...(no debugging symbols found)...done.
(gdb) x/s *((char **)environ)
No symbol table is loaded.  Use the "file" command.
(gdb) b main
Breakpoint 1 at 0x4005c8
(gdb) r
Starting program: /home/ubuntu/hello 

Breakpoint 1, 0x00000000004005c8 in main ()
(gdb) x/s *((char **)environ)
0x7fffffffe38f: "XDG_VTNR=7"
(gdb) 

おすすめ記事