1

我编写了一个 python 脚本来帮助我自动化我正在处理的项目。它在循环中执行 Capstone 子进程,因为当时我无法安装绑定,从二进制文件中读取 4 个字节并将其作为 Capstone 输入传递。

问题是,我的二进制数据超过 30MB,导致这个脚本运行了一段时间。所以我让它等待了几分钟,当我回来时,我的 RAM 使用率为 98%。

我已经开始使用 Capstone 绑定,但我很好奇这里出了什么问题。我的代码如下。谢谢!

import binascii
import subprocess
import sys

def main():
    if len(sys.argv) != 3:
        print(sys.argv[0] + " [binary file] [output file]")
        sys.exit(1)
    hexdata = ""
    f = open(sys.argv[1], "rb")
    if f == None:
        print("Could not open file!")
        sys.exit(1)
    data = f.read()
    f.close()
    x = 0
    out = open(sys.argv[2], "a+")
    while x < len(data):
        for y in xrange(4):
            hexdata += binascii.hexlify(data[x])
            x += 1
        popen = subprocess.Popen(["cstool", "arm64", hexdata], stdout=subprocess.PIPE, universal_newlines=True)
        for line in iter(popen.stdout.readline, ""):
            out.write(line.rstrip()[13:])
        popen.stdout.close()
        hexdata = ""
    out.close()

if __name__ == "__main__":
    main()

编辑:修复了代码。我是凭记忆把它写回来的,所以我把它弄乱了一点。

4

1 回答 1

2

您一遍又一遍地启动它后忘记添加popen.kill()或终止/终止该进程。popen.terminate()

在末尾添加popen.kill()or应该会杀死剩余的进程。popen.terminate()while

于 2018-04-09T22:44:39.717 回答