티스토리 뷰

이 블로그는 단지 제 개인 공부를 정리해둔 것입니다.

제가 올린 내용 중 잘못된 부분이 있으면 지적해주시면 감사하겠습니다.

꾸벅



기본적인 어셈블리어 공부


어셈블리는 한 번에 한가지 동작 밖에 못 한다.
어셈블리의 명령 포맷은 명령어 + 인자 로 구성이 되는데, 명령어를 다른 말로 하면 옵코드(Opcode)라 하며 인자는 오퍼랜드(Operand)라 한다.
만약 인자가 즉 오퍼랜드가 두개가 나오면 먼저 나온 오퍼랜드가 목적지, 나중에 나오는 오퍼랜드가 출발지가 된다.

즉 mov    eax, ebx    면 ebx(출발지)를 eax(목적지)로 옮기라는 의미가 된다.



어셈블리어의 기본 명령어


push, pop : 스택에 값을 넣는 것이 push,  그리고 스택에 있는 값을 가져오는 것이 pop
mov : 단지 값을 넣는 역할
lea : 주소를 가지고 오라는 명령어. 예를 들면 lea eax, dword ptr ss:[esp+8] -> [ ]안에 있는 스택에 eax에 스택의 주소를 가지고 옴 
add : 값을 더하라는 명령어
sub : 빼라는 명령어
int :  인터럽트를 일으키는 명령어. 리버스 엔지니어링을 하다 보면 가장 많이 만나는 것은 int3명령어로 옵코드가 0xCC인 DebugBreak() 정도.
call : 함수를 호출하는 명령어. call뒤에는 오퍼랜드로 번지가 붙음. 해당 번지를 호출하고 작업이 끝나면 call 다음 번지로 되돌아 옴.
inc, dec : inc은 i++;이고, dex는 i--;이라 생각하면 됨.
and, or, xor : 기본적인 수학 연산자.
nop : 아무것도 하지 말아라!!!
cmp, jmp : 비교해서 점프하는 명령어

  


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

abex’ crackme #1  (0) 2015.12.26
OllyDbg를 이용한 스택 공부하기  (0) 2015.12.23
PACKING  (0) 2015.12.21
함수의 호출 규약  (0) 2015.12.21
레지스터, 단지 변수이다.  (0) 2015.08.05
댓글