【发布时间】:2016-06-13 14:44:19
【问题描述】:
我需要获取 .exe 的基址地址,它每次启动时都有一个随机基址。我已经尝试过,但它似乎不起作用:
int Base = (DWORD)GetModuleHandle("Test.exe");
怎么了?
【问题讨论】:
-
该方法在我的测试中是正确的。你能粘贴你的整个代码吗?还是您想获取另一个进程的基地址?
-
为什么你认为调用
GetModuleHandle应该做你想做的事? -
不,它返回一个已加载模块的句柄。碰巧句柄的值也是模块在调用进程地址空间中加载的地址。
-
并不是说这些都可以带你去任何地方,但是模块的基地址和模块的入口点是不同的东西。如果你假设一个是另一个,你会很快死去。假设 32 位地址会造成更多的痛苦。
-
@PaulR:
GetModuleHandle()是一个仅限 Windows 的函数。WriteProcessMemory()是 Windows 跨进程边界写入数据的方式。如果调用进程没有请求的安全权限来打开指定进程的句柄,OpenProcess()将失败,如果指定的HANDLE对指定的进程没有足够的安全权限,ReadProcessMemory()和WriteProcessMemory()将失败过程。恶意软件会使用ReadProcessMemory()来检查内存。如果恶意软件以足够的权限运行,则不会阻止它读取另一个进程的内存。