디스어셈블러

Disassembler

디스어셈블러기계어어셈블리 언어로 변환하는 컴퓨터 프로그램입니다.이것은 어셈블러와 역연산입니다.디스어셈블러는 어셈블리 언어가 아닌 고급 언어를 대상으로 하는 디컴파일러와 다릅니다.디스어셈블러의 출력인 디스어셈블리는 어셈블러에 대한 입력에 적합하기보다는 사람이 읽을 수 있도록 포맷되어 있어 주로 리버스 엔지니어링 툴이 됩니다.

어셈블리 언어 소스 코드는 일반적으로 상수 및 프로그래머 코멘트의 사용을 허용합니다.이들은 보통 조립자에 의해 조립된 기계 코드에서 제거됩니다.이 경우 기계 코드로 동작하는 디스어셈블러는 이러한 상수와 코멘트가 결여된 디스어셈블리를 생성합니다.해당된 출력은 원래 주석이 달린 소스 코드보다 해석하기가 더 어려워집니다.일부 디어셈블러는 코드 코멘트 기능을 내장하고 있으며, 생성된 출력은 API 함수 또는 호출된 함수의 파라미터에 관한 코멘트로 풍부해집니다.일부 디스어셈블러는 ELF와 같은 객체 파일에 있는 심볼 디버깅 정보를 사용합니다.예를 들어, IDA는 인간 사용자가 인터랙티브 세션에서 코드의 값 또는 영역에 대한 니모닉 기호를 구성할 수 있도록 합니다. 분해 프로세스에 적용된 인간의 통찰력은 종종 코드 작성 과정에서 인간의 창의성과 유사합니다.

가변폭 명령어를 사용하는 CISC 플랫폼에서는 여러 개의 디스어셈블리가 유효할 수 있습니다.디스어셈블러는 실행 중에 다른 코드를 처리하지 않습니다.

분해 문제

조립 시 원래의 바이너리를 정확하게 생성하는 코드를 생성하는 디스어셈블러를 작성하는 것은 가능하지만 종종 차이가 있습니다.이 때문에 어셈블러의 표현성이 요구됩니다.예를 들어, x86 어셈블러는 다음과 같은 간단한 것을 위해 두 개의 바이너리 코드 중에서 임의로 선택합니다.MOV AX,BX원본 코드가 다른 선택을 사용하는 경우 원본 코드는 특정 시점에 복제할 수 없습니다.그러나 완전히 올바른 분해가 생성되어도 프로그램에서 수정이 필요한 경우에는 문제가 남아 있습니다.예를 들어 어셈블리 코드로 동일한 기계어 점프 명령을 생성하여 지정된 위치로 점프하거나(예를 들어 특정 코드를 실행하거나) 지정된 바이트 수를 점프하거나(예: 불필요한 브랜치를 건너뛰거나) 할 수 있습니다.디스어셈블러는 무엇을 의도하는지 알 수 없으며 두 구문을 사용하여 원래 바이너리를 재현하는 디스어셈블리를 생성할 수 있습니다.그러나 프로그래머가 점프 명령과 그 목적지 사이에 명령을 추가하고 싶다면, 점프가 절대적인지 상대적인지, 즉 목적지가 고정된 위치에 있어야 하는지 또는 원래 명령과 추가된 명령 모두를 건너뛰도록 이동되어야 하는지를 결정하기 위해 프로그램의 동작을 이해할 필요가 있다.

분해기 예제

분해자는 독립형 또는 대화형일 수 있습니다.스탠드아론 디스어셈블러는 실행 시 검사할 수 있는 어셈블리 언어 파일을 생성합니다.대화형 디스어셈블러는 사용자가 수행한 변경의 영향을 즉시 보여줍니다.예를 들어, 디스어셈블러는 처음에는 프로그램의 섹션이 실제로 코드임을 알지 못하고 데이터로 취급할 수 있습니다.사용자가 코드임을 지정하면 결과적인 디스어셈블리 코드가 즉시 표시되므로 사용자는 이를 검사하고 동일한 실행 중에 추가 작업을 수행할 수 있습니다.

인터랙티브 디버거에는 디버깅되는 프로그램의 디스어셈블리를 볼 수 있는 방법이 포함되어 있습니다.대부분의 경우 디버거와 함께 배포된 독립형 디어셈블러로 동일한 디스어셈블리 도구가 패키징됩니다.예를 들어, GNU Binutils의 일부인 objdump는 대화형 디버거 [1]gdb와 관련이 있습니다.

