gpt4 book ai didi

python - 如何在 python 64bit 中枚举模块

转载 作者:太空狗 更新时间:2023-10-30 01:09:49 24 4
gpt4 key购买 nike

我有一段代码在 32 位中运行良好,我正在尝试使其在 64 位中也能运行。运行该进程时,sizeof(structure) 似乎返回无效选项,并且未针对 64 位正确填充结构。我需要做什么才能在 64 位中实现此功能?

from ctypes import *
from ctypes.wintypes import *
import sys


# const variable
# Establish rights and basic options needed for all process declartion / iteration
TH32CS_SNAPPROCESS = 2
STANDARD_RIGHTS_REQUIRED = 0x000F0000
SYNCHRONIZE = 0x00100000
PROCESS_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFF)
TH32CS_SNAPMODULE = 0x00000008
TH32CS_SNAPTHREAD = 0x00000004

#class MODULEENTRY32(Structure):
# _fields_ = [ ( 'dwSize' , DWORD ) ,
# ( 'th32ModuleID' , DWORD ),
# ( 'th32ProcessID' , DWORD ),
# ( 'GlblcntUsage' , DWORD ),
# ( 'ProccntUsage' , DWORD ) ,
# ( 'modBaseAddr' , LONG ) ,
# ( 'modBaseSize' , DWORD ) ,
# ( 'hModule' , HMODULE ) ,
# ( 'szModule' , c_char * 256 ),
# ( 'szExePath' , c_char * 260 ) ]


class MODULEENTRY32(Structure):
_fields_ = [ ( 'dwSize' , c_long ) ,
( 'th32ModuleID' , c_long ),
( 'th32ProcessID' , c_long ),
( 'GlblcntUsage' , c_long ),
( 'ProccntUsage' , c_long ) ,
( 'modBaseAddr' , c_long ) ,
( 'modBaseSize' , c_long ) ,
( 'hModule' , c_void_p ) ,
( 'szModule' , c_char * 256 ),
( 'szExePath' , c_char * 260 ) ]


CreateToolhelp32Snapshot= windll.kernel32.CreateToolhelp32Snapshot
Process32First = windll.kernel32.Process32First
Process32Next = windll.kernel32.Process32Next
Module32First = windll.kernel32.Module32First
Module32Next = windll.kernel32.Module32Next
GetLastError = windll.kernel32.GetLastError
OpenProcess = windll.kernel32.OpenProcess
GetPriorityClass = windll.kernel32.GetPriorityClass
CloseHandle = windll.kernel32.CloseHandle


try:
ProcessID=22052
hModuleSnap = DWORD
me32 = MODULEENTRY32()
me32.dwSize = sizeof( MODULEENTRY32 )
#me32.dwSize = 5000
hModuleSnap = CreateToolhelp32Snapshot( TH32CS_SNAPMODULE, ProcessID )
ret = Module32First( hModuleSnap, pointer(me32) )
if ret == 0 :
print 'ListProcessModules() Error on Module32First[%d]' % GetLastError()
CloseHandle( hModuleSnap )
global PROGMainBase
PROGMainBase=False
while ret :
print me32.dwSize
print me32.th32ModuleID
print me32.th32ProcessID
print me32.GlblcntUsage
print me32.ProccntUsage
print me32.modBaseAddr
print me32.modBaseSize
print me32.hModule
print me32.szModule
print me32.szExePath
ret = Module32Next( hModuleSnap , pointer(me32) )
CloseHandle( hModuleSnap )



except:
print "Error in ListProcessModules"

最佳答案

尝试使用 correct definition :

class MODULEENTRY32(Structure):
_fields_ = [( 'dwSize' , DWORD ) ,
( 'th32ModuleID' , DWORD ),
( 'th32ProcessID' , DWORD ),
( 'GlblcntUsage' , DWORD ),
( 'ProccntUsage' , DWORD ) ,
( 'modBaseAddr' , POINTER(BYTE) ) ,
( 'modBaseSize' , DWORD ) ,
( 'hModule' , HMODULE ) ,
( 'szModule' , c_char * 256 ),
( 'szExePath' , c_char * 260 ) ]

关于python - 如何在 python 64bit 中枚举模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9763459/

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