小编Jul*_*ien的帖子

如何设置dr7寄存器的值以便在x86-64上创建硬件断点?

我正在开发一个允许ptrace()在OCaml语言中使用的“绑定”库,但我的问题仅涉及ptrace()

因此,现在,我正在尝试编写一小段代码,以便通过使用ptrace()以下命令在Linux x86-64上创建一个简单的硬件断点:

#define DR_OFFSET(x) (((struct user *)0)->u_debugreg + x)

typedef struct {
    int           dr0_local:    1;
    int           dr0_global:   1;
    int           dr1_local:    1;
    int           dr1_global:   1;
    int           dr2_local:    1;
    int           dr2_global:   1;
    int           dr3_local:    1;
    int           dr3_global:   1;
    int           reserverd:    8;
    break_flag_t  dr0_break:    2;
    data_length_t dr0_len:      2;
    break_flag_t  dr1_break:    2;
    data_length_t dr1_len:      2;
    break_flag_t  dr2_break:    2;
    data_length_t dr2_len:      2;
    break_flag_t  dr3_break:    2;
    data_length_t dr3_len:      2;
} dr7_t;

CAMLprim value ptrace_breakpoint(value ml_pid, value ml_addr)
{
    CAMLparam2(ml_pid, …
Run Code Online (Sandbox Code Playgroud)

c linux ptrace breakpoints x86-64

2
推荐指数
1
解决办法
1067
查看次数

标签 统计

breakpoints ×1

c ×1

linux ×1

ptrace ×1

x86-64 ×1