erhöhen Ich versuche, dieses Programm zu ändern und anzuzeigen "es ist nicht das gleiche" nur mit objdump und einem hexadezimalen Editor.Warum muss ich nur zum Ändern eine ASM-Anweisung mit Hexa-Editor
#include <string.h>
#include <stdio.h>
int main(int argc, char *argv[])
{
int return_value;
return_value = strcmp("test", "test");
if (return_value == 0)
printf("it's the same\n")
else
printf("it's not the same\n");
return (1);
}
Habe ich objdump -D verwendet und die Zeile der JNE-Anweisung gefunden. Meine erste Frage ist zu wissen, ist es eine JNE-Anweisung und warum nicht eine JE? Weil JNE "Sprung nicht gleich" bedeutet, schrieb ich in meinem Zustand, wenn der Rückgabewert gleich 0 ist.
Meine zweite Frage ist im Titel, warum muss ich für die Änderung eine Anweisung erhöhen? (Wie in der folgenden Verbindung)
How does one change an instruction with a hex editor?
400526: 55 push %rbp
400527: 48 89 e5 mov %rsp,%rbp
40052a: 48 83 ec 20 sub $0x20,%rsp
40052e: 89 7d ec mov %edi,-0x14(%rbp)
400531: 48 89 75 e0 mov %rsi,-0x20(%rbp)
400535: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%rbp)
40053c: 83 7d fc 00 cmpl $0x0,-0x4(%rbp)
400540: 75 0c jne 40054e <main+0x28>
400542: bf e4 05 40 00 mov $0x4005e4,%edi
400547: e8 b4 fe ff ff callq 400400 <[email protected]>
40054c: eb 0a jmp 400558 <main+0x32>
40054e: bf f1 05 40 00 mov $0x4005f1,%edi
400553: e8 a8 fe ff ff callq 400400 <[email protected]>
400558: b8 01 00 00 00 mov $0x1,%eax
40055d: c9 leaveq
40055e: c3 retq
40055f: 90 nop
I ersetzen 75 von 76 in dem hexa-Editor und es funktionierte. Aber ich habe nicht verstanden warum. (Und übrigens, was 0c entsprechend?)
Dank
_ "[Warum] ist es eine JNE-Anweisung und warum nicht eine JE?" _ Sie haben uns nicht genug vom Assembler-Code gezeigt, um das definitiv beantworten zu können. Aber es ist sehr wahrscheinlich, dass diese 'JNE' in die 'else'-Klausel springt, wenn' return_value!' = 0. _ "what 0c entspricht?" _ Es ist die Zieladresse, ausgedrückt als _a signed offset relativ zum aktuellen Wert des Befehlszeigers im EIP-Register_. – Michael
Hallo Michael, ich füge den gesamten ASM-Code hinzu :)) Denkst du nicht, dass der JMP-Befehl eher in den else Zustand springt? –
Nein, die 'jmp' springt zum' return (1); 'part. – Michael