본문 바로가기

프로그래밍

Reverse Engineering의 기초 어셈블리어

Reverse Engineering의 기초 어셈블리어

*명령문

Push: 스택에 데이터를 저장하는데 쓰인다.
Pop: 스택에서 데이터를 꺼내는데 쓰인다.

Mov: 메모리나 레지스터의 값을 옮길떄[로 만들떄] 쓰인다.
Lea: 오퍼렌드1의 값을 오퍼렌드2의 값으로 만들어준다.

Inc: 레지스터의 값을 1증가 시킨다.
Dec: 레지스터의 값을 1 감소 시킨다.

Add: 레지스터나 메모리의 값을 덧셈할떄 쓰임.
Sub: 레지스터나 메모리의 값을 뻇셈할떄 쓰임.

Nop: 아무동작도 하지 않는다.

Call: 프로시저를 호출할떄 쓰인다.
ex:) Call 401F47 :메모리 오프셋 401F47을 콜한다.
ex:) Call dword ptr[401F47] :401F47안에 있는 주소로 점프 한다.

Ret: 콜한 지점으로 돌아간다.

Cmp: 레지스터와 레지스터혹은 레지스터 값을 비교하기 위하여 쓰인다.
Jmp: 특정한 메모리 오프셋으로 이동할떄 쓰인다.

조건부 점프: Cmp나 Test 같은 명령어의 결과에 따라 점프한다.

Je: Cmp나 Test 의 결과가 같다면 점프
Jne: Cmp나 Text 의 결과가 같지 않다면 점프
Jz: 왼쪽 인자의 값이 0 이라면 점프
Jnz: 왼쪽 인자의 값이 0 이 아니라면 점프
Jl: 왼쪽 인자의 값이 오른쪽 인자의 값보다 작으면 점프 (부호있는)
Jnl: 왼쪽 인자의 값이 오른쪽 인자의 값보다 작지 않으면 (크거나 같으면) 점프 (부호있는)
Jb: 왼쪽 인자의 값이 오른쪽 인자의 값보다 작으면 점프 (부호없는)
Jnb: 왼쪽 인자의 값이 오른쪽 인자의 값보다 작지 않으면 (크거나 같으면) 점프 (부호없는)
Jg: 왼쪽 인자의 값이 오른쪽 인자의 값보다 크면 점프
Jng: 왼쪽 인자의 값이 오른쪽 인자의 값보다 크지 않으면 (작거나 같으면) 점프
Jle: 왼쪽 인자의 값이 오른쪽 인자의 값보다 작거나 같으면 점프 (부호있는)
Jge: 왼쪽 인자의 값이 오른쪽 인자의 값보다 크거나 같으면 점프

*논리 연산


* 레지스터