探究机器码,深入研究C语言程序的机制

时间:2023-03-09 19:43:45
探究机器码,深入研究C语言程序的机制

用C高级编程语言写的程序,都要经过编译链接成本机可执行的程序。这个可执行程序究竟是什么呢?在Linux上,我们可以用objdump命令很方便地查看一个可执行程序的机器码。我们从一个简单的示例开始,说一说怎么理解机器码。

一、一个简单的c代码,什么都不做: testc.c

   #include <stdio.h>

   int main(int argc, char **argv)
{ return ;
}

  这段代码异常简单,只是向系统返回一个值为1的量即可。

二、Makefile文件如下:

   testc:testc.o
gcc -S testc.c -o testc.s
gcc testc.c -o testc
objdump -D testc > dumpTestc.txt clean:
rm testc testc.s testc.o dumpTestc.txt

  不要觉得这么简单的程序还需要Makefile文件,但是为了使用方便,还是使用更方便:

  生成了:

    可执行文件testc,

    生成了目标文件testc.o,

    生成了汇编文件testc.s

    生成了机器码与汇编对应的文件dumpTestc.txt

    还可以借助clean完成中间生成文件的清理工作

make

  完成上边工作的一键处理化,最后,查看文件分别如下:

       .file   "testc.c"
.text
.globl main
.type main, @function
main:
.LFB0:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset
.cfi_offset , -
movq %rsp, %rbp
.cfi_def_cfa_register
movl %edi, -(%rbp)
movq %rsi, -(%rbp)
movl $, %eax
popq %rbp
.cfi_def_cfa ,
ret
.cfi_endproc
.LFE0:
.size main, .-main
.ident "GCC: (GNU) 9.2.0"
.section .note.GNU-stack,"",@progbits

  再次查看机器码和汇编对应的代码:

 testc:     文件格式 elf64-x86-

 Disassembly of section .interp:

 00000000000002a8 <.interp>:
