구조화 된 출력을 제공하는 ARM 디스어셈블러가 있습니까?

명령어를 기계 친화적 인 구조의 구성 요소 부분으로 분해하는 ARM (또는 기타 x86이 아닌) 디스어셈블러가 있습니까? 이상적으로는 XED 또는 distorm3 과 같이 구조로 분해 한 다음 “Is this a call?”과 같은 것을 쿼리하기위한 API “이것은 조건부 분기입니까?” 등, 또는 명령어의 피연산자를 가져옵니다.

armstorm 을 찾았지만 현재 THUMB 만 지원합니다.

편집 : 명확히하기 위해 다른 프로그램 내에서 호출 할 수 있고 자유 라이선스 (GPL 호환)가있는 것을 찾고 있습니다.

댓글

  • 가치가있는 부분은 가까운 시일 내에 ERESI에 추가 될 것으로 생각됩니다. 그들은 이미 Intel과 Sparc를 위해 이미 보유하고 있으며 더 많은 ARM 지원을 추가하고 있습니다.

Answer

DARM (GitHub) by Jurriaan Bremer는 작성된 ARMv7 디스어셈블러입니다. C에서 사용할 수 있으며 3-Clause BSD 라이선스에 따라 사용할 수 있습니다.

참고 : 현재 Thumb 모드를 지원하지 않습니다.

DARM을 사용하는 간단한 예는 다음과 같습니다.

참고 : p>

// The structure which will hold all the metadata about the disassembled instruction... darm_t d; // disassemble a 32bit opcode... if( darm_armv7_disasm( &d, 0xE12FFF14 ) >= 0 ) { if( d.instr == I_BX ) { // do something with a BX instructiuon... } // print the disassembled full instruction darm_str_t str; if( darm_str( &d, &str) > 0 ) printf( "%s\n", str.instr ); } 

댓글

  • 이것이 제가 원하는 것 같습니다. DARM을 둘 다 사용할 수도 있습니다. 암 스톰 완전한 지원을 받으려면 …

답변

예, IDA Pro의 SDK 를 사용하면 insn_t 클래스 (ua.hpp)를 통해 지침 구성 요소에 액세스 할 수 있습니다.

댓글

  • ' 알아두면 좋지만 저는 ' 다른 프로그램 내에서 호출 할 수 있고 자유 라이선스가있는 것을 찾고 있습니다.
  • @ BrendanDolan-Gavitt : 그렇다면 질문에서 그게 좋은 생각이라고 말하는 건가요?

답변

이 질문에 대한 최신 답변은 Capstone 라이브러리. ARM 디스 어셈블리에 사용했는데 매우 안정적입니다. IMHO, 최고의 오픈 소스 라이브러리입니다.

라이브러리는 LLVM의 TabelGen 명령어 설명을 기반으로합니다. 따라서 ISA 지원은 LLVM만큼 완벽합니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다