从gdb调用read

从gdb调用read,gdb,Gdb,我想在调试时读取标准输出,但我一直返回-1。以下是我的gdb会话的一部分: (gdb) call fflush(stdout) $16 = 0 (gdb) p/x malloc(50) $17 = 0xb7fff2e0 (gdb) call read(stdout, (void *) 0xb7fff2e0, 49) $19 = -1 我还假设,如果标准输出文件中没有任何内容,调用read应该返回零。我会从stderr中读取更多信息,但这当然也会失败。您正在调用read,它需要一个文件描述符,

我想在调试时读取标准输出,但我一直返回-1。以下是我的gdb会话的一部分:

(gdb) call fflush(stdout)
$16 = 0
(gdb) p/x malloc(50) 
$17 = 0xb7fff2e0
(gdb) call read(stdout, (void *) 0xb7fff2e0, 49)
$19 = -1

我还假设,如果标准输出文件中没有任何内容,调用read应该返回零。我会从stderr中读取更多信息,但这当然也会失败。

您正在调用read,它需要一个文件描述符,但您正在传递一个文件*

试一试


另外,读取标准输出似乎很奇怪,而从标准输入读取则是奇怪的。您调用的是read,它需要一个文件描述符,而您传递的是一个文件*

试一试


另外,读stdout看起来很奇怪,而读stdin呢

啊,谢谢,我还以为stdout是一个文件描述符呢。我之前没有提到这一点,但在阅读之前我在stdin和stdout上调用了pipe。奇怪的是,当管道还需要文件描述符时,gdb返回了零(无错误)。感谢您发布此问题。我经常使用GDB,但老实说,我不知道如何从它调用函数。Lol。我们都学到了一些东西。我喜欢gdb Lol。我在调试一个依赖于两个执行线程的安全类的漏洞,我不知道如何在没有函数调用的情况下模拟这种交互。啊,谢谢,我实际上以为stdout是一个文件描述符。我之前没有提到这一点,但在阅读之前我在stdin和stdout上调用了pipe。奇怪的是,当管道还需要文件描述符时,gdb返回了零(无错误)。感谢您发布此问题。我经常使用GDB,但老实说,我不知道如何从它调用函数。Lol。我们都学到了一些东西。我喜欢gdb Lol。我在调试一个依赖于两个执行线程的安全类的漏洞,我不知道如何在没有函数调用的情况下模拟这种交互。
call read(0, (void *) 0xb7fff2e0, 49)