Gdb 找到变量Buf的确切地址

Gdb 找到变量Buf的确切地址,gdb,buffer,stack-overflow,Gdb,Buffer,Stack Overflow,作为参考,我使用以下代码: #include <stdio.h> #include <string.h> int main (void) { char buf[100]; // ------> How do I find the address in gdb? printf ("Buffer is at memory location: %08x\n", &buf); strcpy (buf, "some random text"

作为参考,我使用以下代码:

#include <stdio.h>
#include <string.h>

int main (void) {
    char buf[100]; // ------> How do I find the address in gdb?

    printf ("Buffer is at memory location: %08x\n", &buf);
    strcpy (buf, "some random text");
    printf ("Text is [%s]\n", buf);

    return 0;
}
#包括
#包括
内部主(空){
char buf[100];//-->如何在gdb中找到地址?
printf(“缓冲区位于内存位置:%08x\n”,&buf);
strcpy(buf,“一些随机文本”);
printf(“文本是[%s]\n”,buf);
返回0;
}
如何获取
gdb
以显示
buf
变量的地址?

(gdb)p&a
如果您需要变量
a
的地址。变量可能缓存在寄存器中,在这种情况下,GDB会告诉您寄存器$xxx中标识符“A”请求的
地址


旁注:不要使用
获取
,请参阅。

如果您在gdb中输入以下内容,您将获得地址:

start
p &buf
如以下谈话内容所示:

pax$ gdb ./qq.exe
GNU gdb 6.8.0.20080328-cvs (cygwin-special)
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "i686-pc-cygwin"...
(gdb) start
Breakpoint 1 at 0x401144: file qq.c, line 2.
Starting program: /home/pax/qq.exe
[New thread 2912.0xf9c]
[New thread 2912.0x518]
main () at qq.c:2
2       int main (int argc, char **argv) {
(gdb) p &buf
$1 = (char (*)[100]) 0x22ccd0
(gdb)
pax$gdb./qq.exe
GNU gdb 6.8.0.20080328-cvs(cygwin专用)
版权所有(C)2008免费软件基金会。
许可证GPLv3+:GNU GPL版本3或更高版本
这是自由软件:您可以自由更改和重新发布它。
在法律允许的范围内,不存在任何担保。键入“显示复制”
和“显示保修”了解详细信息。
此GDB配置为“i686 pc cygwin”。。。
(gdb)启动
0x401144处的断点1:文件qq.c,第2行。
启动程序:/home/pax/qq.exe
[新线程2912.0xf9c]
[新线程2912.0x518]
main()位于qq.c:2
2内部主(内部argc,字符**argv){
(gdb)p&buf
$1=(字符(*)[100])0x22ccd0
(gdb)

当gdb设置为C语言模式(和Objective-C)时,
&
操作员将工作

在您可以使用的任何语言模式下

(gdb) info address buf
Symbol "buf" is static storage at address 0x903278.

(输出与您的代码不完全对应。)我之所以写这个答案,是因为这个问题即使是在寻找其他语言答案的人(包括我自己)也会发现。你也可以通过
设置语言C
切换到C模式,但更改后符号名称可能会有所不同。

我不认为
buf
会缓存在寄存器中。除非它是一个非常大的寄存器:-)你是说你的处理器没有100字节的寄存器?伙计,你在运行什么硬件?它是CygW在中。只有$Dedity知道在模拟UNIX的封面下发生了什么:-)感谢您明确的回答!
没有符号“buf”在目前的情况下。
好吧,@Arin,我猜你做错了什么,因为这是它的真实记录。虽然它是在大约六年前回答的,所以我的记忆可能有问题,但我不太可能有编造东西的习惯:-)如果它对你不起作用,我建议在你喜欢的地方发布一个问题让更多的人(不仅仅是我)来研究它。