可以使用psutil和ctypes库来获取exe进程的基地址。
示例代码:
import psutil
import ctypes
# 获取进程列表
processes = psutil.process_iter()
# 遍历进程列表,找到exe进程
for process in processes:
try:
if process.name() == 'myexe.exe':
# 获取进程的PID
pid = process.pid
# 获取进程的句柄
handle = ctypes.windll.kernel32.OpenProcess(0x1F0FFF, False, pid)
# 获取进程的基地址
base_address = ctypes.windll.kernel32.GetModuleHandleA(None)
# 输出基地址
print('Base address of myexe.exe:', hex(base_address))
# 关闭进程的句柄
ctypes.windll.kernel32.CloseHandle(handle)
except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
pass
解释:
- 使用psutil库的process_iter()函数获取进程列表。
- 遍历进程列表,使用进程的name()函数判断是否为目标exe进程。
- 如果是目标exe进程,使用windll.kernel32库的OpenProcess()函数获取进程的句柄。
- 使用windll.kernel32库的GetModuleHandleA()函数获取进程的基地址。
- 输出基地址。
- 使用windll.kernel32库的CloseHandle()函数关闭进程的句柄。