core: put all hook api next to each other

This commit is contained in:
naq
2019-11-12 05:24:44 +08:00
parent d09063e65d
commit 5b42e584cc
+57 -57
View File
@@ -286,6 +286,63 @@ class Qiling:
self.uc.hook_add(UC_HOOK_INSN, callback, user_data, begin, end, arg1)
# a convenient API to set callback for a single address
def hook_address(self, callback, address, user_data = None):
def _callback(uc, _addr, _size, pack_data):
# unpack what we packed for hook_add()
user_data, callback = pack_data
if user_data:
callback(self, user_data)
else:
# callback does not require user_data
callback(self)
# pack user_data & callback for wrapper _callback
self.uc.hook_add(UC_HOOK_CODE, _callback, (user_data, callback), address, address)
def hook_mem_read(self, callback, user_data=None, begin=1, end=0):
def _callback(uc, access, addr, size, value, pack_data):
# unpack what we packed for hook_add()
user_data, callback = pack_data
if user_data:
callback(self, addr, size, value, user_data)
else:
# callback does not require user_data
callback(self, addr, size, value)
# pack user_data & callback for wrapper _callback
self.uc.hook_add(UC_HOOK_MEM_READ, _callback, (user_data, callback), begin, end)
def hook_mem_write(self, callback, user_data=None, begin=1, end=0):
def _callback(uc, access, addr, size, value, pack_data):
# unpack what we packed for hook_add()
user_data, callback = pack_data
if user_data:
callback(self, addr, size, value, user_data)
else:
# callback does not require user_data
callback(self, addr, size, value)
# pack user_data & callback for wrapper _callback
self.uc.hook_add(UC_HOOK_MEM_WRITE, _callback, (user_data, callback), begin, end)
def hook_mem_fetch(self, callback, user_data=None, begin=1, end=0):
def _callback(uc, access, addr, size, value, pack_data):
# unpack what we packed for hook_add()
user_data, callback = pack_data
if user_data:
callback(self, addr, size, value, user_data)
else:
# callback does not require user_data
callback(self, addr, size, value)
# pack user_data & callback for wrapper _callback
self.uc.hook_add(UC_HOOK_MEM_FETCH, _callback, (user_data, callback), begin, end)
def stack_push(self, data):
self.archfunc.stack_push(data)
@@ -439,63 +496,6 @@ class Qiling:
self.uc.mem_write(self.__get_lib_base(filename) + addr, code)
# a convenient API to set callback for a single address
def hook_address(self, callback, address, user_data = None):
def _callback(uc, _addr, _size, pack_data):
# unpack what we packed for hook_add()
user_data, callback = pack_data
if user_data:
callback(self, user_data)
else:
# callback does not require user_data
callback(self)
# pack user_data & callback for wrapper _callback
self.uc.hook_add(UC_HOOK_CODE, _callback, (user_data, callback), address, address)
def hook_mem_read(self, callback, user_data=None, begin=1, end=0):
def _callback(uc, access, addr, size, value, pack_data):
# unpack what we packed for hook_add()
user_data, callback = pack_data
if user_data:
callback(self, addr, size, value, user_data)
else:
# callback does not require user_data
callback(self, addr, size, value)
# pack user_data & callback for wrapper _callback
self.uc.hook_add(UC_HOOK_MEM_READ, _callback, (user_data, callback), begin, end)
def hook_mem_write(self, callback, user_data=None, begin=1, end=0):
def _callback(uc, access, addr, size, value, pack_data):
# unpack what we packed for hook_add()
user_data, callback = pack_data
if user_data:
callback(self, addr, size, value, user_data)
else:
# callback does not require user_data
callback(self, addr, size, value)
# pack user_data & callback for wrapper _callback
self.uc.hook_add(UC_HOOK_MEM_WRITE, _callback, (user_data, callback), begin, end)
def hook_mem_fetch(self, callback, user_data=None, begin=1, end=0):
def _callback(uc, access, addr, size, value, pack_data):
# unpack what we packed for hook_add()
user_data, callback = pack_data
if user_data:
callback(self, addr, size, value, user_data)
else:
# callback does not require user_data
callback(self, addr, size, value)
# pack user_data & callback for wrapper _callback
self.uc.hook_add(UC_HOOK_MEM_FETCH, _callback, (user_data, callback), begin, end)
def set_timeout(self, microseconds):
self.timeout = microseconds