【发布时间】:2014-04-27 02:51:51
【问题描述】:
例如在下面的代码中 "justatest" 和格式 "%s" 在堆中定义:
char str[15]="justatest";
int main(){
printf("%s",str);
return 0;
}
在 GDB 中,我在调用 printf 之前得到了汇编代码:
=> 0x0804841f <+14>: movl $0x804a020,0x4(%esp)
0x08048427 <+22>: movl $0x80484d8,(%esp)
0x0804842e <+29>: call 0x80482f0 <printf@plt>
我是否必须使用“x/s 0x804a020”和“x/s 0x80484d8”检查参数 1by1
或者是否有我可以直接引用的堆中定义的常量表?
谢谢!
【问题讨论】:
-
您的程序在哪里使用堆内存?不清楚你想在这里实现/问什么?是否要打印 printf() 中传递的参数?
-
str不在堆中,而是在映射可执行文件的全局空间中。无论如何,如果可执行文件是用调试符号编译的,你可以按名称引用该变量。
标签: c assembly gdb heap-memory