Встретил такое вот дело: 00401000 . B8 D0264400 MOV EAX,4426D0 00401005 . C3 RETN Куда *пропали* остальные адреса ? Ах,вот же они... = ): 00401001 ? D026 SHL BYTE PTR DS:[ESI],1 00401002 ? 26:44 INC ESP ; Superfluous prefix 00401003 ? 44 INC ESP 00401004 ? 00C3 ADD BL,AL 00401005 . C3 RETN Пришел к выводу,что Оля почему-то не может интерпретировать представленный перед ней блок опкодов.Это нормально ? Почему так происходит ? Кстати,после этого кода идёт куча инт3-ов,затем опять инструкция повторяется,но уже с измененным последним байтом...Дальше уже идут вызову функций,связанных с тредами,после чего идёт гетмодульхендл...Как обычно. Поэтому хочу узнать,есть ли где-то гайд по опкодам 80386-80586 с примерами ? Откуда берутся эти долбаные B8,B2 и т.д.Интеловская таблица меня убила.
так часто бывает. наверное это внутренний глюкогенератор. Обычно помогает уничтожение связи с .udd,а если это изначально то проход этого блока кода и ре-анализ(ctr+a) с другого места
valentin_p Какой ещё глюкогенератор? Если я правильно понял, автор удивляется, почему инструкции начинаются не с каждого байта.
http://wasm.ru/baixado.php?mode=tool&id=213 Хороший наборчик для изучения опкодов(неполная, полнее тока Интел) Я новичек и думаю то, что я верно серым веществом подействовал
wardrag5 так, про b8,b2: 1011b ?b ???b ??h ??h ??h ??h ;схема mov reg, ???????? первое-типа код инструкции(1011b) второе-кой-то w-бит(?b) третье-3 бита регистра(???b) следующие-источник=значение примеры: B8 D0264400 = 1011 1 000 ...(D0264400 in binval) | | | code w-b eax так, про w-bit(на твоём примере): 1011 0 000 ...(0D0 in binval) ;для слепых, w-bit инвентирован || mov al, 0d0h табло про регистры: 32-bit: 16-bit(prefix=66h): 8-bit: eax 000 esp 100 ax 000 sp 100 al 000 ah 100 ecx 001 ebp 101 cx 001 bp 101 cl 001 ch 101 edx 010 esi 110 dx 010 si 110 dl 010 dh 110 ebx 011 edi 111 bx 011 di 111 bl 011 bh 111
Спасибо вам,парни,за опкоды! Попробую раскурить завтра(у нас ещё 26-ое). Эм,честно,не знаю,что такое .udd на самом деле,но гугл уверяет,что это фаил конфигурации.Зачем он нужен и как его использовать(в случае со мной - разорвать связь) ? По поводу второй части вашего поста - я так понял,под *проходом блока* вы подрузамеваете пошаговую трассировку (F7) ?
трассировка - да, или бряк по условию\месту за кодом. ну вы поняли =) udd - его создает оля,(еще bak), я говорил о случае когда оля непреднамеренно глючно начинает интерпретировать команды. А после удаления отладочных файлов дизасм пройдет снова - без глюков.
Поскольку ответа так и не было ) добавлю еще и свой. Все дело в том, что команды занимают более 1 байта. Память - она такая память, с адресами для каждого байта. Но команды выполняются не по каждому адресу! Если у вас лежит по адресу , то эта команда занимает 5 байт в памяти, и после ее выполнения следующей инструкцией будет то, что по адресу 401005, а не 401001! Вы удивлены, куда делись адреса 401001...401004? вот сюда и делись. Почему олли не интерпретирует этот блок адресов? потому что он не знает о ваших сомнениях, а показывает так, как надо . И нет, это выполняться не будет. Только если по каким-то причинам будет передано управление на 401001. Но при этом не будет выполнено 401002 (потому что этот байт попал в 2-байтную команду D026), и далее не будет выполнено RETN, потому что по новому порядку байт C3 попадает вторым в 00С3 - и будет выполняться то, что по адресу 401006.
Ну и я добавлю. Куча INT 3 - это работа Микрософтовского компилятора. Он выравнивает функции/процедуры на границу двойного слова, а "хвосты" заполняет байтом 0xCC - это и есть INT 3.