Cプログラムで変数のアドレスを取得するためにGDBを使用できますか?

Cプログラムで変数のアドレスを取得するためにGDBを使用できますか?

実際、私はバッファオーバーフロー攻撃について学んでいます。もしそうなら、バッファアドレスを見つけることができますか? (私はバッファに書き込むときにスタックでそれを変更するためにプログラムでバッファ変数を使用しています。)

ベストアンサー1

はい、変数が最適化されていない限り可能です。

たとえば、lsデバッグシンボルとともに使用されます。

gdb ls
>>> break main
>>> run
>>> print argv
$1 = (char **) 0x7fffffffdd78

この場合、argvポインタ自体です。ポインタ以外の変数のアドレスやポインタのアドレスが必要な場合は、&Cと同じように使用すると、gdb上記のようにアドレスを提供するか、変数がメモリに保存されていないかどうかがわかります。

>>> printf &argc
Address requested for identifier "argc" which is in register $rdi

x86では、 の内容からSPスタック位置を知ることができます。

>>> i r sp
sp             0x7fffffffdc98      0x7fffffffdc98

おすすめ記事