mirror of
https://github.com/qilingframework/qiling.git
synced 2026-10-12 02:21:40 +00:00
62 lines
1.9 KiB
Python
62 lines
1.9 KiB
Python
#!/usr/bin/env python3
|
|
#
|
|
# Cross Platform and Multi Architecture Advanced Binary Emulation Framework
|
|
#
|
|
|
|
import os, platform, sys, unittest
|
|
from collections import defaultdict
|
|
|
|
sys.path.append("..")
|
|
from qiling import Qiling
|
|
from qiling.os.mapper import QlFsMappedObject
|
|
from qiling.os.posix import syscall
|
|
|
|
|
|
class Fake_maps(QlFsMappedObject):
|
|
def __init__(self, ql):
|
|
self.ql = ql
|
|
def read(self, size):
|
|
stack = next(filter(lambda x : x[3]=='[stack]', self.ql.mem.map_info))
|
|
return ('%x-%x %s\n' % (stack[0], stack[1], stack[3])).encode()
|
|
def fstat(self):
|
|
return defaultdict(int)
|
|
def close(self):
|
|
return 0
|
|
|
|
def my_syscall_close(ql, fd):
|
|
if fd in [0, 1, 2]:
|
|
return 0
|
|
return syscall.ql_syscall_close(ql, fd)
|
|
|
|
|
|
class TestAndroid(unittest.TestCase):
|
|
@unittest.skipUnless(platform.system() == 'Linux', 'run only on Linux')
|
|
def test_android_arm64(self):
|
|
|
|
test_binary = "../examples/rootfs/arm64_android6.0/bin/arm64_android_jniart"
|
|
rootfs = "../examples/rootfs/arm64_android6.0"
|
|
env = {"ANDROID_DATA":"/data", "ANDROID_ROOT":"/system"}
|
|
|
|
ql = Qiling([test_binary], rootfs, env, multithread=True)
|
|
ql.os.set_syscall("close", my_syscall_close)
|
|
ql.add_fs_mapper("/proc/self/task/2000/maps", Fake_maps(ql))
|
|
ql.run()
|
|
del ql
|
|
|
|
|
|
#@unittest.skipUnless(platform.system() == 'Linux', 'run only on Linux')
|
|
#def test_android_arm(self):
|
|
# test_binary = "../examples/rootfs/arm64_android6.0/bin/arm_android_jniart"
|
|
# rootfs = "../examples/rootfs/arm64_android6.0"
|
|
# env = {"ANDROID_DATA":"/data", "ANDROID_ROOT":"/system"}
|
|
|
|
# ql = Qiling([test_binary], rootfs, env, multithread=True)
|
|
# ql.os.set_syscall("close", my_syscall_close)
|
|
# ql.add_fs_mapper("/proc/self/task/2000/maps", Fake_maps(ql))
|
|
# ql.run()
|
|
# del ql
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|