我试图让read在程序中返回0( while循环中的那个),然后正确地执行第二个read,这在CTRL-D中非常有效。然而,我想在pwntools (p = process("./test"))中做同样的事情。我已经尝试用p.sendline("\x04")发送eof字符,但不起作用。该程序接受类似于"\x0a\x04"的输入。p.send()不会改变任何东西。这是我的测试程序:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void) {
char buf[24];
while(1) {
if(read(0,buf,16)==0) {
break;
}
}
read(0,buf,16);
return 0;
}我希望任何人都能帮助我。
发布于 2021-03-25 04:03:43
这取决于连接的类型。
如果是管道或插座,则除了关闭连接之外,没有其他方法。
但是如果它是一个伪终端(您可以使用process(..., stdin=PTY)在pwntools中强制执行它),您可以使用操作系统的终端行编辑功能(有关规范模式的描述,请参阅termios(3) ),您可以向它发送一个带有p.send(b'\4')的EOF标记(即Ctrl+D)。
因此,您的最终代码应该如下所示:
from pwn import *
p = process('./test', stdin=PTY)
p.send(b'\4') # mind the b before binary data literal (text is not bytes)
# then something else maybe
p.interactive()https://stackoverflow.com/questions/66011026
复制相似问题