Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 尝试将返回的HMODULE强制转换为Python C-Types中声明的IMAGE\u DOS\u头结构_Python 3.x_Ctypes - Fatal编程技术网

Python 3.x 尝试将返回的HMODULE强制转换为Python C-Types中声明的IMAGE\u DOS\u头结构

Python 3.x 尝试将返回的HMODULE强制转换为Python C-Types中声明的IMAGE\u DOS\u头结构,python-3.x,ctypes,Python 3.x,Ctypes,我正在尝试编写一些python代码(使用ctypes),最终将允许我找到IAT。我熟悉PE结构,但从来没有编写过代码来通过数据结构来实现它。我一直在做一些研究,发现了C++中的一些代码,这些代码允许我得到基本图像的句柄,这样我就可以开始通过数据结构去解释我的方式。我一直在用这篇文章作为参考。因此,我试图用这篇文章来获得IMAGE_DOS_头的句柄,我用pythonc-types写这篇文章,下面是我使用的代码 class IMAGE_DOS_HEADER(ctypes.Structure):

我正在尝试编写一些python代码(使用ctypes),最终将允许我找到IAT。我熟悉PE结构,但从来没有编写过代码来通过数据结构来实现它。我一直在做一些研究,发现了C++中的一些代码,这些代码允许我得到基本图像的句柄,这样我就可以开始通过数据结构去解释我的方式。我一直在用这篇文章作为参考。因此,我试图用这篇文章来获得IMAGE_DOS_头的句柄,我用pythonc-types写这篇文章,下面是我使用的代码

class IMAGE_DOS_HEADER(ctypes.Structure):
    _fields_ = [
            ("e_magic",    WORD),
            ("e_cblp",     WORD),
            ("e_cp",       WORD),
            ("e_crlc",     WORD),
            ("e_cparhdr",  WORD),
            ("e_minalloc", WORD),
            ("e_maxalloc", WORD),
            ("e_ss",       WORD),
            ("e_sp",       WORD),
            ("e_csum",     WORD),
            ("e_ip",       WORD),
            ("e_cs",       WORD),
            ("e_lfarlc",   WORD),
            ("e_ovno",     WORD),
            ("e_res",      WORD * 4),
            ("e_oemid",    WORD),
            ("e_oeminfo",  WORD),
            ("e_res2",     WORD * 10),
            ("e_lfanew",   WORD),
            ]

kernel32.GetModuleHandleW.restype = wintypes.HMODULE
kernel32.GetModuleHandleW.argtypes = [wintypes.LPCWSTR]

image_dos_header = IMAGE_DOS_HEADER()

hModule = kernel32.GetModuleHandleW(0)

if hModule == 0:
   hModule_Error = ctypes.WinError(ctypes.get_last_error())
   print("[-] error getting the hModule " + hModule)
   system.exit(1)

#Trying to cast the handle to image_dos_header struct
image_dos_header = ctypes.byref(hModule)                 #Error is here
当我尝试这段代码时,我得到一个错误,“byref()参数必须是ctypes实例,而不是'int'”。我一直在做一些研究,尝试了一些事情,但似乎找不到答案。我以前使用过“byref”来处理使用c-types声明的其他结构


另一个问题是,我能够从GetModuleHandleW调用返回我认为有效的句柄。我假设这就是地址,如果是的话,我可以开始处理这个IMAGE\u DOS\u头结构,而不必创建新的“IMAGE\u DOS\u头”结构,然后将返回的句柄强制转换为它吗?然后通过我的努力去IAT?任何帮助都是对我尝试使用的IAT方法的感谢或反馈。谢谢

所以我发现我真正想做的是将GetModuleHandleW调用返回的int(句柄地址)强制转换为指向结构(IMAGE\u DOS\u头)的指针。下面是我用来做这件事的代码。希望它能帮助别人

#In C++ this would like this - 
#IMAGE_DOS_HEADER* pDOSHeader = (IMAGE_DOS_HEADER*)hModule;

pDOSHeader = ctypes.POINTER(IMAGE_DOS_HEADER)
pDOSHeader = ctypes.cast(hModule, ctypes.POINTER(IMAGE_DOS_HEADER)).contents
外部参照: