【问题标题】:Why does my debugger display [LOCAL.8] instead of [EBP-20]为什么我的调试器显示 [LOCAL.8] 而不是 [EBP-20]
【发布时间】:2023-04-07 13:56:01
【问题描述】:

我的调试器中有一行如下:CMP DWORD PTR SS:[LOCAL.8], 0D

我或多或少了解两个值之间存在比较,并且我知道在这种情况下 LOCAL.8 代表 EBP-20(我知道这一点是因为双击该行会显示 CMP DWORD PTR SS:[EBP-20],0D

LOCAL 是什么意思?

【问题讨论】:

  • 可能是一个局部变量。这是哪个调试器?
  • OllyDbg。我想我只是对为什么它不只是显示 EBP-20 感到困惑。也许我只需要了解更多关于局部变量的信息——我对汇编很陌生。

标签: variables assembly x86 disassembly


【解决方案1】:

局部变量通常相对于 ebp 被引用(在标准调用约定中保留帧指针)。由于堆栈向下增长,局部变量存储在帧的开头下方,从常规内存的角度来看,它是“向下”的,从堆栈的角度来看是“向上”。您的调试器试图通过假设任何从 ebp 偏移的 2 的小幂是对局部变量的引用来提供帮助。点后面的数字代表它是哪个局部变量,假设在 32 位环境中是 4 字节的局部变量。

【讨论】:

  • 谢谢。我需要做更多的学习才能完全理解这里发生了什么——但我现在对方向有了更好的了解。
猜你喜欢
  • 2011-03-01
  • 2023-03-14
  • 1970-01-01
  • 1970-01-01
  • 2011-09-22
  • 2011-11-21
  • 2013-04-11
  • 1970-01-01
  • 2017-05-18
相关资源
最近更新 更多