리버싱을 하다보면 코드상에 점프문이 많이 있는데 머리가 나쁜지.. 맨날 보는 점프문인데도 항상.. 까먹어서 정리를 했습니다.
리버싱 할때 이 점프문을 옆에 메모장으로 띄워놓고 한다는.........ㅠ_ㅠ.....
점프 문이고 플래그 값이 뭘 때 점프를 한다는 것까지 정리를 해봤습니다.
Left, Right로 조건 쓴것은.. 알기 쉽게..!
Windows
JZ ZF = 1
JNZ ZF = 0
JC CF = 1
JNC CF = 0
JO OF = 1
JNO OF = 0
JS SF = 1
JNS SF = 0
JP PF = 1
JNP PF = 0
JE Left = Right ZF = 1
JNE Left ≠Right ZF = 0
JCXZ CX = 0
JECXZ ECX = 0
JA(JNBE) Left > Right CF = 0 and ZF = 0
JAE(JNB) Left ≥Right CF = 0
JB(JNAE) Left < Right CF = 1
JBE(JNA) Left ≤Right CF = 1 or ZF = 1
JG(JNLE) Left > Right ZF = 0 and SF = 0
JGE(JNL) Left ≥Right SF = 0
JL(JNGE) Left < Right SF = 1
JLE(JNG) Left ≤Right ZF = 1 or SF = 1
Linux
리눅스 같은 경우는 gdb로 바이너리 파일을 열 경우 AT&T문법으로 나오기 때문에
윈도우 : mov eax , ebx
리눅스 : mov %ebx , %eax
위와 같이 나온다. 그렇기 때문에 점프문이 나왔을 때는 윈도우와 반대로 생각해서 보면 된다.
AT&T 문법을 자세히 알고 싶으신 분은 아래 링크로 ^^
즉, 윈도우에서 jle가 나올 경우 Left ≤ Right 인데 리눅스에서 jle가 나왔을 땐 Left ≥ Right 이라고 생각하면 된다.
이해를 돕기위해 리눅스에서 파일 하나 만들어서 C코드와 어셈코드로 보여주겠다.
직접 C코드와 어셈코드를 비교해보면서 보면 이해가 될 것이다.
귀찮다면.. 리눅스 상에서도 intel명령어로 보면된다. set disassembly intel... ^^
'My Study > Reversing' 카테고리의 다른 글
Vmware를 사용한 커널 디버깅 (2) | 2010.03.11 |
---|---|
Segment Register (0) | 2010.03.10 |
네이트온 안티디버깅 우회 (0) | 2010.02.20 |
OllyDbg 심볼 파일 (0) | 2010.02.19 |
IDA 원격디버깅 ( 리눅스 파일 IDA에서 라이브 디버깅 해보자 ) (0) | 2010.02.09 |