这可能更像是一个ctypes
问题而不是一个pydbg
问题,但我仍然不明白为什么结果与它们的方式不一致。
我有一个exit_hook
关于LoadLibraryA
using的集合pydbg
,它的utils.hook_container
类是这样的:
def exit_LoadLibraryA(dbg, args, ret):
libname = c_char_p(args[0])
# or: libname = ctypes.cast(args[0], ctypes.c_char_p)
print "LoadLibraryA(%s) -> %08X" % (str(libname), ret)
return DBG_CONTINUE
不幸的是,输出不一致。虽然一些值被转换为(并显示为)字符串,但其他一些值被显示为如下数字:
LoadLibraryA(c_char_p(2007516492)) -> 7C800000
LoadLibraryA(c_char_p(17426164)) -> 77DD0000
LoadLibraryA(c_char_p(17426164)) -> 76C30000
LoadLibraryA(c_char_p('UxTheme.dll')) -> 5AD70000
LoadLibraryA(c_char_p('IMM32.dll')) -> 76390000
LoadLibraryA(c_char_p('COMCTL32.dll')) -> 773D0000
LoadLibraryA(c_char_p('Secur32.dll')) -> 77FE0000
LoadLibraryA(c_char_p(1033757216)) -> 7C9C0000
我想要的是可靠地将char*
(以及后来的wchar_t*
of LoadLibraryW
)转换为 Python 字符串以输出它。