gpt4 book ai didi

python - ctypes 调用 GetProcAddress() 失败,错误代码为 127,但 win32api.GetProcAddress 成功

转载 作者:太空宇宙 更新时间:2023-11-04 01:06:20 26 4
gpt4 key购买 nike

当我通过 win32api 调用 GetProcAddress() 时,我成功获得了句柄,但 ctypes 没有。

代码是:

from ctypes import windll
import win32api
KERNEL32 = windll.kernel32
h_kernel32 = KERNEL32.GetModuleHandleW('kernel32.dll')
print(hex(h_kernel32))

h_loadlib1=win32api.GetProcAddress(h_kernel32,'LoadLibraryW')
print(hex(h_loadlib1))
if not h_loadlib1:
print("NtCreateThreadEx Failed:",win32api.GetLastError())

h_loadlib2 = KERNEL32.GetProcAddress(h_kernel32,'LoadLibraryW')
print(hex(h_loadlib2))
if not h_loadlib2:
print("NtCreateThreadEx Failed:",win32api.GetLastError())

输出:

0x77250000  
0x77266f80
0x0
NtCreateThreadEx Failed: 127

系统信息:
windows7 64位,python 3.43

最佳答案

您需要使用 char 字符串而不是 python 3.x 提供的默认 Unicode 字符串,如 GetProcAddress 所提示的那样文档(第二个参数是 LPCSTR不是 LPCTSTRLPCWSTR):

h_loadlib2 = KERNEL32.GetProcAddress(h_kernel32,'LoadLibraryW'.encode(encoding='ascii'))

或者,您可以传递一个字节:

h_loadlib2 = KERNEL32.GetProcAddress(h_kernel32, b'LoadLibraryW')

注意:以上代码不适用于 python 64 位解释器(64 位模块句柄的最重要的 32 位为零)。在这种情况下,您需要使用 argtypesrestype 作为 explained in the tutorial (例如通过定义 64 位 HMODULE 类型)。

关于python - ctypes 调用 GetProcAddress() 失败,错误代码为 127,但 win32api.GetProcAddress 成功,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30194374/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com