Сплайсинг

Тема в разделе "WASM.BEGINNERS", создана пользователем asmfan, 6 мар 2007.

  1. z0mailbox

    z0mailbox z0

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    635
    Адрес:
    Russia СПБ
    потому и придумали СС что сплайсинг с длиной более одного байта ненадежен
    СС кстати весьма и весьма удобно для сплайсинга
    только что handler несколько другой
    а так - SEH UEF VEH IDT[3] - все что нужно взрослому мальчику
     
  2. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    антируткиту на это пофиг :)
     
  3. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
  4. gilg

    gilg New Member

    Публикаций:
    0
    Регистрация:
    19 май 2005
    Сообщения:
    527
    n0name
    А с относительной адресацией и relative jump/call как боролся?
     
  5. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    В примере я юзал push/ret. А с jmp rel что не так?
     
  6. gilg

    gilg New Member

    Публикаций:
    0
    Регистрация:
    19 май 2005
    Сообщения:
    527
    Если в начале функции будут инструкции типа

    jmp label_1
    ..... ; байт эдак n-цать кода
    label_1:

    или
    call [чего-то там]
    или
    lea eax, [edx + some_label]

    в буфере они будут исполнены неверно. В идеале нужно было бы заправить все смещения, но это ж геммор еще тот. Как такие конструкции обходил?
     
  7. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    gilg
    не только эти, а все опкоды, где офсеты кодируются релативными адресами. придется для всех таких команд править адреса вручную.. другого выхода я не вижу

    Кстати, хорошо подметили насчет CC. Можно и его юзать. В ринг3 придется поставить хендлер исключений, а в ринг0 можно и IDT подправить
     
  8. asd

    asd New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    952
    Адрес:
    Russia
    + ещё бывает так, что ret попадает. А править jmp и ему подобные, ничего сложного - всего несколько команд.

    gilg
    или
    call [чего-то там]
    или
    lea eax, [edx + some_label]


    А эти команды нормально работать будут. Или ты имеешь в виду, что some_label окажется в перемещаемом коде?
     
  9. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    эти действительно будут работать нормально. неперемещаемые опкоды только у jmp imm32, call imm32 и еще парочки команд, кажется.
     
  10. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Ну можно теоретически пропарсить таблицу релоков.
     
  11. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    n0name
    жесть) проще будет быстро пропарсить команды и релоцировать их
     
  12. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Great
    да нет, само то, как раз.
    На досуге сделаю. Благо релоцирование у меня уже есть.
     
  13. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Оо кинь код плиз для парсинга релоков.
     
  14. z0mailbox

    z0mailbox z0

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    635
    Адрес:
    Russia СПБ
    в 64-битной моде как специально сделали чтоб

    не работало. в принципе.

    к тому же размер джампа/колла у меня получился >= 11h bytes, и туда _часто_ попадают
    вышеуказанные проблемные места

    так что я отказался от такого сплайсинга
     
  15. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    Great
    оно валяется в интронете
     
  16. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    z0mailbox
    А что с INT3 (0xCC)? Вроде бы он лишен этих недостатков, т.к. занимает 1 байт
     
  17. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Честно говоря не понятен контекст сплайсинга, если в конкретной проге, то всегда код одинаков, и можно сделать конкретно под этот участок. Если в библиотечный код, то всегда можно загрузить вторую копию только с другим именем, и перенаправлять функции на неё. Как правило сплайсингуются именно библы, и проблем с ними нету.
     
  18. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Booster
    А апишки ядра ты как сплайсить собрался?
     
  19. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Great
    Через SST.
     
  20. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    А которых нету в SSDT?