jmp near xxxxxxxx

Тема в разделе "WASM.ASSEMBLER", создана пользователем ASMatik, 9 ноя 2008.

  1. ASMatik

    ASMatik New Member

    Публикаций:
    0
    Регистрация:
    3 июл 2008
    Сообщения:
    27
    Не могу понять, как правильно рассчитывать смещение при записи jmp near xxxxxxxx в начало API функции.
    Делаю так:
    Код (Text):
    1. mov     eax, OldProc
    2. mov     byte ptr [eax], 0E9h   
    3. ;================================
    4. ; Calculate "JMP NEAR" offset in API
    5. ;================================
    6. mov     esi, NewProc
    7. sub     esi, OldProc
    8. sub     esi, 5
    9. bswap           esi
    10. mov     [eax+1], esi
    NewProc - адрес функции, которой будет передаваться управление, OldProc - соответственно адрес API функции. Допустим, я посчитал смещение в esi и получилось:
    esi = 8427FEE2
    Записал его в начало API функции, получилось:
    E9 84 27 FE E2
    Во время трейса в Olly, обнаруживаю, что он определил инструкцию как:
    Код (Text):
    1. 7C80176B >-E9 8427FEE2      JMP 5F7E3EF4
    И далее, конечно переход происходит вникуда, и программа выдает эксепшн.
    Подскажите пожалуйста, как правильно реализовать jmp near xxxxxxxx в начале похученной API функции
     
  2. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    поиск.
    bswap лишний
     
  3. CrystalIC

    CrystalIC New Member

    Публикаций:
    0
    Регистрация:
    26 июл 2008
    Сообщения:
    500
    Смещение_в_Jmp_Near = Адрес_перехода - Адрес_Jmp_Near - 5
     
  4. ASMatik

    ASMatik New Member

    Публикаций:
    0
    Регистрация:
    3 июл 2008
    Сообщения:
    27
    Спасибо, действительно bswap лишний.