C ptrace断点

问题描述 投票:2回答:1

我一直在使用 这个 我设置了一个测试程序,它的样子是这样的。

#include<stdio.h>

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

    printf("AFTER"); 
}

主函数的分解图是这样的: enter image description here

但如果我尝试使用下面的代码来打印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个回答
2
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.