【发布时间】:2019-11-18 15:21:55
【问题描述】:
我编写了一个简单的 asm 二进制文件,它获取用户的 arg,然后使用 C func printf 将其打印在屏幕上。
所以代码编译使用:
nasm -f elf64 ...
gcc -m64 -no-pie ....
该程序运行良好。我想将它与 python 一起使用,这样做,我可以使用 subprocess.Popen(cmd) 启动它(这也很好用)
当我想捕获我的 asm 编译程序的输出以便用 python 解析它时,输出总是空的......
我试过了:
subprocess.Popen(cmd, stdout=PIPE, stderr=PIPE)
subprocess.call(...)
subprocess.run(...)
subprocess.check_output(...)
os.system(...)
os.popen(...)
无论如何,我认为我测试了所有方法......我真的不明白为什么程序在我的 python 脚本上运行良好,除非我尝试捕获输出。
如果有人有想法......,请告诉我。
asm代码是:
; nasm -f elf64 -o test.o test.asm
; gcc -m elf64 test.o -o test
extern printf
section .text
global main
main:
mov rdi, fmt
mov rsi, s_val
xor rax, rax
call printf WRT ..plt
; exit
xor rdi, rdi,
mov rax, 0x3c
syscall
section .data
s_val db 'hello world', 0
fmt db '%s',0x0a, 0
python代码是:
#!/usr/bin/python3
import subprocess
from subprocess import Popen
p = Popen(['/home/test'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
r = p.communicate()
print(r)
谢谢
【问题讨论】:
-
你应该展示你的代码。确保它实际上是在写信给
stdout或stderr。许多人误写了stdin,这恰好适用于终端。 -
使用edit link under your post 将新信息添加到您的问题中。
标签: python assembly subprocess