[Assemble] GAS vs NASM
1. 정의
- GAS(GNU Assembler)
- NASM(Netwide Assembler)
2. 사용처
- 대표적 사용 : Linux(GAS) ,Window(NASM)
- GAS : GNU 프로젝트에서 사용됨
- NASM : 인텔 x86아키텍쳐용 어셈블러/디스어셈블러에서 사용됨
3. 사용 문법
- GAS : AT&T 문법 사용
- NASM : 인텔 어셈블리 문법의 변형된 형태를 사용
4. Operand 비교
1) src와 dest의 순서
- GAS : movl $4, %eax ( mov src dst)
- NASM: mov eax, 4 ( mov dst src)
2) immdediate operator의 형식
- GAS : pushl $4
- NASM: push 4
3) GAS 구문에서 레지스터 피연산자는 %로 시작. 반면 NASM은 $를 안붙임
4) GAS 구문에서 메모리 피연산자 크기는 opcode의 마지막 글자로 구분
- GAS
=> b(8비트), w(16비트), l(32비트)
- NASM
=> byte ptr, word ptr, dword ptr과 같이 피연산자 접두어로 결정
- Ex)
GAS : movb foo, %al
NASM : mov al, byte ptr foo
5) long jump나 call과 같은 직접 형식은
- GAS
=> lcall/ljmp $section, $offset
- NASM
=> call/jmp far section:offset
6) far return 명령은
- GAS: lret $stack-adjust
- NASM: ret far stack-adjust
'disassemble' 카테고리의 다른 글
4) gdb TUI에 대해서 (0) | 2017.03.18 |
---|---|
3) hello world disassemble (0) | 2017.03.18 |
2) gdb 출력 형식 지정 (0) | 2017.03.18 |
1) stack frame에대한 정리 (0) | 2017.03.11 |