disassemble

0) disassemble의 종류 GAS / NASM

jinkwon.kim 2017. 3. 11. 16:25
728x90
반응형

[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


728x90
반응형

'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