-
03 - x86 Assembly해킹/리버싱 이론 2024. 10. 6. 22:12
명령어
데이터 이동(Data Transfer) mov mov dst, src src에 들어있는 값을 dst에 대입 lea lea dst, src src의 유효 주소(Effective Address, EA)를 dst에 저장 산술 연산(Arithmetic) inc inc op op의 값을 1 증가시킴 dec dec op op의 값을 1 감소 시킴 add add dst, src dst에 src의 값을 더함 sub sub dst, src dst에서 src의 값을 뺌 논리 연산(Logical) and and dst, src dst와 src의 비트가 모두 1이면 1, 아니면 0 or or dst, src dst와 src의 비트 중 하나라도 1이면 1, 아니면 0 xor xor dst, src
dst와 src의 비트가 서로 다르면 1, 같으면 0not not op op의 비트 전부 반전 비교(Comparison) cmp cmp op1, op2 op1-op2의 결과를 플래그에 설정 test test op1, op2 op1과 op2에 AND 비트연산 취한 후 플래그를 설정함 분기(Branch) jmp jmp addr addr로 rip 이동 je je addr 직전에 비교한 두 피연산자가 같으면 addr로 점프 (jump if equal) jg jg addr 직전에 비교한 두 피연산자 중 전자가 더 크면 addr로 점프 (jump if greater) 스택(Stack) push push val val을 스택 최상단에 쌓음 pop pop reg 스택 최상단의 값을 꺼내서 reg에 대입
프로시져(Procedure)프로시저를 부르는 행위를 호출(Call)이라고 부르며, 프로시저에서 돌아오는 것을 반환(Return)이라고 부릅니다. 프로시저를 호출할 때는 프로시저를 실행하고 나서 원래의 실행 흐름으로 돌아와야 하므로, call 다음의 명령어 주소(Return Address, 반환 주소)를 스택에 저장하고 프로시저로 rip를 이동시킵니다. call call addr addr에 위치한 프로시져 호출
push return_address
jmp addrret ret return address로 반환
pop ripleave leave 스택프레임 정리
mov rsp, rbp
pop rbp시스템 콜(System call) syscall 프로시져 관련 추가 설명
rsp : (Stack Pointer, 스택 포인터)
- rsp는 스택의 최상단을 가리킵니다. 즉, 현재 스택에서 가장 최근에 추가된 데이터(또는 값)의 위치를 가리키는 포인터입니다.
- 스택은 아래 방향으로 자라기 때문에, 스택에 값을 푸시(push)할 때 rsp는 감소하고, 값을 팝(pop)할 때 rsp는 증가합니다.
rbp : (Base Pointer, 베이스 포인터)
- rbp는 현재 함수(스택 프레임)의 기준점을 가리킵니다. 일반적으로 함수가 호출될 때, 스택 프레임을 만들고, 이 프레임의 기준으로 변수 및 반환 주소 등을 관리합니다.
피연산자
- 상수
- 레지스터
- 메모리
- []로 둘러싸인 것으로 표현 됨.
- 크기 지정자 TYPE PTR이 추가 될 수 있음
- BYTE, WORD, DWORD, QWORD (1바이트, 2바이트, 4바이트, 8바이트)
'해킹 > 리버싱 이론' 카테고리의 다른 글
IDA 사용법 및 문법 (0) 2024.10.07 02 - 컴퓨터 구조 / Window memory layout (2) 2024.10.06 01 - 리버싱 (2) 2024.10.06