Подтвердить что ты не робот

Нужна помощь в понимании инструкции E8 asm call x86

Мне нужна помощь, чтобы понять следующую инструкцию по сборке. Мне кажется, что я вызываю адрес в someUnknownValue + = 20994A?

E8 32F6FFFF - call std::_Init_locks::operator=+20994A
4b9b3361

Ответ 1

Все, что вы используете для получения разборки, пытается быть полезным, предоставляя цель вызова как смещение от некоторого символа, о котором он знает, - но учитывая, что смещение настолько велико, оно, вероятно, запутано.

Фактическая цель вызова может быть рассчитана следующим образом:

  • E8 - это call с относительным смещением.
  • В сегменте 32-битного кода смещение задается как 32-битное знаковое значение.
  • Это значение находится в порядке порядка байтов.
  • Смещение измеряется по адресу следующей инструкции.

например.

<some address>       E8 32 F6 FF FF         call <somewhere>
<some address>+5     (next instruction)
  • Смещение 0xFFFFF632.
  • Интерпретируется как подписанное 32-битное значение, это -0x9CE.
  • Инструкция call находится в <some address> и имеет длину 5 байтов; следующая инструкция находится в <some address> + 5.
  • Таким образом, целевой адрес вызова <some address> + 5 - 0x9CE.

Ответ 2

Если вы анализируете PE файл с дизассемблером, дизассемблер мог дать вам неправильный код. Большинство авторов вредоносных программ используют вставку E8 как метод разборки. Вы можете проверить, являются ли коды выше E8 инструкциями перехода, где место перехода находится после E8.