반응형
# MASM
- 마이크로 소프트의 초기 제품
- 마이크로 소프트 비주얼 스튜디오에 포함되어 있다.
- 매크로 어셈블러를 의미함
- 기능 확장의 목적으로 템플릿, 주기적 매크로, 조건적 어셈블리 같은 유형의 반복 명령 실행을 포함
- OOP(객체지향 프로그래밍) 패러다임을 기본적으로 적용
- 스티브 허치 허치슨의 배포 세트 : 허치 패키지 사용이 편함.
- 16/32비트 마이크로소프트 OMF와 32/64비트 COFF 두가지 형식 지원
- 다룰 수 있는 범주가 큼 : 리얼 모드와 보호 모드에사 동작하는 MS-DOS용 16/32비트 프로그램, 윈도우 3.x용 드라이버, 윈도우 9x/NT용 32비트 애플리케이션과 드라이버, 윈도우 NT 64비트용 64비트 애플리케이션과 드라이버 해석할 수 있다.
- 현재 Windows 10은 ML64.exe를 사용한다고 볼 수 있다.
- 참고 : 위키백과 - https://ko.wikipedia.org/wiki/%EC%9C%88%EB%8F%84%EC%9A%B0_NT
- 코드뷰 형식으로 디버그 정보를 생성
- 이를 마이크로소프트 링커는 PDB(Program database) 형식으로 변환
- 개발자가 디버그 정보 해석 가능
- 참고 : https://msdn.microsoft.com/ko-kr/library/kwx19e36.aspx
- 기타 디스어셈블러에서 디버깅 가능하다는 뜻
- 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 |
---|