lib дизассемблера x86 или x64 - PullRequest
2 голосов
/ 22 января 2011

Я знаю о некоторых дизассемблированных библиотеках, но я ищу тот, у которого есть API, как:

void * findAddrOfFirstInstructionStartingFrom( void * startAddress , InstructionType instruction);

void* addr = findAddrOfFirstInstructionStartingFrom(startAddress , JMP);

и другие apis smiler к этому, такие как поиск чего-то конкретного, не разбирать все инструкции, начиная с адреса, и получать различную информацию, потому что это медленно, если вы хотите найти что-то конкретное, а не все

Если вы знаете какие-либо PLS, дайте мне знать, если нет никаких PLS, скажите мне, что с открытым исходным кодом и легко изменить.

Ответы [ 3 ]

2 голосов
/ 22 января 2011

Вы не пометили и не сообщили архитектуру процессора, поэтому вряд ли вы получите реальный ответ.

Обычно инструкции нативного кода имеют очень различную длину в зависимости от используемых операндов, поэтому перед поиском вам нужно разобрать объект. В противном случае вы просто найдете первую последовательность байтов, которая соответствует шаблону инструкции, которую вы ищете. Скорее всего, это не настоящая инструкция, а часть операндов предыдущей инструкции.

РЕДАКТИРОВАТЬ: так как вы обновили название, я могу думать о вариантах Борг и PEDasm с открытым исходным кодом. Если вы отбросите эту вещь с открытым исходным кодом, тогда определенно IDA pro.

1 голос
/ 22 января 2011

Что вам, вероятно, нужно, это не просто библиотека, а какой-то Disassembler Framework.Взгляните на IDA-Pro, который также предоставляет универсальный интерфейс сценариев (и API дизассемблера)

1 голос
/ 22 января 2011

Я не знаю ни одного API, который может сделать это, но это может быть выполнено с использованием сценариев командной строки:

objdump -d --start-address address file | grep -m 1 instruction | cut -d : -f 1

Так, например, чтобы найти первую JMP инструкцию, начинающуюся садрес 0x08048664 в файле a.out, вы можете сделать это:

$ objdump -d --start-address 0x08048664 a.out | grep -m 1 jmp | cut -d : -f 1
 8048675
...