Skip to content

Commit d33da19

Browse files
committed
sync rootfs
1 parent ffbd1c3 commit d33da19

File tree

3 files changed

+62
-10
lines changed

3 files changed

+62
-10
lines changed

examples/rootfs

qiling/os/qnx/qnx.py

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,44 @@
44
#
55

66
import os
7+
8+
from typing import Callable
79
from unicorn import UcError
810

911
from qiling.os.posix.posix import QlOsPosix
1012
from qiling.os.qnx.const import NTO_SIDE_CHANNEL, SYSMGR_PID, SYSMGR_CHID, SYSMGR_COID
1113
from qiling.os.qnx.helpers import QnxConn
1214
from qiling.os.qnx.structs import _thread_local_storage
13-
from qiling.const import QL_ARCH
15+
from qiling.cc import QlCC, intel, arm, mips, riscv
16+
from qiling.const import QL_ARCH, QL_INTERCEPT
17+
from qiling.os.fcall import QlFunctionCall
18+
from qiling.os.const import *
19+
from qiling.os.posix.const import NR_OPEN
20+
from qiling.os.posix.posix import QlOsPosix
1421

1522
class QlOsQnx(QlOsPosix):
1623
def __init__(self, ql):
1724
super(QlOsQnx, self).__init__(ql)
25+
26+
self.ql = ql
27+
28+
cc: QlCC = {
29+
QL_ARCH.X86 : intel.cdecl,
30+
QL_ARCH.X8664 : intel.amd64,
31+
QL_ARCH.ARM : arm.aarch32,
32+
QL_ARCH.ARM64 : arm.aarch64,
33+
QL_ARCH.MIPS : mips.mipso32,
34+
QL_ARCH.RISCV : riscv.riscv,
35+
QL_ARCH.RISCV64: riscv.riscv,
36+
}[ql.archtype](ql)
37+
38+
self.fcall = QlFunctionCall(ql, cc)
39+
40+
self.thread_class = None
41+
self.futexm = None
42+
self.fh = None
43+
self.function_after_load_list = []
44+
self.elf_mem_start = 0x0
1845
self.load()
1946

2047
# use counters to get free Ids
@@ -44,6 +71,20 @@ def hook_syscall(self, intno= None, int = None):
4471
return self.load_syscall()
4572

4673

74+
def add_function_hook(self, fn: str, cb: Callable, intercept: QL_INTERCEPT):
75+
self.ql.os.function_hook.add_function_hook(fn, cb, intercept)
76+
77+
78+
def register_function_after_load(self, function):
79+
if function not in self.function_after_load_list:
80+
self.function_after_load_list.append(function)
81+
82+
83+
def run_function_after_load(self):
84+
for f in self.function_after_load_list:
85+
f()
86+
87+
4788
def hook_sigtrap(self, intno= None, int = None):
4889
self.ql.log.info("Trap Found")
4990
self.emu_error()
@@ -90,6 +131,7 @@ def run(self):
90131
else:
91132
if self.ql.loader.elf_entry != self.ql.loader.entry_point:
92133
self.ql.emu_start(self.ql.loader.entry_point, self.ql.loader.elf_entry, self.ql.timeout)
134+
self.run_function_after_load()
93135
self.ql.enable_lib_patch()
94136

95137
self.ql.emu_start(self.ql.loader.elf_entry, self.exit_point, self.ql.timeout, self.ql.count)

tests/test_qnx.py

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,26 @@
1111
from qiling.const import QL_VERBOSE
1212

1313
class QNXTest(unittest.TestCase):
14-
def test_arm_qnx_static(self):
15-
env = {
16-
"FOO": "bar"
17-
}
18-
ql = Qiling(["../examples/rootfs/arm_qnx/bin/hello_static", "foo", "bar"], "../examples/rootfs/arm_qnx", env=env, verbose=QL_VERBOSE.DEBUG)
19-
ql.run()
14+
# def test_arm_qnx_static(self):
15+
# env = {
16+
# "FOO": "bar"
17+
# }
18+
# ql = Qiling(["../examples/rootfs/arm_qnx/bin/hello_static", "foo", "bar"], "../examples/rootfs/arm_qnx", env=env, verbose=QL_VERBOSE.DEBUG)
19+
# ql.run()
20+
21+
# def test_arm_qnx_sqrt(self):
22+
# ql = Qiling(["../examples/rootfs/arm_qnx/bin/hello_sqrt"], "../examples/rootfs/arm_qnx", verbose=QL_VERBOSE.DEBUG)
23+
# ql.run()
24+
25+
def test_set_api_arm_qnx_sqrt(self):
26+
def my_msg_sendv(ql: Qiling):
27+
# params = ql.os.resolve_fcall_params({'s': STRING})
28+
# print(f'puts("{params["s"]}")')
29+
print("Set API_DONE")
2030

21-
def test_arm_qnx_sqrt(self):
2231
ql = Qiling(["../examples/rootfs/arm_qnx/bin/hello_sqrt"], "../examples/rootfs/arm_qnx", verbose=QL_VERBOSE.DEBUG)
23-
ql.run()
32+
ql.set_api('msg_sendv', my_msg_sendv)
33+
ql.run()
2434

2535
if __name__ == "__main__":
2636
unittest.main()

0 commit comments

Comments
 (0)