我正在将afl fuzz(一个C应用程序)重写为Python。因为我对它的内部工作原理没有足够的了解,所以我想尽可能地复制它的功能。在
我正在尝试运行一个例程的功能测试,该例程派生Python解释器,运行execve
,如果失败,则通过返回42向调用方报告失败。该测试在unittest外部运行良好,但在放入它时失败:
#!/usr/bin/env python
import os
import sys
import unittest
def run_test():
x = os.fork()
if not x:
sys.exit(42)
waitpid_result, status = os.waitpid(x, os.WUNTRACED)
print(os.WEXITSTATUS(status))
class ForkFunctionalTest(unittest.TestCase):
def test_exercise_fork(self):
run_test()
if __name__ == '__main__':
print('Expecting "42" as output:')
run_test()
print('\nAnd here goes unexpected SystemExit error:')
unittest.main()
以下是失败的原因:
^{pr2}$有没有办法让unittest在不改变run_test的情况下使用这个函数?我试过操作系统退出而不是系统出口(),但它使程序在这两个进程中死亡。在
但事实证明,我需要在我的操作系统中模拟它os.fork操作系统. 愚蠢的错误。在
sys.exit()
引发SystemExit类异常,如果未捕获到该异常,则退出程序。您可以尝试捕捉异常:相关问题 更多 >
编程相关推荐