2014년 6월 22일 일요일

어셈블리어 구성






인텔 방식의 특징으론 %, $이 없으며, 동작 방식은 제 2 오퍼랜드에서 제1 오퍼랜드로 동작한다.

OPCODE       |         제 1 오퍼런드       |      제 2 오퍼런드     |


어셈블리 명령어로는

MOV : 데이터 이동시에 사용된다.
LEA : 주소값을 옮길 때 사용된다.
ADD : 레지스터나 메모리의 값을 덧셈할때 사용
SUB : 레지스터나 메모리의 값을 뺄 때 사용
INC  : 값을 1 증가시킨다.
DEC : 값을 1 감소시킨다.
CMP : 레지스터와 레지스터 값을 비교한다.
JMP : 특정한 곳으로 분기한다.
CALL : 프로시저를 호출
RET : 호출했던 바로 다음 지점으로 이동한다.
PUSH : 값을 스택에 저장한다.
POP : 값을 스택에서 삭제한다.


데이터 이동: MOV, LEA

논리, 연산 : ADD, SUB, INC, DEC

ex) add eax, ebx; sub eax, ebx, inc eax, dec eax

흐름제어: CMP, JMP
프로시저 : CALL, RET
스택조작: PUSH, POP

exe 빌드 과정






                                                            Static Link library
               compile                                   Import libarary      -------------
Code -------------------->Source.obj --------------------------- | a [pe헤더]   |        
                                                                                       |  b [obj코드] |
                                                                                       |  c [ Footer] |
                                                                                       --------------

코드를 짜고 exe로 만들어지는 과정이다.
코드가 obj화 된 후 첫번째로 PE헤더가 만들어 지게 된다.
PE헤더에는 Winnt.h란 헤더파일에 선언 되어 있다.


a. PE헤더
b. 실제 코드
c. 빈공간



첨부: PE 포멧 레이아웃