【问题标题】:x86 LEA with ESP + offset带 ESP + 偏移的 x86 LEA
【发布时间】:2014-04-23 15:56:49
【问题描述】:

我正在通过《实用恶意软件分析》这本书学习 x86,我经常看到如下内容:

lea   edx, [esp+24Ch+name]
push  edx
push  ...
call ds:bind

我了解 LEA 的工作原理,这基本上是将 esp+24C+name 的值存储在 edx 中。这可能是一个指向字符串前面的指针。

我不明白编译器是如何提出这个问题的。这个存储在哪里?这是堆栈中的某个地方吗?如果不是,为什么要使用 esp?

我认为我的程序员在处理编译器的“幻数”时遇到了困难。

【问题讨论】:

  • 我是唯一一个认为创建的这个 x86-lea 标签完全是浪费并且 x86 标签已经捕获它的人吗?

标签: assembly x86 reverse-engineering disassembly


【解决方案1】:

编译器不必使用ebp 作为基址寄存器。它可以决定单独计算堆栈,然后直接使用堆栈指针。在 GCC 中,您可以使用 -fomit-frame-pointer 来实现此优化。 然后,编译器可以生成保持固定大小堆栈或保持计数的代码。取决于功能。

【讨论】:

  • 为什么这么远,24C 对我来说似乎很随机。这是否意味着这个值在某个时候被压入堆栈,而编译器只是硬编码它是 24C 偏移量?谢谢。
  • 该指令看起来像结构访问,所以可能是结构太大,成员的偏移量在这个位置。
猜你喜欢
  • 2012-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-04
  • 1970-01-01
  • 2022-10-06
  • 2012-07-12
  • 1970-01-01
相关资源
最近更新 更多