因此,我正在使用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)
| 归档时间: |
|
| 查看次数: |
3196 次 |
| 最近记录: |