【问题标题】:GDB: reading with the x command doesn't workGDB:使用 x 命令读取不起作用
【发布时间】:2021-01-09 08:37:18
【问题描述】:

我正在尝试对 ELF 64 位程序进行逆向工程。
我在<strcmp@plt> 的指针上设置了一个断点。我读到here,正在比较的值存储在raxrbx 中。当我使用x 命令时(这里我使用x/s 命令来获取字符串输出,但我也尝试使用x)我收到错误消息<error: Cannont access memory at address *some address*>,确切的命令是@987654335 @。 print 函数确实有效,但这给了我原始数据(我认为是十六进制?)并且我需要字符串,有没有办法将值转换为字符串?
我的系统是 64 位 Windows 10,我m 在windows的linux子系统中使用gdb。

编辑
我使用gdb R(程序名称)开始我的 GDB 会话 节目信息:
然后我运行disass main 来查找与我的输入进行比较的地址,这就是strcmp@plt 所在的位置。
我复制地址并使用b * 0x8001168 设置断点。
插入断点后,我运行run TestArg
现在程序在我的断点处停止。
我运行info registers 看看里面是否有东西,有。
当我尝试x/s $rax 时,我得到以下输出。
print 命令确实有效,但我需要字符串值。

【问题讨论】:

  • 不是描述你做了什么,而是显示它(作为一个完整的GDB会话)。 “原样”的问题等同于“某些事情不起作用”。如果您希望有人帮助您,您需要更加精确。
  • 我已经包含了一些输出截图和我使用的命令。

标签: linux gdb windows-subsystem-for-linux


【解决方案1】:

我在这里读到,正在比较的值存储在 rax 和 rbx 中。

那篇博文似乎完全错误——strcmp() 的参数无法在raxrbx 中出现在x86_64 上——Linux / x86_64 calling convention 需要 他们在rdirsi

查看它们的寄存器值,rax 碰巧包含与rdi相同的值,而rdx 碰巧包含与@987654331相同的值@。

他们的事实

  1. 使用 raxrdx 而不提及(或显然理解)原因和,
  2. 实际上并不显示他们所指的反汇编

表示低质量的内容。您可能应该停止阅读此来源,并使用更可靠的东西。

【讨论】:

  • 非常感谢您的回答。我可以查看 $rsi 和 $rdi。感谢您的帮助。
猜你喜欢
  • 2012-08-07
  • 2011-08-07
  • 1970-01-01
  • 1970-01-01
  • 2015-11-04
  • 1970-01-01
  • 2016-04-06
  • 2023-02-03
相关资源
最近更新 更多