我一直在使用this教程来尝试在C中设置一个调试器。我已经设置了一个测试程序,如下所示:
#include<stdio.h>
int main()
{
printf("BEFORE");
printf("AFTER");
}main函数的dissasembly如下所示:

但是,如果我尝试使用下面的代码在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);
}发布于 2020-05-01 07:49:35
你有一个与位置无关的可执行文件。因此,ASLR使其从内存中的随机地址开始。在ptrace期间检查rip寄存器,并从那里转储代码,而不是从可执行文件的地址转储。
https://stackoverflow.com/questions/61529044
复制相似问题