분해 장치 및 에뮬레이터

동적 디스어셈블러를 에뮬레이터 또는 하이퍼바이저 출력에 통합하여 실행된 기계 명령의 실시간 실행을 한 줄 한 줄 '추적'할 수 있습니다.이 경우 분해된 기계코드를 포함하는 라인뿐만 아니라 레지스터 및/또는 데이터 변경(또는 상황 코드와 같은 "상태"의 기타 변경)은 분해된 명령과 나란히 또는 아래에 표시될 수 있다.이것은 궁극적인 문제 해결을 위한 매우 강력한 디버깅 정보를 제공합니다.단, 결과 출력의 크기가 매우 클 수 있습니다.특히 전체 프로그램의 실행에 대해 활성화 되어 있는 경우에는 더욱 그렇습니다.OLIVER는 CICS 디버깅 제품의 일부로 1970년대 초부터 이러한 기능을 제공했으며, 현재는 CompuwareXPEDITER 제품에 포함되어 있습니다.

길이 분해기

Length Disassembler engine(LDE; 길이 분해 엔진)이라고도 불리는 Length Disassembler는 일련의 바이트(명령)가 지정되면 해석된 명령에 의해 취득된 바이트 수를 출력하는 도구입니다.x86 아키텍처의 주요 오픈 소스 프로젝트로는 ldism,[6] Tiny x86 Length Disassembler[7] 및 x86-64용 [8]Extended Length Disassembler Engine이 있습니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ a b "Archived copy". Archived from the original on 2022-01-08. Retrieved 2022-01-25.{{cite web}}: CS1 maint: 제목으로 아카이브된 복사(링크)
  2. ^ "Archived copy". Archived from the original on 2022-01-24. Retrieved 2022-01-25.{{cite web}}: CS1 maint: 제목으로 아카이브된 복사(링크)
  3. ^ 폴, 마티아스 R.(1997-07-30)."성당 참사회 II.5.Allgemeines:Undokumentierte Möglichkeiten 폰 DEBUG"[DEBUG의Undocumented 기능].NWDOS-TIPs — 팁을 &, Tricks rund)노벨 도스 7, mit Blick aufundokumentierte 자세한 내용은 벅스 und Workarounds.MPDOSTIP.157(독일어로)(3판)를 해제한다.그 2017-09-10에 원래에서 Archived..(NB다. NWDOSTIP 2014-09-06 Retrieved.TXT는 Novell DOS 7 및 OpenDOS 7.01관한 포괄적인 작업이며, 문서화되어 있지 않은 많은 기능 및 내부 기능에 대한 설명을 포함합니다.저자의 더 큰 MPDOSTIP.Z의 일부입니다.IP 수집은 최대 2001년까지 유지되며 동시에 많은 사이트에 배포되었습니다.제공된 링크는 HTML 변환된 이전 버전의 NWDOSTIP를 가리키고 있습니다.TXT 파일).
  4. ^ "PEExplorer Windows Disassembler for Win 32-bit Program EXE DLL OCX, Code Binary Analysis Tool". Retrieved 2022-04-25.{{cite web}}: CS1 maint :url-status (링크)
  5. ^ Sourcer - Commenting Disassembler (September 1989 ed.). V Communications, Inc. 1988. Part Number S0989-164. Retrieved 2019-12-21.
  6. ^ "ldisasm". GitHub. Archived from the original on 2020-10-28. Retrieved 2020-02-26.
  7. ^ "Tiny x86 Length Disassembler". GitHub. Archived from the original on 2020-10-31. Retrieved 2019-12-10.
  8. ^ "Extended Length Disassembler Engine for x86-64". GitHub. Archived from the original on 2020-10-08. Retrieved 2019-12-10.

추가 정보

  • Vinciguerra, Lori; M. Wills, Linda; Kejriwal, Nidhi; Martino, Paul; Vinciguerra, Ralph L. (2003). "An experimentation framework for evaluating disassembly and recompilation tools for C++ and Java]". Proceedings of 10th Working Conference on Reverse Engineering (WCRE): 14–23. doi:10.1109/WCRE.2003.1287233. ISBN 0-7695-2027-8. S2CID 10398240.
  • Schwarz, Benjamin; Debray, Saumya; Andrews, Gregory (2002). "Disassembly of Executable Code Revisited". Proceedings of 9th Working Conference on Reverse Engineering (WCRE). Department of Computer Science, University of Arizona: 45–54. CiteSeerX 10.1.1.85.6387.

외부 링크