본문 바로가기
보안/리버싱

[리버싱] x64 어셈블리어 기초 01

by Nobb 2024. 2. 25.

어셈블리어와 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]

 

 

 

  1. 데이터 이동 연산자
    • mov dst, src: src의 값을 dst에 대입
    • lea dst, src: src의 유효 주소를 dst에 대입
  2. 산술 연산
    • add dst, src: src의 값을 dst에 더함
    • sub dst, src: src의 값을 dst에서 뺌
    • inc op: op의 값을 1 더함
    • dec op: op의 값을 1 뺌
  3. 논리 연산
    • 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의 비트를 모두 반전
  4. 비교
    • cmp op1, op2: op1에서 op2를 빼고 플래그를 설정
    • test op1, op2: op1과 op2에 AND 연산을 하고, 플래그를 설정
  5. 분기
    • 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