我试图修改此程序并显示"它不相同"只使用objdump和十六进制编辑器。
#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);
}
我是否使用了objdump -D并找到了JNE指令的行。 我的第一个问题是知道这是一个JNE指令,为什么不是JE?因为JNE意味着&#34;跳跃不等于&#34;但是如果返回值IS等于0,我会在我的条件下写。
我的第二个问题是在标题中,为什么我需要增加更改指令? (如下面的链接)
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 <puts@plt>
40054c: eb 0a jmp 400558 <main+0x32>
40054e: bf f1 05 40 00 mov $0x4005f1,%edi
400553: e8 a8 fe ff ff callq 400400 <puts@plt>
400558: b8 01 00 00 00 mov $0x1,%eax
40055d: c9 leaveq
40055e: c3 retq
40055f: 90 nop
我在hexa编辑器中将75替换为76并且它有效。但是不明白为什么。 (顺便说一下,0c对应的是什么?)
由于
答案 0 :(得分:1)
至于问题的增量部分:恰好,原始和更改指令的二进制编码(a.k.a。机器语言)相差1。