GDB调试c程序找不到Hello World对应的字符串
#include<stdio.h>
int main(){
int i;
for(i=0;i<10;i++){
puts("Hello World\n");
}
return 0;
}
(gdb) disassemble main
Dump of assembler code for function main:
0x0000000100000f20 <+0>: push rbp
0x0000000100000f21 <+1>: mov rbp,rsp
=> 0x0000000100000f24 <+4>: sub rsp,0x10
0x0000000100000f28 <+8>: mov DWORD PTR [rbp-0x4],0x0
0x0000000100000f2f <+15>: mov DWORD PTR [rbp-0x8],0x0
0x0000000100000f36 <+22>: cmp DWORD PTR [rbp-0x8],0xa
0x0000000100000f3d <+29>: jge 0x100000f62 <main+66>
0x0000000100000f43 <+35>: lea rdi,[rip+0x44] # 0x100000f8e
0x0000000100000f4a <+42>: call 0x100000f6e
0x0000000100000f4f <+47>: mov DWORD PTR [rbp-0xc],eax
0x0000000100000f52 <+50>: mov eax,DWORD PTR [rbp-0x8]
0x0000000100000f55 <+53>: add eax,0x1
0x0000000100000f5a <+58>: mov DWORD PTR [rbp-0x8],eax
0x0000000100000f5d <+61>: jmp 0x100000f36 <main+22>
0x0000000100000f62 <+66>: mov eax,0x0
0x0000000100000f67 <+71>: add rsp,0x10
0x0000000100000f6b <+75>: pop rbp
0x0000000100000f6c <+76>: ret
End of assembler dump.
用GDB解析了main函数,我觉得对应的汇编语言里面应该有一个asc码的HelloWorld,可是怎么也找不到,用的clang编译器,请指教
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
当然找不到啦,汇编里面是没有高级语言字符串这种概念的。
"Hello World\n"
这个字符串在编译时就一同放在了程序代码的静态区,在启动程序时就已经一同载入到内存里,在汇编代码里,使用它最多也就是使用它的内存地址。汇编主要以操作寄存器为主,寄存器里可不像内存空间那么大,根本存不下完整的字符串。所谓的字符串,不过是高级语言的封装而已。@有明 您好!感谢您帮忙,
终于找到HelloWorld了,在一个cstring的地方,这就是您说的静态区域吧?