Ich denke, das ist eigentlich ein ziemlich einfaches Problem. Ich muss diesen Assembler-Code zu c-Code zurückentwickeln. Ich gebe auch, was ich denke, so dass Sie hoffentlich zeigen können, wo ich falsch gelaufen bin und ich kann jetzt aus meinen Fehlern lernen.Reverse-Ingenieur-Assembly-Code zu c-Code
.LFBO
pushq %rbp
movq %rsp,%rbp
movl %edi,-4(%rbp)
movl %esi,-8(%rbp)
movl -4(%rbp),%eax
compl -8(%rbp),%eax
jg .L2
movl -8(%rbp),%eax
jmp .L3
.L2:
movl -4(%rbp),%eax
.L3:
popq %rbp
ret
So ist es das, was ich denke, ist mit diesem los: die ersten beiden Zeilen nach .LFBO:
pushq %rbp
movq %rsp,%rbp
einrichten nur den Stapel für die Ausführung, der folgen ist, über.
movl %edi,-4(%rbp)
wird die erste Variable erregenden, rufen sie x
movl %esi,-8(%rbp)
wird die zweite variable erregenden nennen y
movl -4(%rbp),%eax
x ist, greifen in der nächsten Zeile verglichen werden
compl -8(%rbp),%eax
vergleichen es die Variablen x und y durch xy Rechen
jg .L2
sagen Sprung zu .L2 wenn x> y
wenn x = y < dann die nächsten Zeilen berechnen, ohne zu springen .L2
movl -8(%rbp),%eax
Kopie x = y
jmp .L3
Sprung zu .L3
wenn x> y an der jg Linie dann Sie .L2 springen: und füllen Sie diese Zeile
movl -4(%rbp),%eax
das ist, wo ich merkte, daß ich wirklich verwirrt. Es scheint mir, dass Sie x sind das Kopieren x dann .L3 abgeschlossen ist und ich denke, x
zurückgegeben
nur um zu bestätigen, das ist der AT & T-Syntax x86 Montage? – Dai
Ich glaube nicht, dass du verwirrt warst. Sie betrachten nur nicht optimierten Code, also gibt es Zeilen, die völlig nutzlos sind (wie das Zuweisen von x zu x, wie Sie sagten). Also, was denkst du, was die Funktion macht, angesichts all dessen? – JS1
Ja, ich glaube das ist AT & T-Syntax x86 Assembly. Es wurde von c-Code auf einem Linux erstellt @ Dai – scottybobby