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