【问题标题】:How can I trace the value of an address in memory?如何跟踪内存中地址的值?
【发布时间】:2019-10-08 23:58:47
【问题描述】:

正如标题所示,我想看看特定地址的值是从哪里来的。我正在用lldb调试一个ios游戏。该游戏的乘数值为 0.4(组合减少的速度)。我可以使用作弊引擎更改此值,但我想知道汇编中的哪个指令将此值设置为该地址,以便我可以使用十六进制编辑器更改此指令。我曾经对变量值使用观察点断点等,但在这种情况下,该值是恒定的,并且在应用程序立即启动时设置。

【问题讨论】:

  • 如果它是一个常数,那么可能没有指令设置它。它只是在二进制文件中并被加载到内存中。找到它所在的部分,然后在文件中找到它。
  • 如何找到它在哪个部分?
  • 我认为作弊引擎有相应的工具。我从未使用过它,所以很遗憾无法为您提供帮助。 lldb 也是如此。但是,使用 gdb,您可以执行 info symbol,这将为您提供该部分,然后使用 info files 获取该部分的基地址。然后,您可以从符号的地址中减去它以获得偏移量。最后,在二进制文件中找到该部分的开头(例如,使用objdump 或readelf)并添加您在上一步中计算的偏移量。然后你应该在文件中的那个位置找到你的变量。

标签: ios debugging assembly arm lldb


【解决方案1】:

lldb 中 Jester 的 gdb 步骤的等效指令是:

(lldb) image lookup -va <ADDRESS>

这将告诉你 lldb 知道的关于该地址的所有信息。

【讨论】:

  • 当然看起来更简单:D
  • 当我输入“image lookup -va address-of-value”时,我没有输出。
  • 这意味着地址不在程序中图像列表中的任何已加载部分中。这通常是因为地址在堆栈或堆分配的内存中 - 从您的描述听起来更像是后者。
猜你喜欢
  • 2013-04-05
  • 1970-01-01
  • 2016-11-21
  • 1970-01-01
  • 1970-01-01
  • 2014-12-29
  • 1970-01-01
  • 2011-05-15
  • 1970-01-01
相关资源
最近更新 更多