17

我需要帮助才能理解以下组装说明。在我看来,我正在调用 someUnknownValue += 20994A 的地址?

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

2 回答 2

60

无论您使用什么来获得反汇编,都试图提供帮助,方法是将调用的目标作为它知道的某个符号的偏移量 - 但鉴于偏移量如此之大,它可能会感到困惑。

调用的实际目标可以计算如下:

  • E8call具有相对偏移量的 a。
  • 在 32 位代码段中,偏移量指定为带符号的 32 位值。
  • 该值采用 little-endian 字节顺序。
  • 偏移量是从以下指令的地址开始测量的。

例如

<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
于 2012-04-29T23:31:40.583 回答
-2

如果您使用反汇编程序分析 PE 文件,反汇编程序可能给您错误的代码。大多数恶意软件编写者使用插入 E8 作为反反汇编技术。您可以验证 E8 上面的代码是否是跳转指令,跳转位置在 E8 之后。

于 2013-07-13T06:25:01.217 回答