Как прочитать бит направления и источник или назначение инструкции по сборке - PullRequest
2 голосов
/ 22 июля 2011

Итак, я работаю над кодом (для x86), где мне нужно получить исходную или конечную точку инструкции.Для этого мне нужен бит направления, который говорит, является ли ModRM или REG пунктом назначения или источником.Также мне нужно уметь обрабатывать непосредственные значения.Пока что я могу обработать инструкцию и ее основной код операции (вместе с префиксами).Мне интересно, как проще всего это сделать или кто-то может указать мне несколько хороших примеров кода, где определяется место назначения / источник (например, регистр, адрес памяти или непосредственный операнд).Я видел много декодеров, но большинство из них созданы специально для одной цели, а те, которые включают много функций, очень сложны.

1 Ответ

1 голос
/ 22 июля 2011

Почему бы просто не использовать дизассемблерный двигатель?Вы можете либо увидеть, как они декодируют байты (спецификация приведена в руководстве для разработчиков Intel, том 1), либо заставить их выполнить всю тяжелую работу за вас, так что вы можете вместо этого обработать их вывод (который, вероятно, будет простым текстом и несколькимифлаги).Два движка с открытым исходным кодом, на которые стоит обратить внимание, - это BeaEngine (включает в себя все инструкции под солнцем, простой в использовании интерфейс) и механизм дискомфорта ollydbg (простой и компактный, который подходит только для инструкций SSE1).

...