gpt4 book ai didi

c - 汇编mov指令输出

转载 作者:行者123 更新时间:2023-11-30 20:08:11 24 4
gpt4 key购买 nike

我想了解我的数据字符串如何最终出现在 rdx 中。在我看来,mov指令将在地址处找到的数据放入目标中。所以rbp-0x28的内容被放入rdx中。我检查了 rbp-0x28 中的内容,它不是数据字符串('AAAAAAA')。但是,如果我让命令用 ni 执行,则 rdx 包含该字符串。我不知道该字符串如何最终出现在 rdx 中,因为它事先未包含在 rbp-0x28 中。我知道我的数据包含在 0x7fffffffe58f 中,但我不确定如何或何时将其加载到 rdx 中。非常感谢任何帮助!

GDB

最佳答案

这在很大程度上取决于您使用的编译器或调试器以及体系结构和调用约定。我确实使用 Apple 的 Clang 编译器和 lldb 运行了您的代码,并得到了预期的结果。我的输出和你的输出之间存在细微差别,但相对容易理解。由于您只在 offset+0x12 处发布了函数调试的部分输出,因此我假设之前哪个寄存器保存了函数调用的第一个参数(在我的例子中是 RDI),将指针移动到 [rbp-0x28]这是我的输出。 enter image description heremov rsi, qword ptr[rbp-0x30] 相当于你的 mov rdx,[rbp-0x28]我认为您遵循 Microsoft 的 x64 ABI 调用约定,因此您的第一个参数是通过 rcx 传递的。但在该指令之前它是 mov [rbp-0x30], rdi我相信在你的情况下将是 mov [rbp-0x28],rcx

在下一条指令中mov rdi,rcx我又断点了。在这里,我阅读了 rsi 内容,在您的情况下将是 rdx。它打印了rsi = 0x00007ffeefbff94a在那个特定的内存地址,我得到了结果“AAAAAAA”enter image description here接下来我读取寄存器 rbp 并打印 rbp = 0x00007ffeefbff740然后我读取 0x0x00007ffeefbff740-0x30 的内存地址(在您的情况下为 -0x28),即 0x0x7ffeefbff710 ,这里它与 rsi enter image description here 中存储的地址相同。0x7ffeebff94a(小端)。我们知道它指向字符串“AAAAAAA”,所以我假设您在 RBP-0x28 中期望的是字符串本身。它应该是保存指向字符串的指针的地址。还要确保正确进行偏移。请按照下列步骤操作:

lea rax 处的断点,[rbp-0x20]

检查 rdx 的值,查看该地址处的内存,它应该会为您提供字符串。

然后检查rbp的值。从中减去 0x28。查看偏移处的内存。

这应该给你 rdx 的值。它应该依次指向您要查找的字符串。

关于c - 汇编mov指令输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57838158/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com