whois
필수 어셈블리 명령어 본문
· 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 |