Skip to content

Commit bfd0d4e

Browse files
committed
Merge branch 'dev' of github.com:qilingframework/qiling into dev
2 parents c2105bb + ff89044 commit bfd0d4e

File tree

3 files changed

+64
-34
lines changed

3 files changed

+64
-34
lines changed

qiling/os/posix/posix.py

Lines changed: 28 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -245,49 +245,47 @@ def load_syscall(self):
245245
self.utils.syscalls_counter += 1
246246

247247
try:
248-
ret = 0
249248

250249
if onenter_hook is not None:
251-
ret = onenter_hook(self.ql, *self.get_syscall_args())
250+
onenter_hook(self.ql, *self.get_syscall_args())
252251

253-
if type(ret) is not int or (ret & QL_CALL_BLOCK) == 0:
254-
syscall_basename = syscall_hook.__name__[len(SYSCALL_PREF):]
255-
args = []
252+
syscall_basename = syscall_hook.__name__[len(SYSCALL_PREF):]
253+
args = []
256254

257-
# ignore first arg, which is 'ql'
258-
arg_names = tuple(signature(syscall_hook).parameters.values())[1:]
259-
arg_values = self.get_syscall_args()
255+
# ignore first arg, which is 'ql'
256+
arg_names = tuple(signature(syscall_hook).parameters.values())[1:]
257+
arg_values = self.get_syscall_args()
260258

261-
for name, value in zip(arg_names, arg_values):
262-
name = str(name)
259+
for name, value in zip(arg_names, arg_values):
260+
name = str(name)
263261

264-
# ignore python special args
265-
if name in ('*args', '**kw', '**kwargs'):
266-
continue
262+
# ignore python special args
263+
if name in ('*args', '**kw', '**kwargs'):
264+
continue
267265

268-
# cut the first part of the arg if it is of form fstatat64_fd
269-
if name.startswith(f'{syscall_basename}_'):
270-
name = name.partition('_')[-1]
266+
# cut the first part of the arg if it is of form fstatat64_fd
267+
if name.startswith(f'{syscall_basename}_'):
268+
name = name.partition('_')[-1]
271269

272-
args.append(f'{name} = {value:#x}')
270+
args.append(f'{name} = {value:#x}')
273271

274-
faddr = f'{self.ql.reg.arch_pc:#0{self.ql.archbit // 4 + 2}x}: ' if self.ql.verbose >= QL_VERBOSE.DEBUG else ''
275-
fargs = ', '.join(args)
272+
faddr = f'{self.ql.reg.arch_pc:#0{self.ql.archbit // 4 + 2}x}: ' if self.ql.verbose >= QL_VERBOSE.DEBUG else ''
273+
fargs = ', '.join(args)
276274

277-
log = f'{faddr}{syscall_basename}({fargs})'
275+
log = f'{faddr}{syscall_basename}({fargs})'
278276

279-
if self.ql.verbose >= QL_VERBOSE.DEBUG:
280-
self.ql.log.debug(log)
281-
else:
282-
self.ql.log.info(log)
277+
if self.ql.verbose >= QL_VERBOSE.DEBUG:
278+
self.ql.log.debug(log)
279+
else:
280+
self.ql.log.info(log)
283281

284-
ret = syscall_hook(self.ql, *arg_values)
282+
ret = syscall_hook(self.ql, *arg_values)
285283

286-
if ret is not None and type(ret) is int:
287-
# each name has a list of calls, we want the last one and we want to update the return value
288-
self.utils.syscalls[syscall_name][-1]["result"] = ret
289-
ret = self.set_syscall_return(ret)
290-
self.ql.log.debug(f'{syscall_basename}() = {QlOsPosix.getNameFromErrorCode(ret)}')
284+
if ret is not None and type(ret) is int:
285+
# each name has a list of calls, we want the last one and we want to update the return value
286+
self.utils.syscalls[syscall_name][-1]["result"] = ret
287+
ret = self.set_syscall_return(ret)
288+
self.ql.log.debug(f'{syscall_basename}() = {QlOsPosix.getNameFromErrorCode(ret)}')
291289

292290
if onexit_hook is not None:
293291
onexit_hook(self.ql, *self.get_syscall_args())

qiling/os/qnx/syscall.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,15 @@
33
# Cross Platform and Multi Architecture Advanced Binary Emulation Framework
44
#
55

6-
from time import time_ns
6+
try:
7+
from time import time_ns
8+
except ImportError:
9+
from datetime import datetime
10+
# For compatibility with Python 3.6
11+
def time_ns():
12+
now = datetime.now()
13+
return int(now.timestamp() * 1e9)
14+
715
from binascii import hexlify
816

917
from qiling.utils import ql_get_module_function

qiling/os/windows/dlls/kernel32/winbase.py

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -250,9 +250,8 @@ def hook_lstrlenW(ql: Qiling, address: int, params):
250250
# );
251251
@winsdkapi(cc=STDCALL, dllname=dllname)
252252
def hook_lstrcmpiW(ql, address, params):
253-
# Copy String2 into String
254-
str1 = params["lpString1"]
255-
str2 = params["lpString2"]
253+
str1 = params["lpString1"].lower()
254+
str2 = params["lpString2"].lower()
256255
if str1 == str2:
257256
return 0
258257
elif str1 > str2:
@@ -270,6 +269,31 @@ def hook_lstrcmpiA(ql, address, params):
270269
return hook_lstrcmpiW.__wrapped__(ql, address, params)
271270

272271

272+
# int lstrcmpW(
273+
# LPCWSTR lpString1,
274+
# LPCWSTR lpString2
275+
# );
276+
@winsdkapi(cc=STDCALL, dllname=dllname)
277+
def hook_lstrcmpW(ql, address, params):
278+
str1 = params["lpString1"]
279+
str2 = params["lpString2"]
280+
if str1 == str2:
281+
return 0
282+
elif str1 > str2:
283+
return 1
284+
else:
285+
return -1
286+
287+
288+
# int lstrcmpA(
289+
# LPCSTR lpString1,
290+
# LPCSTR lpString2
291+
# );
292+
@winsdkapi(cc=STDCALL, dllname=dllname)
293+
def hook_lstrcmpA(ql, address, params):
294+
return hook_lstrcmpW.__wrapped__(ql, address, params)
295+
296+
273297
# HRSRC FindResourceA(
274298
# HMODULE hModule,
275299
# LPCSTR lpName,

0 commit comments

Comments
 (0)