我一直在使用 这个 我设置了一个测试程序,它的样子是这样的。
#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);
}
你有一个与位置无关的可执行文件。因此,ASLR使它在内存中的一个随机地址开始。检查 rip
登记期间 ptrace
并从那里转储代码,而不是从你的可执行文件中的地址。