s_d_f Помню такую комбинацию(одна из множества): 0F FF 05 - эта инструкция имеет поле ModR/M, тоесть весит 7 байт. Когда вы через свой лде прогоните её и получите то заветное значение, тогда мы оставим ваши органы в покое.
sergegers найдите ошибку в его двиге - и тогда рвите хоть зубами так всех устроит ??? зы: руки vs яйца - равноценные ставки ??? кто играет господа ???
Сколько эмоций из-за одного вопроса. Никто не спорит, что Малфой и компания разбирается в коденге лучше меня(это неправда конечно, скоро я порабощу мир и буду всем тут рулить, только разберусь тут с кое-какой мелочью ), но если так противно отвечать на такой ламерский вопрос, можно было просто пройти мимо. Кто - нибудь может подкинуть x86 код(без расширений), длину которого двиг z0mbie неправильно вычислял?
Я в этом все равно не участвую. У меня эта инструкция не работает, и нигде не документировано. Откуда мне знать, может вам по мерещилось? Тогда что там органы, можете сразу харакири делать.
А не могли бы вы сказать что это за инструкция такая? Вроде как 0F FF это illegal instruction, если мне не изменяет мой склероз.
Прежде чем камень декодирует инструкцию и сгенерит #UD, он её считает. А читает он не абы что, а конкретно длину инструкции, налету её длину определяя по считывающимся байтам. Хоть инструкции и нет в таблице, исполнение её приводит к #UD, но она длину имеет. И к вашему удивлению декодируется стандартным образом, такое чувство что иснтрукция валидна, но она залочена для исполнения. Прсто у вас проблема - вы декодируете инструкции по паблик таблицам. Это излишне, ибо камень может сам длину инструкции определить, посредством её исполнения на границе страницы. В юзермоде из за кривого диспетчера исключений приходится использовать некоторый изврат(доп проверки), но в целом конечный код совершенный. Sholar Что же вы молчите, я дал вам опкод. Скажите хоть чтонибудь в своё оправдание.
Ни какого удивления я не испытываю, просто есть побочный эффект при данной последовательности байт считывается 3байта, а только потом генерится исключение. Это не доказывает что эта инструкция залочена, более того встает вопрос для любой версии микрокода это так, и последний вопрос, ответ на который я не совсем понял: если инструкция невалидна то смысл говорить о ее дизассемблировании?
h0t Это вы с воздуха взяли ? Для однобайтовой иснтрукции считывается один байт. Если при раскодировании инструкции должно быть считан есчо один байт, то он считывается. Смысл есть. Для камня любая последовательность байт именуется инструкцией и имеет длину. Не существует инструкций с не определённой длиной. Посему алгоритм универсальный, не нужны вообще никакие таблицы(в ядре). Короче учить матчасть, потом только будите со мной спорить. Для троля выше который зомби лде просил опкод не читаемый я его узнал брутом, камень определяет реальную длину, которая сравнивается с тестируемым кривым двигателем. Это работает :P
Спорить и в мыслях не было, просто интерсено разобраться. А как вы определили, что у 0F FF 05 длина 3? опытным путем или из каких то других размышлений?
Все инструкции вызывающие 100% #UD (кроме ud2) на уровне "фантазии". Появляется несколько вопросов. 1. Для чего их вообще дизассемблировать? Мало-ли что имеет длину. 2. Как отличать рабочий код от явного мусора? Я не говорю о сложном анализе. 3. Посмотрел LDE (mov dr7,ecx) в eax возвращает 1 или 2 (по разному), это что длина?
s_d_f У вас не технические понятия. Длина инструкции это число байт, требуемых для полной её раскодировки. Дальше этого числа байт камень не читает память. 1. Тоесть для чего нужен лде ? - определить длину инструкции. Вы просто путаете немного, я длину не определяю по таблицам, это делает процессор. 2. Универсального способа нет. 3. Эта инструкция не может быть ни 1 ни 2 байта. Так как имеет префикс двубайтовой инструкции(0xF), опкод(0x23) и байт ModR/M. Если у вас возвращается не это, тогда выкинте свой дизасм.
Malfoy 1. Не надо подменять вопрос. Я спрашивал, зачем длина инструкций типа 0F FF 05? Это скорее побочный выхлоп процессора, чем что-то полезное. 2. Да, есть только частные способы, например когда и линейного дизасма достаточно. 3. тогда выкинте свой дизасм. LDE не мой дизасм.
s_d_f 1. Ваш двиг рассматривает только некоторые инструкции, описанные в таблицах. Как же вы не поймёте что любая последовательность байт раскодируется и имеет длину. Я могу отклонить все инструкции замаскированные, попыткой их исполнения. 2. Ваш в смысле тот, которым вы дизасмите.