0

我试图让 read 在程序中返回 0(while 循环中的那个),然后正确执行第二次读取,这可以完美地手动运行,使用CTRL-D. 但是我想在 pwntools ( p = process("./test")) 中做同样的事情。我已经尝试发送 eof 字符,p.sendline("\x04")但没有成功。该程序接受了类似的输入"\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;
}

我希望任何人都可以帮助我。

4

1 回答 1

0

这取决于连接的类型。

如果是管道或套接字,除了关闭连接没有别的办法。

但是如果是伪终端(可以在 pwntools 中使用 强制执行process(..., stdin=PTY)),可以使用操作系统的终端行编辑功能(termios(3)规范模式的说明见),可以用p.send(b'\4')(即 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()
于 2021-03-24T20:03:42.680 回答