Optimization Level 0 ( none )
foo function
Offset | Data | Command |
---|---|---|
00000ED0 | 55 | pushq %rbp |
00000ED1 | 488900000 | movq %rsp, %rbp |
00000ED4 | 4883EC10 | subq $0x10, %rsp |
00000ED8 | 48897DF8 | movq %rdi, -0x8(%rbp) |
00000EDC | 488B7DF8 | movq -0x8(%rbp), %rdi |
00000EE0 | 8B07 | movl (%rdi), %eax |
00000EE2 | 8945F4 | movl %eax, -0xc(%rbp) |
00000EE5 | 48817DF800000000 | cmpq $0x0, -0x8(%rbp) |
00000EED | 0F8505000000 | jne 0x100000EF8 |
00000EF3 | E905000000 | jmpq 0x100000EFD |
00000EF8 | E843000000 | callq "0x100000F40 (_bar)" |
00000EFD | 4883C410 | addq $0x10, %rsp |
00000F01 | 5D | popq %rbp |
00000F02 | C3 | ret |
00000F03 | 666666662E0F1F840000000000 | nopw %cs: (%rax,%rax) |
main function
Offset | Data | Command |
---|---|---|
00000F10 | 55 | pushq %rbp |
00000F11 | 4889E5 | movq %rsp, %rbp |
00000F14 | 4883EC10 | subq $0x10, %rsp |
00000F18 | C745FC00000000 | movl $0x0, -0x4(%rbp) |
00000F1F | 48C745F000000000 | movq $0x0, -0x10(%rbp) |
00000F27 | 488B7DF0 | movq -0x10(%rbp), %rdi |
00000F2B | E8A0FFFFFF | callq "0x100000ED0 (_foo)" |
00000F30 | 31C0 | xorl %eax, %eax |
00000F32 | 4883C410 | addq $0x10, %rsp |
00000F36 | 5D | popq %rbp |
00000F37 | C3 | ret |
00000F38 | 90 | nop |
00000F39 | 90 | nop |
00000F3A | 90 | nop |
00000F3B | 90 | nop |
00000F3C | 90 | nop |
00000F3D | 90 | nop |
00000F3E | 90 | nop |
00000F3F | 90 | nop |
bar function
Offset | Data | Command |
---|---|---|
00000F40 | 55 | pushq %rbp |
00000F41 | 4889E5 | movq %rsp, %rbp |
00000F44 | 4883EC10 | subq $0x10, %rsp |
00000F48 | 488D3D33000000 | leaq "0x1000000F82: "bar\n""(%rip), %rdi |
00000F4F | B000 | movb $0x0, %al |
00000F51 | E80A000000 | callq "[0x100000F60->_printf]" |
00000F56 | 8945FC | movl %eax, -0x4(%rbp) |
00000F59 | 4883C410 | addq $0x10, %rsp |
00000F5D | 5D | popq %rbp |
00000F5E | C3 | ret |
Örnek derleme ve linkleme
gcc idontknow.c idontknow-extern.c -o question2.run
--> decompile --> decompiled-binary-opt-0.asm.mdGcc optimizasyonu etkinleştirerek aynı işlemi 3 farklı şekilde yapabiliyoruz.
gcc -O1 idontknow.c idontknow-extern.c -o question2.run
gcc -O2 idontknow.c idontknow-extern.c -o question2.run
gcc -O3 idontknow.c idontknow-extern.c -o question2.run
her farklı çalıştırılabilir dosyayı de-compile edip 4 farklı assembly dosyası elde edebiliriz.
Sırasıyla