JMP

Тема в разделе "WASM.RESEARCH", создана пользователем Tricesimus, 23 фев 2009.

  1. Tricesimus

    Tricesimus New Member

    Публикаций:
    0
    Регистрация:
    23 фев 2009
    Сообщения:
    4
    Можно ли передать выполнение на _любой_ адрес памяти? Как это реализовать в машинном коде?


    Общая задача:
    есть код, нужно его загрузить в память и передать на него выполнение.
    столкнулся с проблемой, что jmp работать не хочет, даже если поправить ему адрес. парился 4 часа, так и не понял, почему не работает.

    код ассемблирую сам, перепробовал все - ничего работать не хочет (

    Остановился на том, что ближе всего к истине FF 25 <4 байта адреса>
     
  2. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    видимо ты неправильно рассчитываеш смещение у jmp'a
    вбей в ольке jmp xxxx и увидиш что это возможно
    еще есть push xxxx / retn
     
  3. Tricesimus

    Tricesimus New Member

    Публикаций:
    0
    Регистрация:
    23 фев 2009
    Сообщения:
    4
    мне нужно сделать переход на заданный абсолютный адрес. кто может - плз помогите, мозг уже не работает...
     
  4. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    push xxxx / retn
     
  5. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    Какой режим, реальный или защищённый? Если защищённый, с сегментацией или без оной? Ну или вообще 64-разрядный? :)
     
  6. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Странно немного звучит. 'FF 25' -- это код 'jmp reg/mem'. Если тебе нужен такой переход, то заведи переменную, положи туда адрес и сделай переход по нему.

    mov dword [addr], 0xADDR
    jmp dword [addr]

    Или какое-то еще условие есть?

    P.S. Кстати, да. Про режим забыл спросить. Эти строки для 32битного режима.
     
  7. Tricesimus

    Tricesimus New Member

    Публикаций:
    0
    Регистрация:
    23 фев 2009
    Сообщения:
    4
    Вроде разобрался, только возник вопрос...
    Использую E9 <целевой адрес - адрес JMP - 5>
    Всегда ли оно будет работать.

    Режим защищенный 32-х битный
     
  8. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Если целевой код всегда находится на одинаковом относительном расстоянии от инструкции jmp, то да.
     
  9. Tricesimus

    Tricesimus New Member

    Публикаций:
    0
    Регистрация:
    23 фев 2009
    Сообщения:
    4
    а что насчет сегментов, страниц и т.д.? (в адресацию не углублялся)
     
  10. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    'jmp' не может прыгать между сегментами. Для этого есть 'jmp far'. Это в случае, если сегменты не пересекаются. Если пересекаются -- можно прыгать как угодно. Со страницами тоже все хорошо :). В случае, если есть NX бит, то страница должна быть исполняемая, чтобы код на ней выполнялся.