whois

필수 어셈블리 명령어 본문

Hacking/Reverse Engineering

필수 어셈블리 명령어

HongJun Choi 2018. 1. 4. 00:40

· PUSH, POP

"스택에 값을 넣는 것을 PUSH, 스택에 있는 값을 가져오는 것이 POP이다."

PUSHAD, POPAD는 모든 레지스터를 PUSH하고 POP하라는 명령어이다.

오퍼랜드는 1개만 있으면 된다.


· MOV

"값을 이동시키는 역할을 하며, 리눅스에서 cp 명령어와 같다고 볼 수 있다."


· LEA

"MOV와 혼동할 수 있는 명령어로, MOV는 값을 가져오지만 LEA는 주소를 가져온다."


ex) 레지스터와 메모리에 다음과 같은 값이 들어 있다고 가정한다.

esi : 0x401000

*esi : 12345678


lea eax, dword ptr ds:[esi]

: esi가 번지수가 0x401000이니 eax에 0x401000이 들어간다.


mov eax, dword ptr ps:[esi]

: 0x401000 번지에 들어 있는 12345678의 값이 eax에 들어간다.


· ADD

"출발지(src)에서 도착지(dest)로 값을 더하는 명령어다."


· SUB

"출발지(src)에서 도착지(dest)로 값을 빼는 명령어다."


· INT

"인터럽트를 일으키는 명령어다."

MS-DOS 시절에는 즉시 인터럽트가 가능했지만, 32비트로 오면서 애플리케이션 레벨에서는 한계가 있다고 한다.

자주 만나는 INT 3 명령어는 DebugBreak()를 의미한다.


· CALL

"함수를 호출하는 명령어다."


· INC, DEC

"값을 증감시켜주는 명령어다."


· AND, OR, XOR

"dest와 src를 연산하는 명령어다."

비트 연산과 동일하다.


· NOP

"아무것도 하지 않는 명령어다."

해킹이나 리버스 엔지니어링에서 가장 많이 쓰이는 명령어 중 하나이다.


· CMP, JMP

"비교해서 결과 값에 따라 점프하는 명령어이다."

'Hacking > Reverse Engineering' 카테고리의 다른 글

함수 호출  (0) 2018.01.04
스택(Stack)  (0) 2018.01.04
레지스터  (0) 2018.01.03
어셈블리  (0) 2018.01.03
리버스 엔지니어링 개요  (0) 2017.12.27
Comments