명령어를 기계 친화적 인 구조의 구성 요소 부분으로 분해하는 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만큼 완벽합니다.