본문 바로가기

Revere Engineering/Assembler

먼 거리로 강제 점프~ 아래와 같이 조건부 점프가 이다고 가정 할때... 점프할 거리가 멀지 않고...일반적으로 점프를 할지 말지를 고민 하는데.. 한단계 더 나가서...지정된 주조가 아닌 먼 곳으로 강제 점프를 하고 싶은 경우가 있다.. 롱점프 하는 루틴을 셈플로 보면... 헥사 코드로 E9 로 시작 하고 뒤에 4바이트는 점프할 거리이다. 거리 계산은 jmp 아래 주소 부터 목적지 까지의 거리의 헥사 값이다. 계산식은 간단 하다.. 목표 지점 주소인 00459948 에서 jmp 다음 주소인 00459484 를 빼주면... 04C5 가 된다... 다시 원 코드로 돌아와서.... 목표 지점이 출발 지점 주소가 0045942E이고.. 목표 주소가 004599BF 이니.. 004599BF - 0045942E = 0591 이 된다.... 더보기
어셈블러 명령어 - 분기 특정한 플래그 값에 근거한 점프 JZ 제로플래그가 1이라면 분기 (0F84) JNZ 제로 플래그가 0이라면 분기 (0F85) JO 오버플로우 플래그가 1이면 분기 JNO 오버플로우 플래그가 0이면 분기 JS 사인 플래그가 1이면 분기 JNS 사인(SIGN) 플래그가 0이면 분기 JC 캐리 플래가가 1이면 분기 JNC 캐리 플래그가 0이면 분기 JP(JPE) 패리티 플래그가 1이면 분기 JNP(JPO) 패리티 플래그가 0이면 분기 등호에 근거한 점프 JE(JZ) EQUAL(=0) 이면 분기 JNE(JNZ) EQUAL 아니면(!=0) 분기 JCXZ CX레지스터가 0이면 분기 JECXZ ECX레지스터가 0이면 분기 부호가 없는 비교에 근거한 점프 JA(JNBE) 초과면 분기한다 JAE(JNB) 이상이면 분기 .. 더보기
Assembler 명령어 정리 명령어 정리 명 령 어 설 명 Data Transfer MOV Move 데이터 이동 (전송) PUSH Push 오퍼랜드의 내용을 스택에 쌓는다 POP Pop 스택으로부터 값을 뽑아낸다. XCHG Exchange Register/memory with Register 첫 번째 오퍼랜드와 두 번째 오퍼랜드 교환 IN Input from AL/AX to Fixed port 오퍼랜드로 지시된 포트로부터 AX에 데이터 입력 OUT Output from AL/AX to Fixed port 오퍼랜드가 지시한 포트로 AX의 데이터 출력 XLAT Translate byte to AL BX:AL이 지시한 데이블의 내용을 AL로 로드 LEA Load Effective Address to Register 메모리의 오프셋값을 레.. 더보기