gpt4 book ai didi

linux - 寻找一种方法来捕获 CPUID 指令

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:01:48 25 4
gpt4 key购买 nike

我正在寻找一种巧妙的方法来捕获和摆弄 Linux 进程的 CPUID 指令。尝试使用 ptrace() 并修补进程创建的所有可执行 mmap 区域中的所有 cpuid 操作码,并用 int3 替换它们。效果不是很好,因为 CPUID 操作码字节经常作为其他较长操作码的一部分出现。

所以基本上我正在寻找某种方法,允许我不在特定内存地址上设置断点,而是在每次调用操作码时设置断点。任何人都知道如何做到这一点?

最佳答案

一般来说,在任意 x86 代码上执行此操作并捕获所有极端情况的唯一方法是:

  • 单步执行并在执行前检查每条指令(PTRACE_SINGLESTEP,见下文);或
  • 完全模拟 x86 指令集。

第一种方式可能更好。

(尝试使用单步反编译非即时操作码是行不通的,因为它不会捕获自修改代码或跳转到另一条指令中间的情况)。

要实现单步执行方法,每次跟踪进程停止时,您将使用PTRACE_GETREGS 获取 child 的寄存器,然后使用 child 的%eip 寄存器值作为传递给 PTRACE_PEEKTEXT 的地址,获取下一个要执行的单词。检查该单词以查看它是否是 CPUID 指令 - 如果是,则通过调整子寄存器集(包括将 %eip 推进到 CPUID 指令之后)来模拟该指令。然后调用 PTRACE_SINGLESTEP 让进程继续。

关于linux - 寻找一种方法来捕获 CPUID 指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1440280/

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