65,185
社区成员




$ cat m.c
void a(char*);
int main(int argc,char*argv[])
{
char s[]="hello\n";
a(s);
return 0;
}
$ cat a.c
#include<unistd.h>
#include<string.h>
void a(char*s)
{
write(1,s,strlen(s));
}
$ objdump -d a.o
a.o: 文件格式 elf64-x86-64
Disassembly of section .text:
0000000000000000 <a>:
0: 55 push %rbp
1: 48 89 e5 mov %rsp,%rbp
4: 48 83 ec 10 sub $0x10,%rsp
8: 48 89 7d f8 mov %rdi,-0x8(%rbp)
c: 48 8b 45 f8 mov -0x8(%rbp),%rax
10: 48 89 c7 mov %rax,%rdi
13: e8 00 00 00 00 callq 18 <a+0x18>
18: 48 89 c2 mov %rax,%rdx
1b: 48 8b 45 f8 mov -0x8(%rbp),%rax
1f: 48 89 c6 mov %rax,%rsi
22: bf 01 00 00 00 mov $0x1,%edi
27: e8 00 00 00 00 callq 2c <a+0x2c>
2c: 90 nop
2d: c9 leaveq
2e: c3 retq
$ gcc m.o a.o -o m
$ objdump -d m
000000000040062c <a>:
40062c: 55 push %rbp
40062d: 48 89 e5 mov %rsp,%rbp
400630: 48 83 ec 10 sub $0x10,%rsp
400634: 48 89 7d f8 mov %rdi,-0x8(%rbp)
400638: 48 8b 45 f8 mov -0x8(%rbp),%rax
40063c: 48 89 c7 mov %rax,%rdi
40063f: e8 5c fe ff ff callq 4004a0 <strlen@plt>
400644: 48 89 c2 mov %rax,%rdx
400647: 48 8b 45 f8 mov -0x8(%rbp),%rax
40064b: 48 89 c6 mov %rax,%rsi
40064e: bf 01 00 00 00 mov $0x1,%edi
400653: e8 38 fe ff ff callq 400490 <write@plt>
400658: 90 nop
400659: c9 leaveq
40065a: c3 retq
40065b: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1)