首页 > GDB调试c程序找不到Hello World对应的字符串

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编译器,请指教


当然找不到啦,汇编里面是没有高级语言字符串这种概念的。
"Hello World\n"这个字符串在编译时就一同放在了程序代码的静态区,在启动程序时就已经一同载入到内存里,在汇编代码里,使用它最多也就是使用它的内存地址。汇编主要以操作寄存器为主,寄存器里可不像内存空间那么大,根本存不下完整的字符串。所谓的字符串,不过是高级语言的封装而已。


@有明 您好!感谢您帮忙,

Disassembly of section .cstring:

0000000100000f8e <.cstring>:
   100000f8e:    48                       rex.W
   100000f8f:    65 6c                    gs ins BYTE PTR es:[rdi],dx
   100000f91:    6c                       ins    BYTE PTR es:[rdi],dx
   100000f92:    6f                       outs   dx,DWORD PTR ds:[rsi]
   100000f93:    20 57 6f                 and    BYTE PTR [rdi+0x6f],dl
   100000f96:    72 6c                    jb     100001004 <dyld_stub_binder$stub+0x4>
   100000f98:    64 0a 00                 or     al,BYTE PTR fs:[rax]

终于找到HelloWorld了,在一个cstring的地方,这就是您说的静态区域吧?

【热门文章】
【热门文章】