我试图在x86_64上使用ptrace跳过进程的堆栈帧。根据我的理解,每个RBP保存前一帧的RBP的地址,我试图在代码中遵循相同的。通话顺序是:
static int pointer_size = sizeof(void*);
rbp_val = ptrace(PTRACE_PEEKUSER, pid, RBP * pointer_size, 0);
prev_rbp = ptrace(PTRACE_PEEKDATA, pid, rbp_val, 0);
通常我将rbp_val设为0x4,第二次调用ptrace失败,错误为5(输入/输出错误)。 我错过了什么?