Skip to content

Instantly share code, notes, and snippets.

@mertsalik
Last active September 11, 2015 13:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mertsalik/4d634695af89f8daf9fa to your computer and use it in GitHub Desktop.
Save mertsalik/4d634695af89f8daf9fa to your computer and use it in GitHub Desktop.
Otokon C - Tartışma

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

Optimization Level 1 (min)

foo function

Offset Data Command
00000F10 55 pushq %rbp
00000F11 4889E5 movq %rsp, %rbp
00000F14 4885FF testq %rdi, %rdi
00000F17 7406 je 0x100000f1f
00000F19 5D popq %rbp
00000F1A E921000000 jmpq "0x100000F40 (_bar)"
00000F1F 5D popq %rbp
00000F20 C3 ret
00000F21 6666666666662E0F1F840000000000 nopw %cs:(%rax,%rax)

main function

Offset Data Command
00000F30 55 pushq %rbp
00000F31 4889E5 movq %rsp, %rbp
00000F34 31FF xorl %edi, %edi
00000F36 E8D5FFFFFF callq "0x100000F10 (_foo)"
00000F3B 31C0 xorl %eax, %eax
00000F3D 5D popq %rbp
00000F3E C3 ret
00000F3F 90 nop

bar function

Offset Data Command
00000F40 55 pushq %rbp
00000F41 4889E5 movq %rsp, %rbp
00000F44 488D3D2C000000 leaq "0x1000000F77:"bar""(%rip), %rdi
00000F4B 5D popq %rbp
00000F4C E901000000 jmpq "[0x100000F52->_puts]"

Optimization Level 2 (mid)

foo function

Offset Data Command
00000F20 55 pushq %rbp
00000F21 4889E5 movq %rsp, %rbp
00000F24 4885FF testq %rdi, %rdi
00000F27 7406 je 0x100000f2f
00000F29 5D popq %rbp
00000F2A E921000000 jmpq "0x100000F50 (_bar)"
00000F2F 5D popq %rbp
00000F30 C3 ret
00000F31 6666666666662E0F1F840000000000 nopw %cs:(%rax,%rax)

main function

Offset Data Command
00000F40 55 pushq %rbp
00000F41 4889E5 movq %rsp, %rbp
00000F44 31C0 xorl %eax, %eax
00000F46 5D popq %rbp
00000F47 C3 ret
00000F48 90 nop
00000F49 90 nop
00000F4A 90 nop
00000F4B 90 nop
00000F4C 90 nop
00000F4D 90 nop
00000F4E 90 nop
00000F4F 90 nop

bar function

Offset Data Command
00000F50 55 pushq %rbp
00000F51 4889E5 movq %rsp, %rbp
00000F54 488D3D27000000 leaq "0x1000000F82:"bar""(%rip), %rdi
00000F5B 5D popq %rbp
00000F5C E901000000 jmpq "[0x100000F62->_puts]"

Optimization Level 3 (max)

same as opt-level-2

foo function

Offset Data Command
00000F20 55 pushq %rbp
00000F21 4889E5 movq %rsp, %rbp
00000F24 4885FF testq %rdi, %rdi
00000F27 7406 je 0x100000f2f
00000F29 5D popq %rbp
00000F2A E921000000 jmpq "0x100000F50 (_bar)"
00000F2F 5D popq %rbp
00000F30 C3 ret
00000F31 6666666666662E0F1F840000000000 nopw %cs:(%rax,%rax)

main function

Offset Data Command
00000F40 55 pushq %rbp
00000F41 4889E5 movq %rsp, %rbp
00000F44 31C0 xorl %eax, %eax
00000F46 5D popq %rbp
00000F47 C3 ret
00000F48 90 nop
00000F49 90 nop
00000F4A 90 nop
00000F4B 90 nop
00000F4C 90 nop
00000F4D 90 nop
00000F4E 90 nop
00000F4F 90 nop

bar function

Offset Data Command
00000F50 55 pushq %rbp
00000F51 4889E5 movq %rsp, %rbp
00000F54 488D3D27000000 leaq "0x1000000F82:"bar""(%rip), %rdi
00000F5B 5D popq %rbp
00000F5C E901000000 jmpq "[0x100000F62->_puts]"
#include<stdio.h>
void bar(void){
printf("bar\n");
}
#include<stdio.h>
extern void bar(void);
void foo(int *x)
{
int y = *x; /* (1) */
if(!x) /* (2) */
{
return; /* (3) */
}
bar();
return;
}
int main(void){
int* temp=NULL;
foo(temp);
return 0;
}
@mertsalik
Copy link
Author

Örnek derleme ve linkleme

gcc idontknow.c idontknow-extern.c -o question2.run --> decompile --> decompiled-binary-opt-0.asm.md

Gcc 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

  • decompiled-binary-opt-0.asm.md ( sıfır optimizasyon )
  • decompiled-binary-opt-1.asm.md
  • decompiled-binary-opt-2.asm.md
  • decompiled-binary-opt-3.asm.md ( maximum optimizasyon )

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment