Size: a a a

Ассемблер

2021 April 06

ST

Saenro T in Ассемблер
Ну просто у тебя сейчас этот прыжок идёт в сторону меньших адресов относительно CALL
источник

L

Lee in Ассемблер
например, почему вычислять этот адресс цели вообще? почему так? как это работает?

У меня myFunc = адресс где находиться её начало. Я её пытался передать вместо targetAddr и не получилось, а почему, не ясно
источник

A

Aleksandr in Ассемблер
видимо, 5 - длина джампа, а e9 - опкод джампа
источник

L

Lee in Ассемблер
Да
источник

A

Aleksandr in Ассемблер
А, ну да, 5. Опкод+4 байта смещения
источник

A

Aleksandr in Ассемблер
Вроде бы все логично
источник

L

Lee in Ассемблер
В общем, надо читать дальше книжки по асму, а то чувствую себя не очень
источник

L

Lee in Ассемблер
по туторов всё выполнять и не понимать до конца, такое себе
источник

ST

Saenro T in Ассемблер
Если прыгать вниз по адресам, то к разнице + 4 и инвертируешь. Если вверх, то от разницы отнять 5.
источник

A

Aleksandr in Ассемблер
Там же знаковое число, не надо его инвертировать, оно само определит куда прыгать
источник

L

Lee in Ассемблер
Я не это имел ввиду, myFunc = адрес начала моей функции. Как мне myFunc прописать после jmp
источник

L

Lee in Ассемблер
Я пробовал так:
*(BYTE*)toHook = 0xE9;
*(DWORD*)((DWORD)toHook + 1) = myFunc;
Как я эту конструкцию вижу: записывается в значение по адресу toHook +1, адрес начала моей функции, правильно? Тогда почему это некорректно
источник

LW

Loren White in Ассемблер
e9 - rip relative jmp же, тебе туда надо не конечный адрес записывать, а относительный
источник

L

Lee in Ассемблер
Относительные адреса? Вы про тех что указывают на конечные или что?
источник

LW

Loren White in Ассемблер
записывай после e9 число, на которое надо увеличить \ уменьшить ip, чтобы попасть на myFunc
источник

A

Aleksandr in Ассемблер
адрес относительный текущего значения (e/r)ip
источник

LW

Loren White in Ассемблер
TargetBuffer[0] = 0xFF;
TargetBuffer[1] = 0x25;
LONG RelativeOffset = 0;
*(LONG*)&TargetBuffer[2] = RelativeOffset;
*(UINT64*)&TargetBuffer[6] = WhereToJump;
Если лень считать, то используй такую конструкцию. WhereToJump - твой желаемый адрес.
источник

L

Lee in Ассемблер
да не лень, я суть хочу уловить
источник

L

Lee in Ассемблер
Теперь мне всё стало ясно
источник

L

Lee in Ассемблер
Спасибо!
источник