Вы можете звонить через EBP, он просто закодирован по-разному.Вам нужна последовательность
0xff 0x55 0x00
Дело в том, что нет способа кодировать EBP без смещения (выше указано, что EBP с байтовым смещением 0), как кодирование, которое вы обычно ожидаетеEBP без смещения (0x15) вместо этого означает 32-битный абсолют.
Также обратите внимание на ваш пример 0xff 0x14
- в этом случае есть 3-й байт (байт SIB), который кодирует базовый регистр, регистр индекса,и масштабный коэффициент.ESP + EDI, как в вашем примере, имеет 3-й байт 0x3c
- вы хотите, чтобы 3-й байт был 0x24
, чтобы получить только ESP
Что касается , почему они выбрали EBP и ESPчто касается регистров, которые не могут быть просто закодированы, то это потому, что ESP является указателем стека (как правило, к нему обращаются инструкции push / pop), а EBP является указателем фрейма, поэтому вы редко хотите напрямую разыменовывать его без смещения.По крайней мере, это был тот случай, когда был разработан 80386.