python中的子进程:未找到文件

python中的子进程:未找到文件,python,linux,Python,Linux,python中的子进程有一个问题:我的脚本打开一个ELF文件,该文件在ELF的同一目录中的文件上执行fopen()。 如果我直接打开ELF(没有“未找到文件”错误),它可以正常工作,但是从python脚本运行它时,它找不到文件。 脚本位于另一个目录中,代码如下: from pwn import * from subprocess import * proc = subprocess.Popen("/home/m876650/mission3/mission3", stdin=subproces

python中的子进程有一个问题:我的脚本打开一个ELF文件,该文件在ELF的同一目录中的文件上执行fopen()。 如果我直接打开ELF(没有“未找到文件”错误),它可以正常工作,但是从python脚本运行它时,它找不到文件。 脚本位于另一个目录中,代码如下:

from pwn import *
from subprocess import *

proc = subprocess.Popen("/home/m876650/mission3/mission3",
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)

ret_addr = 0x00000000004007d8

print proc.stdout.readline()

payload = "A"*374 + p64(ret_addr)

proc.stdin.write(payload + '\n')
这是一个安全挑战,没有违法!
谢谢你的帮助

如果进程正在加载具有相对路径的文件,则它希望当前工作目录与脚本所在的目录相同

您需要为流程设置当前工作目录,方法是将正确的目录传递到
cwd
选项中的
subprocess.Popen()


请注意,
Popen()
的第一个参数是命令及其参数,因此您希望它是一个序列。

您考虑过设置当前工作目录吗?如果我直接打开它,您的意思是什么?这是在常规shell(例如bash)或文件资源管理器上实现的,还是指从中实现的,例如使用
open
?我的意思是,如果我从常规shell打开它,它可以正常工作
proc = subprocess.Popen(
    ["/home/m876650/mission3/mission3"],
    cwd="/home/m876650/mission3",
    stdin=subprocess.PIPE,
    stdout=subprocess.PIPE,
    stderr=subprocess.PIPE)