我正在编写小型 C 程序来自学如何使用 GDB 反汇编代码。有问题的C是:
void function( char **pointer )
{
*pointer = malloc(100);
strcpy(*pointer,"This is text");
}
拆解是:
0x400620: push %rbp
0x400621: mov %rsp,%rbp
0x400624: sub $0x10,%rsp
0x400628: mov %rdi,-0x8(%rbp)
0x40062c: mov $0x64,%edi
0x400631: callq 0x4004f0 <malloc@plt>
0x400636: mov %rax,%rdx
0x400639: mov -0x8(%rbp),%rax
0x40063d: mov %rdx,(%rax)
0x400640: mov -0x8(%rbp),%rax
0x400644: mov (%rax),%rax
0x400647: movabs $0x2073692073696854,%rcx
0x400651: mov %rcx,(%rax)
0x400654: movl $0x74786574,0x8(%rax)
0x40065b: movb $0x0,0xc(%rax)
0x40065f: leaveq
0x400660: retq
我理解序言:0x400620
- 0x400624
。我也知道指针在这里被初始化为 100 个字符:0x400628
- 0x40063d
。
我似乎无法弄清楚在strcpy
做什么,我不明白如何检查0x400647
和 中列出的地址的内容0x400654
。
有人可以帮我解决这个问题吗?