이 프로그램을 수정하고 objdump 및 16 진수 편집기를 사용하여 "동일하지 않습니다"라고 표시하려고합니다. 왜 hexa 편집기를 사용하여 asm 명령을 변경하기 위해 증분 만 필요합니까?
#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);
}
내가 -D를 objdump를 사용하고 JNE 명령의 선을 발견 마십시오. 첫 번째 질문은 JNE 교육인지, JE가 아닌지를 아는 것입니다. 그러나 JNE는 "점등하지 않음"을 의미하기 때문에 반환 값이 0이면 결과 값을 반환합니다.
내 두 번째 질문은 제목을 변경하는 이유는 무엇입니까? (아래 링크에서와 같이)
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
How does one change an instruction with a hex editor?
나는 헥사 편집기에서 76 (75)을 교체하고 일했다. 그러나 이유를 이해하지 못했습니다. JNE이 어떻게 사용되고 있는지 이유/(그건 그렇고, 무엇을 0 ℃에 대응?)감사
_ "왜 JNE 교육입니까? JE가 아닌 이유는 무엇입니까?"_ 확실하게 대답 할 수 있도록 어셈블리 코드를 충분히 표시하지 못했습니다. 그러나'return_value'! = 0 일 때'JNE'가'else' 절로 점프하고있을 확률이 높습니다. _ "0c는 무엇에 해당합니까?"_ 목표 주소이고 _a는 현재 값을 기준으로 한 부호있는 오프셋 EIP 레지스터에있는 명령어 포인터의 _. – Michael
Hello Michael, 전체 ASM 코드 추가) :) JMP 명령어가 else 상태로 점프하고 있다고 생각하지 않습니까? –
아니요,'jmp'가'return (1);'부분으로 점프하고 있습니다. – Michael