C-code zu Assembler umwandeln?

4 Antworten

Hast Du einen C-Compiler zur Hand, liefert der Dir gerne auch den ASM Code der Zielarchitektur.

Ansonsten: Ein if ist ein Conditional Jump bzw. Conditional Branch.

Um mal ein Beispiel (x86) zu zeigen:

# demo.c:3:     int c=0;
        movl    $0, -8(%rbp)    #, c
# demo.c:4:     int r=1;
        movl    $1, -4(%rbp)    #, r
# demo.c:5:     if (c!=1 && r!=0) printf("Yes");
        cmpl    $1, -8(%rbp)    #, c
        je      .L2     #,
# demo.c:5:     if (c!=1 && r!=0) printf("Yes");
        cmpl    $0, -4(%rbp)    #, r
        je      .L2     #,
# demo.c:5:     if (c!=1 && r!=0) printf("Yes");
        leaq    .LC0(%rip), %rdi        #,
        movl    $0, %eax        #,
        call    printf@PLT      #
.L2:
        movl    $0, %eax        #, _6

Wie Du siehst hat der Compiler hier die Conditionals invertiert und überspringt einfach den Teil, der ausgeführt werden soll, wenn die Bedingungen wahr werden.

Und je nach uARCH gibt es halt diverse Möglichkeiten das abzubilden, bei x86 gibt es neben JE und JNE noch diverse andere Conditional Jumps, bei anderen Arches kann es noch deutlich lustiger zugehen.

Handbuch vom Prozessor lesen und programmieren. Dass muss man selber tun, da gibt es keinen "cool programming button" und keine fertige library. Da ist man als google-powered programmer leider völlig aufgeschmissen.

Schau mal im Handbuch bei bedingten Sprüngen (conditional branch) nach

Raingurl 
Fragesteller
 06.07.2021, 13:36

Ach ja "wusste ich nicht". wollte ja nur Tipps und keine Lösung. Ich habe sehr viel recherchiert und über If-Anweisungen gibt nichts.

0

Einfach normal bauen, dann wird es in assembler umgewandelt. Es wird nicht als C direkt gebaut, es wird als assembler gebaut

Einfach kompilieren und wieder disassemblieren.

Woher ich das weiß:Berufserfahrung