【发布时间】:2022-01-23 03:16:41
【问题描述】:
我有一个名为“debugger”的小型命令行应用程序,它充当进程 A 的调试器。现在这个应用程序可以在 x86 和 x64 上正常工作。现在我必须将这个“调试器”迁移到 ARM64 架构。这个调试器非常简单地做的是附加断点,也就是将指令 int3(0xcc) 写入它在进程 A 的映射文件中找到的函数的开头。现在,每当我尝试通过这个“调试器”应用程序运行我的应用程序时,我都能够设置断点,但应用程序不断获得“access_violation”并剧烈崩溃。我的预感是,对于 ARM64 架构,我写到函数开头的指令“0xcc”会导致 access_violation。我尝试使用指令“0x150”、“0xF000”而不是“0xcc”。更多信息请参考我的earlier question。
为了确保这是我想要添加一条不会以任何方式影响代码执行的指令的唯一问题,以便我可以确认唯一的问题是我在调试器代码中作为断点编写的指令。请帮助我缩小我的问题范围,并提供所有答案的链接。
【问题讨论】:
-
0xCC 是 x86 指令。为什么你会期望它是work on ARM?
-
@AlanBirtles 使用 armconverter.com/?code=NOP%0A 将 NOP 转换为十六进制,仍然获得相同的 access_violation。我如何确保十六进制转换完全正确,因为这样我将完全专注于其他事情。
-
@J... 正确,我知道这不是正确的指令,但其他指令也给了我同样的错误,所以我试图在这里隔离问题。
-
如果你用一条什么都不做的指令覆盖了代码中的一条指令——它可能会做*某事*——,我只会崩溃。您必须使用导致陷阱的合法 arm64 指令进行覆盖,因此原始指令可以被陷阱处理程序替换以允许继续执行。
标签: assembly visual-studio-debugging access-violation arm64