어셈블리어 기본 문법
MOV : A의 값을 B의 값으로 옮긴다 MOV EAX, 100 은 EAX에 100이라는 값을 넣는 것 단, 구체적인 연산은 포함x
LEA : A의 값을 B의 값으로 연산을 포함하여 복사한다 LEA EAX, [EAX + 1000]은 EAX에 1000을 넣은 갑ㅅ을 다시 EAX에 삽입 이처럼 연산을 포함o
JMP : 특정한 위치로 건너 뛰어 코드를 실행 JMP A라고 하면 A의 위치로 뛰어서 코드가 실행된다. 비슷하게 조건 점프 명령도 존재 JA, JB, JE 등의 명령어는 두 인자를 받아서 비교한 뒤에 결과에 따라 다른 방향으로 점프할 수 있음
CALL : 함수를 호출했다가 다시 원래 위치로 돌아올 때 사용 JMP와 다른 점은 실행한 뒤에 끝나게 되면 RET에 저장하고 다시 원래 상태로 돌아온다는 점
NOP : 아무 작업도 하지 않는 명령어 1Byte의 빈 공간을 차지 보안쪽에 사용
RET : 현재 함수가 끝난 뒤에 돌아갈 주소를 지정하기 위해 사용
PUSH : 스택에 해당 값을 넣음
POP : 스택에 있는 값을 빼냄
LEAVE : 현재까지의 메모리 스택을 비우고 EBP를 자신을 호출한 메모리 주소로 채움 실행 중인 함수를 종료하기 위해 정리하는 작업에 사용
RAX(64bit)를 반으로 쪼개면 EAX(32bit)
레지스터는 시스템의 성능이 좋아짐에 따라서 2배씩 뛰기 때문에 하위 시스템과 높은 호환성을 가짐 즉 64비트 운영체제의 컴퓨터는 64비트 프로그램 및 32비트 프로그램을 모두 실행할 수 있다 반면에 32비트 운영체제 컴퓨터는 32비트 이하 프로그램만 사용할 수 있으며 64비트 프로그램을 실행할 수 없다