15 lines
2.6 KiB
Python
15 lines
2.6 KiB
Python
"""Build-specific x86 call stubs for WXWork. Generated offline; no assembler dependency."""
|
|
import struct
|
|
|
|
STUBS = {'send': ('55535657c7050000104a01000000813d0101104a0303104a0f859b000000813d0202104a0404104a0f858b000000813d0505104a0606104a757f680707104a680808104ab80909104affd083c4088b1d0808104a85db746d837b50027573c7050000104a02000000680808104a680b0b104a680c0c104ab90505104ab80a0a104affd0c7050000104a03000000b90808104ab80d0d104affd0c7050808104a00000000c7050e0e104a00000000c7050000104a04000000eb42c7050000104a5a000000eb36c7050000104a5b000000eb2ab90808104ab80d0d104affd0c7050808104a00000000c7050e0e104a00000000c7050000104a5c00000031c05f5e5b5dc20400', [('state', 6), ('state', 96), ('state', 133), ('state', 175), ('state', 187), ('state', 199), ('state', 243), ('identity', 16), ('identity_hi', 32), ('account_lo', 20), ('account_hi', 36), ('service', 48), ('service', 120), ('vtable', 52), ('text', 59), ('message', 64), ('message', 80), ('message', 105), ('message', 142), ('message', 155), ('message', 210), ('message', 223), ('factory', 69), ('send', 125), ('conversation', 110), ('promise', 115), ('release', 147), ('release', 215), ('message_control', 165), ('message_control', 233)]), 'cleanup': ('55535657b90c0c104ab80d0d104affd031c05f5e5b5dc20400', [('promise', 5), ('release', 10)])}
|
|
|
|
def relocate(kind, values):
|
|
template, fields = STUBS[kind]
|
|
code = bytearray.fromhex(template)
|
|
for name, offset in fields:
|
|
struct.pack_into("<I", code, offset, values[name])
|
|
return bytes(code)
|
|
|
|
# 5.0.11 adds a const optional<string>& parameter (callee ret 16).
|
|
STUBS["send_with_options"] = ('55535657c7050000104a01000000813d0101104a0303104a0f85a4000000813d0202104a0404104a0f8594000000813d0505104a0606104a0f8584000000680707104a680808104ab80909104affd083c4088b1d0808104a85db7472837b50027578c7050000104a02000000680f0f104a680808104a680b0b104a680c0c104ab90505104ab80a0a104affd0c7050000104a03000000b90808104ab80d0d104affd0c7050808104a00000000c7050e0e104a00000000c7050000104a04000000eb42c7050000104a5a000000eb36c7050000104a5b000000eb2ab90808104ab80d0d104affd0c7050808104a00000000c7050e0e104a00000000c7050000104a5c00000031c05f5e5b5dc20400', [('state', 6), ('state', 100), ('state', 142), ('state', 184), ('state', 196), ('state', 208), ('state', 252), ('identity', 16), ('identity_hi', 32), ('account_lo', 20), ('account_hi', 36), ('service', 48), ('service', 129), ('vtable', 52), ('text', 63), ('message', 68), ('message', 84), ('message', 114), ('message', 151), ('message', 164), ('message', 219), ('message', 232), ('factory', 73), ('send', 134), ('conversation', 119), ('promise', 124), ('release', 156), ('release', 224), ('message_control', 174), ('message_control', 242), ('options', 109)])
|