два байта пропатчить на mov eax, 0x04, что будет 0xB8, 0x04, 0x00, 0x00, 0x00, только откинув три последних байта, то нормально заведется?
Не заведётся. Опкод 0xb8 хочет, чтобы за ним был 32-битный immediate. Можешь найти где-нибудь рядом пустой/ненужный кусок кода, воткнуть туда jmp (как раз влезет), там что-то сделать и воткнуть jmp обратно.
Нет, не заведётся, можешь попробовать B004
А старшие биты регистра обнулятся разве?
Нет, тут как карта ляжет)
тебе нужен опкод с однобайтовым immediate, вроде был такой
вообще тут недавно скидывали кошерную табличку с инструкциями опкодами https://t.me/ChatAssembler/167929
А как jmp воткнуть в два байта? Что должно выступать операндом?
относительно смещение
То-есть оно не может быть больше, чем 255?
Смещение со знаком от следующей за jmp инструкцией до целевой инструкции. Т.е.: 1234: 31 с0 → eb ?? → eb (target - 1236) 1236: ...
Не может быть больше 127 вперёд и -128 назад. Но ты можешь забрать под jmp следующую/следующие инструкции тоже, тогда jmp станет безлимитным (5 байт), а сами инструкции ты будешь выполнять сам там, куда прыгнешь.
Обсуждают сегодня