我们可以使用GDB获取C程序中变量的地址吗?

我们可以使用GDB获取C程序中变量的地址吗?

实际上,我正在学习缓冲区溢出攻击。那么,我们能否找出缓冲区地址(我在程序中使用缓冲区变量,以便在写入缓冲区时,我将在堆栈中进行更改)?

答案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

相关内容