어셈블리어와 x86-64
/명령어 집합구조 (ISA)
-cpu에 사용되는 - : ARM, MIPS, x86-64등 다양
>그 중 점유율 가장 높은것: x86-64
>>종류마다 어셈블리어 다름
/기본구조
: 명령어(Operation code) + 피연산자(Operand)
-예) mov eax, 3
/핵심 명령어
-데이터 이동: mov , lea
-산술 연산: inc, dec, add, sub
-논리 연산: and, or, xor, not
-비교: cmp, test
-분기: jmp, je, jg
-스택: push, pop
-프로시져: call, ret, leave
-System Call: syscall
/피연산자
-상수
-레지스터
-메모리 --[]로 둘러싸여 표현
--앞에 크기지정자 TYPE PTR
--더 앞에 타입 BYTE/WORD/DWORD/QWORD
-예) QWORD PTR [0x8048000]
- 데이터 이동 연산자
- mov dst, src: src의 값을 dst에 대입
- lea dst, src: src의 유효 주소를 dst에 대입
- 산술 연산
- add dst, src: src의 값을 dst에 더함
- sub dst, src: src의 값을 dst에서 뺌
- inc op: op의 값을 1 더함
- dec op: op의 값을 1 뺌
- 논리 연산
- and dst, src: dst와 src가 모두 1이면 1, 아니면 0
- or dst, src: dst와 src중 한 쪽이라도 1이면 1, 아니면 0
- xor dst, src: dst와 src가 다르면 1, 같으면 0
- not op: op의 비트를 모두 반전
- 비교
- cmp op1, op2: op1에서 op2를 빼고 플래그를 설정
- test op1, op2: op1과 op2에 AND 연산을 하고, 플래그를 설정
- 분기
- jmp addr: addr로 rip 이동
- je addr: 직전 비교에서 두 피연산자의 값이 같을 경우 addr로 rip 이동
- jg addr: 직전 비교에서 두 피연산자 중 전자의 값이 더 클 경우 addr로 rip 이동
'보안 > 리버싱' 카테고리의 다른 글
[리버싱] IDA 기초 (0) | 2024.02.25 |
---|---|
[리버싱] x64 어셈블리어 기초 02 (0) | 2024.02.25 |
[어셈블리어] Hello World 코드 해석 (0) | 2024.02.12 |
[리버싱] 스택 프레임 (0) | 2024.02.04 |
[리버싱] 레지스터 (0) | 2024.02.04 |