역어셈블러: 두 판 사이의 차이
내용 삭제됨 내용 추가됨
편집 요약 없음 |
Montouesto (토론 | 기여) 편집 요약 없음 |
||
1번째 줄:
'''역어셈블러''' 또는 '''디스어셈블러'''({{lang|en|disassembler}})는 [[기계어]]를 [[어셈블리어]]로 변환하는 [[컴퓨터 프로그램]]이다. 역어셈블러는 어셈블리어가 아닌 [[고급 프로그래밍 언어]]를 대상으로 하는 [[역컴파일러]]와는 구분한다. 역어셈블러의 출력물인 디스어셈블리(disassembly)는 어셈블러로의 입력에 맞추는 것보다 사람이 읽기 쉽도록 형식을 정하는 경우가 있는데
어셈블리어 소스 코드는 보통 [[상수 (컴퓨터 프로그래밍)|상수]]와 프로그래머의 주석을 허용한다. 이것들은 [[기계어]]로 변환되는 과정에서 어셈블러에 의해 제거된다. 그렇기 때문에 역어셈블리는 원본 소스 코드보다는 사람이 해석하기 어려워 진다. 몇몇 역어셈블러들은 [[ELF 파일 형식]]의 오브젝트 파일에 존재하는 [[기호 디버깅]](Symbolic Debugging) 정보를 사용한다. [[IDA Pro]]는 사용자에게 값이나 코드의 영역을 위한 연상 기호를 사용할 수 있게 함으로써 사용자의 이해를 역어셈블 과정에 적용할 수 있게 한다.
6번째 줄:
== 역어셈블리의 문제점들 ==
어셈블되었을 때 정확히 같은 바이너리 코드를 생성하는 역어셈블러를 만드는 것은 가능하지만 여기에는 보통 차이점이 있다. 이것은 어셈블러의 표현도에 대한 요구를 제기한다. 예를 들면, x86 어셈블러는 "MOV AX,BX"같은 간단한 바이너리를 임의적으로 선택한다. 만약 원본 코드가 다른 선택을 사용한다면 원본 코드는 당연히 다시 만들어질 수 없다. 하지만
== 역어셈블러의 예 ==
역어셈블러는 독자적이거나 상호적일 수 있다. 독자적인 역어셈블러는 실행되었을 때
대부분의 상호적인 [[디버거]]는 디버깅되는 프로그램의 기본적인 역어셈블리를 포함한다. 종종 같은 역어셈블리 툴이 디버거와 함께 독자적인 역어셈블러로 배포되는 경우도 있다. 예를 들면 [[objdump]] ([[GNU 바이너리 유틸리티]]의 한 부분인)는 [[GNU 디버거]]와 관련된 것이다.
|