gpt4 book ai didi

macos - 如何从 OSX 的用户空间写入 x86 调试寄存器?

转载 作者:行者123 更新时间:2023-12-04 06:55:36 25 4
gpt4 key购买 nike

我想在我的 OSX 用户空间程序中使用 x86 规范 (DR0-7) 中定义的调试 MSR。不幸的是,这些需要 CPL == 0(又名环 0)。我浏览了 OSX 系统调用,但 kernel_debug 除外。没有什么能真正跳出来作为访问这些的一种方式。

可能它们只能通过一些更高级别的接口(interface)使用,例如 kernel_debug。 ,但我不清楚是否是这种情况,或者我只是没有找到找到他们的魔法调用。

我的最终目标是访问这些寄存器的功能,而不是寄存器本身。有没有人知道如何做设置硬件断点之类的事情?

最佳答案

原来thread_get_state/thread_set_state是答案。

#include <mach/mach_types.h>

thread_t target = get_target_thread();
struct x86_debug_state dr;
mach_msg_type_number_t dr_count = x86_DEBUG_STATE_COUNT;

kern_return_t rc = thread_get_state(target, x86_DEBUG_STATE, &dr, &dr_count);
printf("DR0: 0x%08x\n", dr.uds.ds32.__dr0);
printf("DR1: 0x%08x\n", dr.uds.ds32.__dr1);
printf("DR2: 0x%08x\n", dr.uds.ds32.__dr2);
printf("DR3: 0x%08x\n", dr.uds.ds32.__dr3);
printf("DR4: 0x%08x\n", dr.uds.ds32.__dr4);
printf("DR5: 0x%08x\n", dr.uds.ds32.__dr5);
printf("DR6: 0x%08x\n", dr.uds.ds32.__dr6);
printf("DR7: 0x%08x\n", dr.uds.ds32.__dr7);

关于macos - 如何从 OSX 的用户空间写入 x86 调试寄存器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2604439/

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