Код, выполняющийся несколькими способами

Тема в разделе "WASM.BEGINNERS", создана пользователем ua2ohD0g, 30 сен 2009.

  1. ua2ohD0g

    ua2ohD0g New Member

    Публикаций:
    0
    Регистрация:
    30 сен 2009
    Сообщения:
    3
    Как известно, чтобы правильно дизассемблировать код, нужно знать, откуда начинать это делать. Как пример приведу такой 16-битный x86-код, который мне попался под руку:
    Код (Text):
    1. db 0xeb,0x3a,0x90,0x43, 0x6f
    Если дизассемблировать с начала, то получим:
    Код (Text):
    1. jmp 0x3c ;0xeb, 0x3a
    2. nop ; 0x90
    3. inc bx ; 0x43
    4. outsw ; 0x6f
    А если дизассемблировать начиная с первого (не нулевого) байта, то получим:
    Код (Text):
    1. cmp dl, [bx+si+6f43] ; 0x3a, 0x90, 0x43, 0x6f
    Интересно, как можно получить код, который бы в обоих случаях делал что-то полезное? Идея в том, чтобы вызывать его то с помощью jmp start, то с помощью jmp start+1 и получать разные результаты. Проблема в том, что не могу придумать, как сделать такой код полезным.
    Варианты есть следующие:
    1. Сделать первый байт префиксом, являющимся частью опкода (в мануале Intel это называется mandatory prefix). Но в этом случае полностью меняется только одна команда.
    2. Поставить в начало двух/трех-байтовый опкод. Отсекаться тогда будет escape-бит 0x0f и опкод будет становиться однобайтовым, а все последующие коды будут декодироваться совершенно по-другому.
    3. Поставить в начало инструкцию с однобайтовым опкодом и параметрами. После отсечения параметры станут опкодом или префиксом. Все инструкции можно перебрать, их меньше 256, но вот подобрать параметр, одновременно являющийся префиксом/опкодом и выполняющий свою функцию, довольно трудно.
    Вроде бы это все варианты, кроме префикса и опкода в начале ничего стоять и не может.
    Может быть кто-то уже предлагал такую идею и как-нибудь ее реализовал? Или есть у кого-нибудь идеи составления такого кода?
     
  2. ua2ohD0g

    ua2ohD0g New Member

    Публикаций:
    0
    Регистрация:
    30 сен 2009
    Сообщения:
    3
    Еще есть вариант сдвигать не на один байт, но это еще сложнее.
     
  3. _Sl4yer

    _Sl4yer New Member

    Публикаций:
    0
    Регистрация:
    2 мар 2009
    Сообщения:
    55
    ну, наверно что -то похожее. http://www.wasm.ru/forum/viewtopic.php?id=26841
     
  4. ua2ohD0g

    ua2ohD0g New Member

    Публикаций:
    0
    Регистрация:
    30 сен 2009
    Сообщения:
    3
    Да, как раз то, что нужно. Свормулировать, как "наложение инструкций" не догадался.