Advertisement
Ayuto

Hooking a function with a custom calling convention

Apr 26th, 2015
328
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.03 KB | None | 0 0
  1. import memory
  2.  
  3. from memory import DataType
  4. from memory.hooks import PreHook
  5.  
  6. from _memory import Register
  7. from _memory import CallingConvention
  8.  
  9.  
  10. class x86MsCCSPlayerDeafen(CallingConvention):
  11.     def get_registers(self):
  12.         return [Register.ECX, Register.XMM1]
  13.  
  14.     def get_pop_size(self):
  15.         return 0
  16.  
  17.     def get_argument_ptr(self, index, registers):
  18.         if index == 0:
  19.             return registers.ecx.address
  20.         elif index == 1:
  21.             return registers.xmm1.address
  22.  
  23.         raise IndexError
  24.  
  25.     def argument_ptr_changed(self, index, registers):
  26.         pass
  27.  
  28.     def get_return_ptr(self, registers):
  29.         pass
  30.  
  31.     def return_ptr_changed(self, registers, return_ptr):
  32.         pass
  33.  
  34.  
  35. server = memory.find_binary('server')
  36.  
  37. deafen = server[b'\x55\x8B\xEC\x83\xEC\x28\x56\x57\x8B\xF9\xF3\x0F\x11\x4D\xFC'].make_function(
  38.     x86MsCCSPlayerDeafen,
  39.     (DataType.POINTER, DataType.FLOAT),
  40.     DataType.VOID
  41. )
  42.  
  43. @PreHook(deafen)
  44. def my_hook(args):
  45.     print(tuple(args))
  46.     return 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement