下面是该二进制文件的源代码:
#include <stdio.h>
int main(){
printf("Hello World\n");
return 0;
}
下面是这个源代码的编译:
@CTOS:/tmp/mytemp$ gcc你好世界. c-o你好世界
现在,当我在gdb中反汇编我的二进制文件时,如下所示:
Reading symbols from helloWorld...
(No debugging symbols found in helloWorld)
(gdb) disassemble main
Dump of assembler code for function main:
0x0000000000001149 <+0>: endbr64
0x000000000000114d <+4>: push %rbp
0x000000000000114e <+5>: mov %rsp,%rbp
0x0000000000001151 <+8>: lea 0xeac(%rip),%rax
0x0000000000001158 <+15>: mov %rax,%rdi
0x000000000000115b <+18>: call 0x1050 <puts@plt>
0x0000000000001160 <+23>: mov $0x0,%eax
0x0000000000001165 <+28>: pop %rbp
0x0000000000001166 <+29>: ret
End of assembler dump.
(gdb) p (char*)0xeac
$1 = 0xeac <error: Cannot access memory at address 0xeac>
现在我想知道在puts函数调用中传递的“Hello World”字符串的地址,我想通过gdb命令在gdb中显示该地址。我该怎么做呢?
1条答案
按热度按时间smdnsysy1#
进入打印的步骤产生以下输出:
另一种方法是在进程的文本段中查找字符串,首先查看进程Map,然后使用
find
查找字符串。