【问题标题】:C ptrace breakpointsC ptrace 断点
【发布时间】:2020-04-30 17:12:28
【问题描述】:

我一直在使用this 教程尝试在C 中设置调试器。我设置了一个测试程序,如下所示:

#include<stdio.h>

int main()
{
    printf("BEFORE");

    printf("AFTER"); 
}

主函数的反汇编如下所示:

但如果我尝试使用下面的代码在 0x64a 处打印数据,我会得到输出 ffffffffffffffff

long address = 0x64a;
long data = ptrace(PTRACE_PEEKTEXT, status, (void *) address, NULL);
printf("%lx", data);

另外,这是我附加测试程序的代码:

char* args[] = {"test", NULL};
if(pid == 0)
{
    ptrace(PTRACE_TRACEME, 0, NULL, NULL);
    execve("./test", args, NULL);
    //execl("./test", "test", NULL);
}

【问题讨论】:

    标签: c debugging ptrace


    【解决方案1】:

    您有一个与位置无关的可执行文件。因此,ASLR 使其从内存中的随机地址开始。在ptrace 期间检查rip 寄存器并从那里转储代码,而不是从可执行文件中的地址转储。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-12
    • 1970-01-01
    • 1970-01-01
    • 2015-03-10
    • 1970-01-01
    • 2012-07-02
    相关资源
    最近更新 更多