如何在gdb中打印#define值?

Kur*_*ner 5 c heap stack gdb

因此,我正在使用gdb进行一些堆栈/堆挖掘,并尝试获取的值someInt,但是却投入了我有限的gdb知识以使其发挥作用。我需要获取someInt使用gdb 的值,并且它仅在#define第20行之外的一个位置被引用

#define someInt 0x11111111

void someFunc() {
   // ...
   int a = 0;
   if(a==someInt) {  //line 20
   //...
   }
}
Run Code Online (Sandbox Code Playgroud)

在已编译的程序上调用gdb之后,我尝试了一下gdb break 20,然后gdb x\dw $someInt在当前上下文中没有符号'someInt'。如果我尝试x/dw 0x11111111我得到“无法访问地址0x11111111的内存”。我无法按原样重新编译代码如何在GDB中打印#defined常量?因此对于如何在该空间打印值一无所知。

如何使用gdb(最可能使用x)打印出someInt的值?

fuk*_*hik 11

答案在这里:GCC -g vs -g3 GDB 标志:有什么区别?

用 -O0 -ggdb3 编译:

gcc -O0 -ggdb3 source.c
Run Code Online (Sandbox Code Playgroud)

来自文档

-ggdb level - 请求调试信息并使用level指定多少信息。默认级别为 2。

级别 3 包括额外信息,例如程序中存在的所有宏定义。当您使用 -g3 时,某些调试器支持宏扩展。

9               if(a == someInt)
(gdb) list
4
5       int main()
6       {
7               int a=0;
8
9               if(a == someInt)
10              {
11                      printf("!\n");
12              }
13      }
(gdb) p someInt
$1 = 1111
Run Code Online (Sandbox Code Playgroud)