2a8: 2f (bad)
2a9: 6c insb (%dx),%es:(%rdi)
2aa: 2f 6c imul $0x646c2f34,0x36(%rdx),%esp
2b1: 2d 6c 6e sub $0x756e696c,%eax
2b6: 2d js 2e5 <_init-0xd1b>
2b8: js 2f2 <_init-0xd0e>
2ba: 2d 2e ss sub $0x732e3436,%eax
2c0: 6f outsl %ds:(%rsi),(%dx)
2c1: 2e xor %cs:(%rax),%al Disassembly of section .note.gnu.build-id: 00000000000002c4 <.note.gnu.build-id>:
2c4: add $0x0,%al
2c6: add %al,(%rax)
2c8: adc $0x0,%al
2ca: add %al,(%rax)
2cc: add (%rax),%eax
2ce: add %al,(%rax)
2d0: rex.RXB
2d1: 4e rex.WRX push %rbp
2d3: 8d f6 a9 add %dh,0x18a9f624(,%rcx,)
2da: 9b fwait
2db: (bad)
2dc: fe or %edi,%esi
2de: 3f ss (bad)
2e0: 8d (bad)
2e1: d1 dc shll -0x24(%rcx)
2e4: 9f lahf
2e5: b4 gs mov $0x80,%ah Disassembly of section .note.ABI-tag: 00000000000002e8 <.note.ABI-tag>:
2e8: add $0x0,%al
2ea: add %al,(%rax)
2ec: adc %al,(%rax)
2ee: add %al,(%rax)
2f0: add %eax,(%rax)
2f2: add %al,(%rax)
2f4: rex.RXB
2f5: 4e rex.WRX push %rbp
2f7: add %al,(%rax)
2f9: add %al,(%rax)
2fb: add %al,(%rbx)
2fd: add %al,(%rax)
2ff: add %al,(%rdx)
: add %al,(%rax)
: add %al,(%rax)
: add %al,(%rax)
... Disassembly of section .gnu.hash: <.gnu.hash>:
: add %eax,(%rax)
30a: add %al,(%rax)
30c: add %eax,(%rax)
30e: add %al,(%rax)
: add %eax,(%rax)
... Disassembly of section .dynsym: <.dynsym>:
...
: cmp %al,(%rax)
: add %al,(%rax)
: and %al,(%rax)
...
: add %al,(%rax)
: 1a sbb (%rax),%al
35a: add %al,(%rax)
35c: adc (%rax),%al
...
36e: add %al,(%rax)
: push %rsp
: add %al,(%rax)
: add %ah,(%rax)
...
: add %al,(%rax)
: add %ah,0x0(%rbx)
38a: add %al,(%rax)
38c: and %al,(%rax)
...
39e: add %al,(%rax)
3a0: 0b or (%rax),%eax
3a2: add %al,(%rax)
3a4: and (%rax),%al
... Disassembly of section .dynstr: 00000000000003b8 <.dynstr>:
3b8: 6c add %ch,0x62(%rcx,%rbp,)
3bc: 2e movslq (%rsi),%ebp
3be: 6f jae 42f <_init-0xbd1>
3c0: 2e 5f 5f cs add %bl,%ss:0x5f(%rdi)
3c5: movslq 0x61(%rax),%edi
3c8: 5f pop %rdi
3c9: 6e 6c imul $0x696c,0x61(%rsi),%bp
3cf: 7a jp <_init-0xbca>
3d1: 5f 5f add %bl,0x5f(%rdi)
3d4: 6c insb (%dx),%es:(%rdi)
3d5: 5f imul $0x6174735f,0x63(%rdx),%esp
3dc: jb <_init-0xbae>
3de: 5f pop %rdi
3df: 6d insl (%dx),%es:(%rdi)
3e0: (bad)
3e1: 6e 4c imul $0x42494c47,0x0(%rsi),%ebp
3e8: 5f rex.XB pop %r15
3ea: 2e xor (%rsi),%ch
3ec: 2e xor (%rsi),%ch
3ee: 5f xor $0x54495f00,%eax
3f3: 4d 5f rex.WRB pop %r15
3f5: fs gs jb 45e <_init-0xba2>
3f9: imul $0x4d547265,0x74(%ebx),%esi
: 4d
: 6c rex.XB insb (%dx),%es:(%rdi)
: 6f outsl %ds:(%rsi),(%dx)
: 6e outsb %ds:(%rsi),(%dx)
: gs push %rsp
: (bad)
: (bad)
: 6c insb (%dx),%es:(%rdi)
40a: 5f 5f add %bl,%gs:0x5f(%rdi)
40e: 6d insl (%dx),%es:(%edi)
: 6f outsl %ds:(%rsi),(%dx)
: 6e outsb %ds:(%rsi),(%dx)
: 5f pop %rdi
: jae <_init-0xb77>
: (bad)
: jb 48c <_init-0xb74>
: 5f pop %rdi
: 5f pop %rdi
41a: 5f add %bl,0x49(%rdi)
41d: push %rsp
41e: 4d 5f rex.WRB pop %r15
: jb <_init-0xb79>
: imul $0x4d547265,0x74(%ebx),%esi
: 4d
42a: 6c rex.XB insb (%dx),%es:(%rdi)
42c: 6f outsl %ds:(%rsi),(%dx)
42d: 6e outsb %ds:(%rsi),(%dx)
42e: gs push %rsp
: (bad)
: .byte 0x62
: 6c insb (%dx),%es:(%rdi)
: gs
... Disassembly of section .gnu.version: <.gnu.version>:
: add %al,(%rax)
: add %al,(%rax)
43a: add (%rax),%al
43c: add %al,(%rax)
43e: add %al,(%rax)
: add (%rax),%al Disassembly of section .gnu.version_r: <.gnu.version_r>:
: add %eax,(%rax)
44a: add %eax,(%rax)
44c: add %eax,(%rax)
44e: add %al,(%rax)
: adc %al,(%rax)
: add %al,(%rax)
: add %al,(%rax)
: add %al,(%rax)
: 1a jne <_init-0xb8c>
45a: imul $0x20000,(%rcx),%ecx
: 2c sub $0x0,%al
: add %al,(%rax)
: add %al,(%rax)
... Disassembly of section .rela.dyn: <.rela.dyn>:
: 3e sub %bh,(%rsi)
46a: add %al,(%rax)
46c: add %al,(%rax)
46e: add %al,(%rax)
: or %al,(%rax)
: add %al,(%rax)
: add %al,(%rax)
: add %al,(%rax)
: adc %dl,(%rcx)
47a: add %al,(%rax)
47c: add %al,(%rax)
47e: add %al,(%rax)
: 3e xor %bh,(%rsi)
: add %al,(%rax)
: add %al,(%rax)
: add %al,(%rax)
: or %al,(%rax)
48a: add %al,(%rax)
48c: add %al,(%rax)
48e: add %al,(%rax)
: c0 rclb $0x0,(%rax)
: add %al,(%rax)
: add %al,(%rax)
: add %ah,(%rax)
: add %al,(%rax)
49c: add %al,(%rax)
49e: add %al,(%rax)
4a0: or %al,(%rax)
4a2: add %al,(%rax)
4a4: add %al,(%rax)
4a6: add %al,(%rax)
4a8: and %al,0x0(%rax)
4ab: add %al,(%rax)
4ad: add %al,(%rax)
4af: d8 add %bl,%al
4b1: 3f (bad)
4b2: add %al,(%rax)
4b4: add %al,(%rax)
4b6: add %al,(%rax)
4b8: (bad)
4b9: add %al,(%rax)
4bb: add %al,(%rcx)
...
4c5: add %al,(%rax)
4c7: e0 add %ah,%al
4c9: 3f (bad)
4ca: add %al,(%rax)
4cc: add %al,(%rax)
4ce: add %al,(%rax)
4d0: (bad)
4d1: add %al,(%rax)
4d3: add %al,(%rdx)
...
4dd: add %al,(%rax)
4df: e8 add %ch,%al
4e1: 3f (bad)
4e2: add %al,(%rax)
4e4: add %al,(%rax)
4e6: add %al,(%rax)
4e8: (bad)
4e9: add %al,(%rax)
4eb: add %al,(%rbx)
...
4f5: add %al,(%rax)
4f7: f0 add %dh,%al
4f9: 3f (bad)
4fa: add %al,(%rax)
4fc: add %al,(%rax)
4fe: add %al,(%rax)
: (bad)
: add %al,(%rax)
: add %al,(%rax,%rax,)
...
50e: add %al,(%rax)
: f8 clc
: 3f (bad)
: add %al,(%rax)
: add %al,(%rax)
: add %al,(%rax)
: (bad)
: add %al,(%rax)
51b: add %al,0x0(%rip) # <_init-0xadf>
: add %al,(%rax)
: add %al,(%rax)
: add %al,(%rax)
... Disassembly of section .init: <_init>:
: f3 0f 1e fa endbr64
: ec sub $0x8,%rsp
: 8b d9 2f mov 0x2fd9(%rip),%rax # 3fe8 <__gmon_start__>
100f: c0 test %rax,%rax
: je <_init+0x16>
: ff d0 callq *%rax
: c4 add $0x8,%rsp
101a: c3 retq Disassembly of section .text: <_start>:
: f3 0f 1e fa endbr64
: ed xor %ebp,%ebp
: d1 mov %rdx,%r9
: 5e pop %rsi
102a: e2 mov %rsp,%rdx
102d: e4 f0 and $0xfffffffffffffff0,%rsp
: push %rax
: push %rsp
: 4c 8d lea 0x166(%rip),%r8 # 11a0 <__libc_csu_fini>
103a: 8d 0d ef lea 0xef(%rip),%rcx # <__libc_csu_init>
: 8d 3d d1 lea 0xd1(%rip),%rdi # <main>
: ff 2f callq *0x2f92(%rip) # 3fe0 <__libc_start_main@GLIBC_2.2.5>
104e: f4 hlt
104f: nop <deregister_tm_clones>:
: 8d 3d d1 2f lea 0x2fd1(%rip),%rdi # <__TMC_END__>
: 8d ca 2f lea 0x2fca(%rip),%rax # <__TMC_END__>
105e: f8 cmp %rdi,%rax
: je <deregister_tm_clones+0x28>
: 8b 6e 2f mov 0x2f6e(%rip),%rax # 3fd8 <_ITM_deregisterTMCloneTable>
106a: c0 test %rax,%rax
106d: je <deregister_tm_clones+0x28>
106f: ff e0 jmpq *%rax
: 0f 1f nopl 0x0(%rax)
: c3 retq
: 0f 1f nopl 0x0(%rax) <register_tm_clones>:
: 8d 3d a1 2f lea 0x2fa1(%rip),%rdi # <__TMC_END__>
: 8d 9a 2f lea 0x2f9a(%rip),%rsi # <__TMC_END__>
108e: fe sub %rdi,%rsi
: f0 mov %rsi,%rax
: c1 ee 3f shr $0x3f,%rsi
: c1 f8 sar $0x3,%rax
109c: c6 add %rax,%rsi
109f: d1 fe sar %rsi
10a2: je 10b8 <register_tm_clones+0x38>
10a4: 8b 2f mov 0x2f45(%rip),%rax # 3ff0 <_ITM_registerTMCloneTable>
10ab: c0 test %rax,%rax
10ae: je 10b8 <register_tm_clones+0x38>
10b0: ff e0 jmpq *%rax
10b2: 0f 1f nopw 0x0(%rax,%rax,)
10b8: c3 retq
10b9: 0f 1f nopl 0x0(%rax) 00000000000010c0 <__do_global_dtors_aux>:
10c0: f3 0f 1e fa endbr64
10c4: 3d 5d 2f cmpb $0x0,0x2f5d(%rip) # <__TMC_END__>
10cb: jne <__do_global_dtors_aux+0x40>
10cd: push %rbp
10ce: 3d 2f cmpq $0x0,0x2f22(%rip) # 3ff8 <__cxa_finalize@GLIBC_2.2.5>
10d5:
10d6: e5 mov %rsp,%rbp
10d9: 0d je 10e8 <__do_global_dtors_aux+0x28>
10db: 8b 3d 3e 2f mov 0x2f3e(%rip),%rdi # <__dso_handle>
10e2: ff 2f callq *0x2f10(%rip) # 3ff8 <__cxa_finalize@GLIBC_2.2.5>
10e8: e8 ff ff ff callq <deregister_tm_clones>
10ed: c6 2f movb $0x1,0x2f34(%rip) # <__TMC_END__>
10f4: 5d pop %rbp
10f5: c3 retq
10f6: 2e 0f 1f nopw %cs:0x0(%rax,%rax,)
10fd:
: c3 retq
: 2e 0f 1f data16 nopw %cs:0x0(%rax,%rax,)
:
110c: 0f 1f nopl 0x0(%rax) <frame_dummy>:
: f3 0f 1e fa endbr64
: e9 ff ff ff jmpq <register_tm_clones> <main>:
: push %rbp
111a: e5 mov %rsp,%rbp
111d: 7d fc mov %edi,-0x4(%rbp)
: f0 mov %rsi,-0x10(%rbp)
: b8 mov $0x1,%eax
: 5d pop %rbp
112a: c3 retq
112b: 0f 1f nopl 0x0(%rax,%rax,) <__libc_csu_init>:
: f3 0f 1e fa endbr64
: push %r15
: 4c 8d 3d eb 2c lea 0x2ceb(%rip),%r15 # 3e28 <__frame_dummy_init_array_entry>
113d: push %r14
113f: d6 mov %rdx,%r14
: push %r13
: f5 mov %rsi,%r13
: push %r12
: fc mov %edi,%r12d
114c: push %rbp
114d: 8d 2d dc 2c lea 0x2cdc(%rip),%rbp # 3e30 <__init_array_end>
: push %rbx
: 4c fd sub %r15,%rbp
: ec sub $0x8,%rsp
115c: e8 9f fe ff ff callq <_init>
: c1 fd sar $0x3,%rbp
: 1f je <__libc_csu_init+0x56>
: db xor %ebx,%ebx
: 0f 1f nopl 0x0(%rax)
: 4c f2 mov %r14,%rdx
: 4c ee mov %r13,%rsi
: e7 mov %r12d,%edi
: ff df callq *(%r15,%rbx,)
117d: c3 add $0x1,%rbx
: dd cmp %rbx,%rbp
: ea jne <__libc_csu_init+0x40>
: c4 add $0x8,%rsp
118a: 5b pop %rbx
118b: 5d pop %rbp
118c: 5c pop %r12
118e: 5d pop %r13
: 5e pop %r14
: 5f pop %r15
: c3 retq
: 2e 0f 1f data16 nopw %cs:0x0(%rax,%rax,)
119c: 00000000000011a0 <__libc_csu_fini>:
11a0: f3 0f 1e fa endbr64
11a4: c3 retq Disassembly of section .fini: 00000000000011a8 <_fini>:
11a8: f3 0f 1e fa endbr64
11ac: ec sub $0x8,%rsp
11b0: c4 add $0x8,%rsp
11b4: c3 retq Disassembly of section .rodata: <_IO_stdin_used>:
: add %eax,(%rax)
: add (%rax),%al Disassembly of section .eh_frame_hdr: <__GNU_EH_FRAME_HDR>:
: 1b add %ebx,(%rbx)
: 3b add (%rbx),%edi
: sub %al,(%rax)
200a: add %al,(%rax)
200c: add $0x0,%al
200e: add %al,(%rax)
: 1c f0 sbb $0xf0,%al
: ff (bad)
: ff incl 0x0(%rax,%rax,)
: f1 ff ff 5c add %dl,0x5cfffff1(%rip) # 5d00200e <_end+0x5cffdfde>
201d: add %al,(%rax)
201f: 2c f1 add %ch,(%rcx,%rsi,)
: ff (bad)
: ff (bad)
: 7c jl <__GNU_EH_FRAME_HDR+0x22>
: add %al,(%rax)
: 9c pushfq
: f1 icebp
202a: ff (bad)
202b: ff c4 inc %esp
202d: add %al,(%rax)
... Disassembly of section .eh_frame: <__FRAME_END__-0xac>:
: adc $0x0,%al
: add %al,(%rax)
: add %al,(%rax)
: add %al,(%rax)
: 7a add %edi,0x52(%rdx)
203b: add %al,(%rcx)
203d: js 204f <__GNU_EH_FRAME_HDR+0x4b>
203f: 1b add %ebx,(%rbx)
: 0c or $0x7,%al
: or %dl,0x14000001(%rax)
: add %al,(%rax)
204b: 1c add %bl,(%rax,%rax,)
204e: add %al,(%rax)
: d0 ef shr %bh
: ff (bad)
: ff 2f ljmp *(%rdi)
: add %al,(%rax)
: add %al,(%rax)
: rex.R (bad)
205b: adc %al,(%rax)
205d: add %al,(%rax)
205f: 1c add %bl,(%rax,%rax,)
: add %al,(%rax)
: xor $0x0,%al
: add %al,(%rax)
: b1 f0 mov $0xf0,%cl
206a: ff (bad)
206b: ff callq *(%rdx)
206d: add %al,(%rax)
206f: add %al,(%rax)
: 0e rex.B (bad)
: 0d adc %al,0x60d4302(%rsi)
: 4d 0c rex.WRB or $0x7,%al
207c: or %al,(%rax)
207e: add %al,(%rax)
: add %r8b,(%rax)
: add %dl,0x0(%rax,%rax,)
: a8 f0 ff ff add %ch,0x65fffff0(%rax)
208d: add %al,(%rax)
208f: add %al,(%rax)
: 0e rex.RX (bad)
: 8f 0e adc %cl,0x180e4902(%rdi)
: 8e mov (%rbx),%es
209b: 0e rex.RB (bad)
209d: 8d 0e and %cl,0x280e4504(%rbp)
20a3: 8c 0e mov %es,-0x79cff1bc(%rip) # ffffffff86302eed <_end+0xffffffff862feebd>
20a9: (bad)
20aa: 0e rex.W (bad)
20ac: 0e cmp %al,0x400e4707(%rbx)
20b2: 6e outsb %ds:(%rsi),(%dx)
20b3: 0e (bad)
20b4: 0e cmp %al,0xe(%rcx)
20b7: 0e xor %al,0xe(%rcx)
20ba: 0e sub %al,0xe(%rdx)
20bd: 0e and %al,0xe(%rdx)
20c0: 0e sbb %al,0xe(%rdx)
20c3: 0e adc %al,0xe(%rdx)
20c6: or %al,(%rax)
20c8: adc %al,(%rax)
20ca: add %al,(%rax)
20cc: 9c pushfq
20cd: add %al,(%rax)
20cf: d0 add %dl,%al
20d1: f0 ff lock (bad)
20d3: ff incl 0x0(%rip) # 20d9 <__GNU_EH_FRAME_HDR+0xd5>
20d9: add %al,(%rax)
... 00000000000020dc <__FRAME_END__>:
20dc: add %al,(%rax)
... Disassembly of section .init_array: 0000000000003e28 <__frame_dummy_init_array_entry>:
3e28: adc %dl,(%rcx)
3e2a: add %al,(%rax)
3e2c: add %al,(%rax)
... Disassembly of section .fini_array: 0000000000003e30 <__do_global_dtors_aux_fini_array_entry>:
3e30: c0 rclb $0x0,(%rax)
3e33: add %al,(%rax)
3e35: add %al,(%rax)
... Disassembly of section .dynamic: 0000000000003e38 <_DYNAMIC>:
3e38: add %eax,(%rax)
3e3a: add %al,(%rax)
3e3c: add %al,(%rax)
3e3e: add %al,(%rax)
3e40: add %eax,(%rax)
3e42: add %al,(%rax)
3e44: add %al,(%rax)
3e46: add %al,(%rax)
3e48: 0c or $0x0,%al
3e4a: add %al,(%rax)
3e4c: add %al,(%rax)
3e4e: add %al,(%rax)
3e50: add %dl,(%rax)
3e52: add %al,(%rax)
3e54: add %al,(%rax)
3e56: add %al,(%rax)
3e58: 0d or $0x0,%eax
3e5d: add %al,(%rax)
3e5f: a8 add %ch,0x11(%rax)
3e65: add %al,(%rax)
3e67: add %bl,(%rcx)
3e69: add %al,(%rax)
3e6b: add %al,(%rax)
3e6d: add %al,(%rax)
3e6f: add %ch,(%rax)
3e71: 3e add %al,%ds:(%rax)
3e74: add %al,(%rax)
3e76: add %al,(%rax)
3e78: 1b sbb (%rax),%eax
3e7a: add %al,(%rax)
3e7c: add %al,(%rax)
3e7e: add %al,(%rax)
3e80: or %al,(%rax)
3e82: add %al,(%rax)
3e84: add %al,(%rax)
3e86: add %al,(%rax)
3e88: 1a sbb (%rax),%al
3e8a: add %al,(%rax)
3e8c: add %al,(%rax)
3e8e: add %al,(%rax)
3e90: 3e xor %bh,(%rsi)
3e92: add %al,(%rax)
3e94: add %al,(%rax)
3e96: add %al,(%rax)
3e98: 1c sbb $0x0,%al
3e9a: add %al,(%rax)
3e9c: add %al,(%rax)
3e9e: add %al,(%rax)
3ea0: or %al,(%rax)
3ea2: add %al,(%rax)
3ea4: add %al,(%rax)
3ea6: add %al,(%rax)
3ea8: f5 cmc
3ea9: fe (bad)
3eaa: ff 6f ljmp *0x0(%rdi)
3ead: add %al,(%rax)
3eaf: add %cl,(%rax)
3eb1: add (%rax),%eax
3eb3: add %al,(%rax)
3eb5: add %al,(%rax)
3eb7: add %al,0x0(%rip) # 3ebd <_DYNAMIC+0x85>
3ebd: add %al,(%rax)
3ebf: b8 add %bh,0x3(%rax)
3ec5: add %al,(%rax)
3ec7: add %al,(%rsi)
3ec9: add %al,(%rax)
3ecb: add %al,(%rax)
3ecd: add %al,(%rax)
3ecf: add %ch,(%rax)
3ed1: add (%rax),%eax
3ed3: add %al,(%rax)
3ed5: add %al,(%rax)
3ed7: 0a add %cl,(%rdx)
3ed9: add %al,(%rax)
3edb: add %al,(%rax)
3edd: add %al,(%rax)
3edf: 7d add %bh,0x0(%rbp)
3ee2: add %al,(%rax)
3ee4: add %al,(%rax)
3ee6: add %al,(%rax)
3ee8: 0b or (%rax),%eax
3eea: add %al,(%rax)
3eec: add %al,(%rax)
3eee: add %al,(%rax)
3ef0: sbb %al,(%rax)
3ef2: add %al,(%rax)
3ef4: add %al,(%rax)
3ef6: add %al,(%rax)
3ef8: adc $0x0,%eax
...
3f05: add %al,(%rax)
3f07: add %al,(%rdi)
3f09: add %al,(%rax)
3f0b: add %al,(%rax)
3f0d: add %al,(%rax)
3f0f: add %ch,0x4(%rax)
3f12: add %al,(%rax)
3f14: add %al,(%rax)
3f16: add %al,(%rax)
3f18: or %al,(%rax)
3f1a: add %al,(%rax)
3f1c: add %al,(%rax)
3f1e: add %al,(%rax)
3f20: c0 rolb $0x0,(%rax)
3f23: add %al,(%rax)
3f25: add %al,(%rax)
3f27: add %cl,(%rcx)
3f29: add %al,(%rax)
3f2b: add %al,(%rax)
3f2d: add %al,(%rax)
3f2f: add %bl,(%rax)
3f31: add %al,(%rax)
3f33: add %al,(%rax)
3f35: add %al,(%rax)
3f37: fb add %bh,%bl
3f39: ff (bad)
3f3a: ff 6f ljmp *0x0(%rdi)
3f3d: add %al,(%rax)
3f3f: add %al,(%rax)
3f41: add %al,(%rax)
3f43: or %al,(%rax)
3f45: add %al,(%rax)
3f47: fe add %bh,%dh
3f49: ff (bad)
3f4a: ff 6f ljmp *0x0(%rdi)
3f4d: add %al,(%rax)
3f4f: add %cl,0x4(%rax)
3f52: add %al,(%rax)
3f54: add %al,(%rax)
3f56: add %al,(%rax)
3f58: ff (bad)
3f59: ff (bad)
3f5a: ff 6f ljmp *0x0(%rdi)
3f5d: add %al,(%rax)
3f5f: add %al,(%rcx)
3f61: add %al,(%rax)
3f63: add %al,(%rax)
3f65: add %al,(%rax)
3f67: f0 add %dh,%al
3f69: ff (bad)
3f6a: ff 6f ljmp *0x0(%rdi)
3f6d: add %al,(%rax)
3f6f: add %dh,(%rsi)
3f71: add $0x0,%al
3f73: add %al,(%rax)
3f75: add %al,(%rax)
3f77: f9 add %bh,%cl
3f79: ff (bad)
3f7a: ff 6f ljmp *0x0(%rdi)
3f7d: add %al,(%rax)
3f7f: add %al,(%rbx)
... Disassembly of section .got: 0000000000003fd8 <.got>:
... Disassembly of section .got.plt: <_GLOBAL_OFFSET_TABLE_>:
: 3e cmp %bh,(%rsi)
... Disassembly of section .data: <__data_start>:
... <__dso_handle>:
: and %al,0x0(%rax)
: add %al,(%rax)
: add %al,(%rax)
... Disassembly of section .bss: <__bss_start>:
... Disassembly of section .comment: <.comment>:
: rex.RXB
: rex.XB
: 3a rex.XB cmp (%r8),%spl
: 4e sub %al,0x4e(%rdi)
: push %rbp
: sub %esp,(%rax)
b: 2e cmp %ebp,(%rsi)
d: 2e xor (%rsi),%ch
f: xor %al,(%rax)

  代码看着近750行,但是实际有用的行数并不多。

  <main>:
: push %rbp
111a: e5 mov %rsp,%rbp
111d: 7d fc mov %edi,-0x4(%rbp)
: f0 mov %rsi,-0x10(%rbp)
: b8 mov $0x1,%eax
: 5d pop %rbp
112a: c3 retq
112b: 0f 1f nopl 0x0(%rax,%rax,)

只有大约这10行才是实现了返回值为1的情况,其他都是类似的。

其实还要说下字节序的问题,大端模式还是小端模式。

参考文档:https://www.cnblogs.com/guocai/archive/2012/10/18/2730048.html

相关文章