【发布时间】:2015-01-08 23:54:52
【问题描述】:
所以我正在使用 gdb 进行一些堆栈/堆挖掘,并试图获取 someInt 的值,但我已经抛出了我有限的 gdb 知识来获得它而没有效果。我需要使用 gdb 获取 someInt 的值,并且它仅在 #define 第 20 行之外的一个位置引用
#define someInt 0x11111111
void someFunc() {
// ...
int a = 0;
if(a==someInt) { //line 20
//...
}
}
在已编译的程序上调用 gdb 后,我尝试了 gdb break 20 然后 gdb x\dw $someInt 在当前上下文中得到 No symbol 'someInt'。
如果我尝试x/dw 0x11111111,我会得到“无法访问地址 0x11111111 的内存”。我无法像 How do I print a #defined constant in GDB? 那样重新编译代码,因此不知道如何在该空间打印值。
如何使用 gdb(最有可能使用 x)打印出 someInt 的值?
【问题讨论】:
-
grab the value for someInt.... 概念问题。someInt到底是什么?? -
someInt 是一个值,如果 'a' 匹配它,我会(通过 if 语句)模拟 shell 访问以在书中展示一个概念
-
所以,你可以看到定义,但你还想知道宏的值?还是需要打印 a 的值?
-
帮自己一个忙,并确保您的宏都有 UPPER_CASE 名称。这样,您就不太可能像您似乎正在做的那样将它们与变量混淆。宏是供预处理器排序的,一旦编译,它们就不再存在了
标签: c gdb heap-memory stack-memory