小编meo*_*owi的帖子

C - read() 返回负数

我正在尝试编写一个简单的程序,该程序使用 ptrace() 挂钩到另一个二进制文件(setuid 二进制文件,子进程运行它),打开一个“标志”文件并打印其内容。挂钩有效,我可以使用 ptrace 命令控制二进制文件。我已经执行了 syscall open(),并得到了一个合法的文件描述符 (4)。

我的问题是系统调用 read() 失败,并返回字节的负值 -21。errno 设置为 0(成功)。这台机器是远程的(32 位),我无法在那里安装 libexplain 库。我已经在网上搜索了很多,但没有找到关于 read() 系统调用的负返回值的含义的答案(根据手册页,它唯一的错误值是 -1 ..)。

在此处输入图片说明

父母的代码:

int run_syscall(pid_t pid, int syscall_number, int first_paramter, int second_parameter, int third_paramter) {
struct user_regs_struct regs = { 0 };
ptrace(PTRACE_GETREGS, pid, 0, &regs);
regs.eip = INT80;
regs.eax = syscall_number;
regs.ebx = first_paramter;
regs.ecx = second_parameter;
regs.edx = third_paramter;
ptrace(PTRACE_SETREGS, pid, 0, &regs);
ptrace(PTRACE_SINGLESTEP, pid, 0, 0);}


// eax = 5 (open), ebx = 'flag' path, ecx = …
Run Code Online (Sandbox Code Playgroud)

c ptrace system-calls read-write

3
推荐指数
1
解决办法
156
查看次数

标签 统计

c ×1

ptrace ×1

read-write ×1

system-calls ×1