По поводу Olly и интерпретации команд.

Тема в разделе "WASM.BEGINNERS", создана пользователем wardrag5, 26 сен 2011.

  1. wardrag5

    wardrag5 New Member

    Публикаций:
    0
    Регистрация:
    12 июл 2011
    Сообщения:
    5
    Встретил такое вот дело:

    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 и т.д.Интеловская таблица меня убила.
     
  2. valentin_p

    valentin_p New Member

    Публикаций:
    0
    Регистрация:
    11 фев 2011
    Сообщения:
    382
    так часто бывает. наверное это внутренний глюкогенератор. Обычно помогает уничтожение связи с .udd,а если это изначально то проход этого блока кода и ре-анализ(ctr+a) с другого места
     
  3. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    valentin_p
    Какой ещё глюкогенератор? Если я правильно понял, автор удивляется, почему инструкции начинаются не с каждого байта.
     
  4. 3abp_beginner

    3abp_beginner New Member

    Публикаций:
    0
    Регистрация:
    26 сен 2011
    Сообщения:
    21
    http://wasm.ru/baixado.php?mode=tool&id=213
    Хороший наборчик для изучения опкодов(неполная, полнее тока Интел)
    Я новичек и думаю то, что я верно серым веществом подействовал
     
  5. valentin_p

    valentin_p New Member

    Публикаций:
    0
    Регистрация:
    11 фев 2011
    Сообщения:
    382
    l_inc а я понял что он про диазмблинг
     
  6. 3abp_beginner

    3abp_beginner New Member

    Публикаций:
    0
    Регистрация:
    26 сен 2011
    Сообщения:
    21
    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
     
  7. wardrag5

    wardrag5 New Member

    Публикаций:
    0
    Регистрация:
    12 июл 2011
    Сообщения:
    5
    Спасибо вам,парни,за опкоды! Попробую раскурить завтра(у нас ещё 26-ое).

    Эм,честно,не знаю,что такое .udd на самом деле,но гугл уверяет,что это фаил конфигурации.Зачем он нужен и как его использовать(в случае со мной - разорвать связь) ?
    По поводу второй части вашего поста - я так понял,под *проходом блока* вы подрузамеваете пошаговую трассировку (F7) ?
     
  8. valentin_p

    valentin_p New Member

    Публикаций:
    0
    Регистрация:
    11 фев 2011
    Сообщения:
    382
    трассировка - да, или бряк по условию\месту за кодом. ну вы поняли =)

    udd - его создает оля,(еще bak), я говорил о случае когда оля непреднамеренно глючно начинает интерпретировать команды. А после удаления отладочных файлов дизасм пройдет снова - без глюков.
     
  9. FatMoon

    FatMoon New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2002
    Сообщения:
    954
    Адрес:
    Russia
    Поскольку ответа так и не было :)) добавлю еще и свой.

    Все дело в том, что команды занимают более 1 байта. Память - она такая память, с адресами для каждого байта. Но команды выполняются не по каждому адресу! Если у вас лежит по адресу
    , то эта команда занимает 5 байт в памяти, и после ее выполнения следующей инструкцией будет то, что по адресу 401005, а не 401001! Вы удивлены, куда делись адреса 401001...401004? вот сюда и делись. Почему олли не интерпретирует этот блок адресов? потому что он не знает о ваших сомнениях, а показывает так, как надо :). И нет,
    это выполняться не будет. Только если по каким-то причинам будет передано управление на 401001. Но при этом не будет выполнено 401002 (потому что этот байт попал в 2-байтную команду D026), и далее не будет выполнено RETN, потому что по новому порядку байт C3 попадает вторым в 00С3 - и будет выполняться то, что по адресу 401006.
     
  10. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Ну и я добавлю. Куча INT 3 - это работа Микрософтовского компилятора. Он выравнивает функции/процедуры на границу двойного слова, а "хвосты" заполняет байтом 0xCC - это и есть INT 3.