Как читать бит направления и источник или место назначения инструкции по сборке

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


person Jesus Ramos    schedule 22.07.2011    source источник


Ответы (1)


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

person Necrolis    schedule 22.07.2011
comment
Ах, я забыл, что где-то здесь есть исходный код ollydbg. Я посмотрю на это. - person Jesus Ramos; 22.07.2011