본문 바로가기

Programming

Programming/어셈블리어 종류 정리

반응형
# MASM
- 마이크로 소프트의 초기 제품
  • 마이크로 소프트 비주얼 스튜디오에 포함되어 있다.
  • 매크로 어셈블러를 의미함
    • 기능 확장의 목적으로 템플릿, 주기적 매크로, 조건적 어셈블리 같은 유형의 반복 명령 실행을 포함
  • OOP(객체지향 프로그래밍) 패러다임을 기본적으로 적용
  • 스티브 허치 허치슨의 배포 세트 : 허치 패키지 사용이 편함.
  • 16/32비트 마이크로소프트 OMF와 32/64비트 COFF 두가지 형식 지원
- 코드뷰 형식으로 디버그 정보를 생성
  • 이를 마이크로소프트 링커는 PDB(Program database) 형식으로 변환
  • 기타 디스어셈블러에서 디버깅 가능하다는 뜻
    • IDA나 소프트아이스 등등
- 단점
  • 라이브러리 안에 버그가 많다. 
    • 자체 취약점이 많다는 소리
      • 예로 ustr2dw와 같은 함수에서 5바이트 이상의 문자열을 전달하면 프로그램이 죽음. - 참고 : 해킹의 꽃 디스어셈블링
  • 프로세서 주소 처리 모드의 지원 부족
    • 16비트와 32비트 동시 처리를 못한다. -> 수작업

# TASM
- 볼랜드 사에서 개발
  • 6.x 버전 까지 MASM과 호환
  • 커스텀 아이디얼 모드 지원
  • T는 turbo를 의미
  • 마이크로소프트의 SDK, DDK를 지원하지 못함
  • 추후 하드웨어의 최신 명령어들을 지원하지 못해 망해갔다.
    • 예로 펜티엄 II 명령을 지원하지 못함 : sysenter 등
  • 인코딩도 지원 못함
    • 유니코드 지원안됨.

# FASM (flat assembler) 
- 위키를 찾아봤는데 현재까지(2018-04-09)도 개발중에 있다. 대부분의 주요 운영체제를 지원하며 라이선스로 BSD + 카피레프트를 적용한다.
  • 최신버전은 1.72 / last update: 26 Dec 2017 10:12:48 UTC
  • 웹사이트 : http://flatassembler.net/
    • 불완전 버전으로 1.73.02까지 나와있다.
- 최초로 1999년 3월 23일에 만들어졌고 (위키는 2000년 3월), 개발자는 Tomasz Gryszfar로 당시 자신의 프로젝트에 쓰일 적합한 어셈블러를 찾지못하고 직접 만들었다고 한다.
  • 유연한 출력 파일 통제
    • 다양한 목적파일과 실행파일 포팅이 가능하다는 의미다.
  • 구문을 단순화 시켰다.
- 오픈소스로 공개되어 있다.
  • MS-DOS, 윈도우 9x/NT, 리눅스, BSD로 포팅
  • AMD x86-64 : 멀티 명령 세트 체계도 지원
  • 파일 지원
    • COFF : 마이크로 소프트
    • BIN,MZ, PE, ELF 파일 지원
- 매크로 기능이 좋다.
  • FASM 예제 : 해킹의 꽃 디스어셈블링 참고.
  • 1
    2
    3
    4
    5
    6
    7
    8
    file 'interp.asm'
    repeat $
        load A byte from %-1
        if A>='a' & A<='Z'
            A = A - 'a' + 'A'
        end if
        store byte A at %-1
    end repeat

- 단점
  • 기존 ASM과는 다른게 단점이다.  FASM 구문은 위 예제를 보는것처럼 독특하다.
    • 독특해서 익숙하지 않다면 가독성이 떨어진다.
  • MASM고 호환성이 0%이다.
    • 윈도우 드라이버 개발시 호환성을 고려해보아야 한다는 것.
  • 주 개발 ASM과는 호환성이 없어서 그런지, 바이러스나, 데모, 해킹프로그램을 작성하는데 주로 쓰인다.
    • API함수를 호출하지 않고 작업할 수 있는 수학식 처리가 쉽다.(??장점)
      • 행렬곱
      • N차원 공간에서 곡선의 교차 축을 계산
  • 현재까지 개발되지만 그리스타가 포기하면 그만인 ASM.

# NASM (netwide assembler)
- 가장 대중적인 리눅스용 어셈블러 중 하나다.
  • 개발 당시 FASM이 존재하지 않았고, MASM과 TASM은 상용제품이였다.
  • 대체할 만한 GAS는 자학적인 친구들만 사용했다고 한다. (메조키스트)
  • 결국에 피터 앤빈씨가 꾸린 프로그래머 그룹에서 개발했다.
    • MASM과 호환성은 0%지만 매크로나, x86계열의 프로세서, x86모드의 IA64도 지원
- 파일 출력 범주가 크다
  • BIn, AOUT, AOUTB, COFF, ELF, AS86, OBJ, WIN32, RDF, IEEE
  • 디버깅 정보 생성 형식 다양
    • 볼랜드
    • STABS
    • DWARF2
- 단점
  • 버그를 만나도 프로그램이 죽진않는다. 단지 보기에 애매한 출력파일을 생성한다.
    • 괴상한 구문을 포함
  • 이러한 버그에 대해 커뮤니티는 인정하지 않는편
    • "알려진 버그가 아니니 인정하지 않는다."
  • 인코딩 지원 x
    • 유니코드 
  • AMD x86-64 지원 x
  • 코드뷰 디버그 출력 형식 지원 x
    • GDB로 프로그램을 디버깅하는 것처럼 코드를 볼 수 없다는 뜻
  • 윈도우에서 입지가 적다.

# YASM (Yes, it's an assembler, Your favorite assembler, Yet another assembler, Why an assembler?)
- NASM 개발이 중지 되었을 때 개발
  • AMD x86-64 지원
  • GAS 구문 도무 해석 가능
  • 이전 ASM의 수정된 버그들
  • COFF와 윈도우 32 OBJ 출력 파일 지원
  • 다국어 지원
  • 코드뷰 지원
- 단점

  • 셸코드를 작성할 때는 좋은데, 드라이버 개발에는 쓸모없다고함.

# 추가적인 어셈블러 비교

- 위키백과에 정리되어있는 자료 : https://goo.gl/jyuyaj

반응형

'Programming' 카테고리의 다른 글

Programming/SoftwareArchitecture/디자인 패턴 - 기본  (0) 2017.12.19