Python 3.x 打开记事本,然后检测任何输出保存文件的文件路径。

Python 3.x 打开记事本,然后检测任何输出保存文件的文件路径。,python-3.x,executable,filepath,Python 3.x,Executable,Filepath,我需要从python3打开记事本,然后获取程序写入的任何文件的文件路径。这是我试过的 from subprocess import Popen,PIPE import subprocess as sp '' cmd = r'C:\path_to_notepad.exe' p = Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=PIPE, universal_newlines=True) stdout, stderr = p.communicate('\0

我需要从python3打开记事本,然后获取程序写入的任何文件的文件路径。这是我试过的

from subprocess import Popen,PIPE
import subprocess as sp

''
cmd = r'C:\path_to_notepad.exe'
p = Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=PIPE, 
universal_newlines=True)
stdout, stderr = p.communicate('\0\1\1')

print("stdout: %r\nstderr: %r" % (stdout, stderr))
if p.returncode !=0:
  raise sp.CalledProcessError(p.returncode, cmd, output = 
(stdout, stderr)
)
我不确定这是否正确。它可以打开,但我无法获得任何输出。
提前谢谢

您可以使用Intel的Pin库并钩住NtCreateFile系统调用。您可以找到系统调用号和

基本上,您可以编写一个pintool来在指令级、基本块级、函数级等注册回调。。。然后运行Pin,传入pintool和要插入的程序(在本例中为记事本)

如果钩住NtCreateFile系统调用,则每次记事本调用时都可以查看该系统调用的参数和返回值。您可以在Pin包中的strace示例中找到这方面的示例


您可能还可以找到Pin的python绑定。如果没有,您必须找到另一种与python通信的方法。

您可以使用Intel的Pin库并钩住NtCreateFile系统调用。您可以找到系统调用号和

基本上,您可以编写一个pintool来在指令级、基本块级、函数级等注册回调。。。然后运行Pin,传入pintool和要插入的程序(在本例中为记事本)

如果钩住NtCreateFile系统调用,则每次记事本调用时都可以查看该系统调用的参数和返回值。您可以在Pin包中的strace示例中找到这方面的示例


您可能还可以找到Pin的python绑定。如果没有,您将不得不找到另一种与python通信的方法。

记事本不会写入标准输出。它正在写入一个文件。也许有更好的方法可以做到这一点,但看看如何使用类似Intel的Pin来检测NtCreateFile系统调用。我如何找到该文件?所以我们将其挂起?我在找文件,我不熟悉这个。你能提供一个链接到你最喜欢的文档吗?你可以编写一个pintool,为运行它的任何二进制文件钩住NtCreateFile系统调用。然后执行类似“pin mypintool notepad.exe”的操作,每次调用NtCreateFile时都会收到回调。因此,您可以直接运行pin而不是记事本。你可以找到Windows系统调用号码,你真是太棒了。我真的很迟钝。我来看看。谢谢。记事本不会给标准输出写东西。它正在写入一个文件。也许有更好的方法可以做到这一点,但看看如何使用类似Intel的Pin来检测NtCreateFile系统调用。我如何找到该文件?所以我们将其挂起?我在找文件,我不熟悉这个。你能提供一个链接到你最喜欢的文档吗?你可以编写一个pintool,为运行它的任何二进制文件钩住NtCreateFile系统调用。然后执行类似“pin mypintool notepad.exe”的操作,每次调用NtCreateFile时都会收到回调。因此,您可以直接运行pin而不是记事本。你可以找到Windows系统调用号码,你真是太棒了。我真的很迟钝。我来看看。谢谢,显然我不允许投票。我太新了。我的道歉。@Jasong是的,我知道。一切都很好。你没有足够的代表。如果你认为答案能回答问题,你所能做的就是接受答案。显然,我不被允许投票。我太新了。我的道歉。@Jasong是的,我知道。一切都很好。你没有足够的代表。如果你认为答案能回答问题,你所能做的就是接受它。