如何取一个程序已经加载的 dll基址

代码跳动 2008-09-03 10:28:15
说明:

我找到一个游戏程序的基址,但在游戏重新启动后仍然会有变化, 但xxx.dll+5778 这个偏移是不变的.
xxx.dll的基址+5778 这个地址就可以得到这个游戏基址.


问题:

基址会根据这个dll的载入点不同变化? 如何取得这个xxx.dll的基址? 希望给出代码!
...全文
579 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ljxiaobao 2010-08-13
  • 打赏
  • 举报
回复
你好,怎么我用不了?读不出这个DLL的基址?
代码跳动 2008-09-03
  • 打赏
  • 举报
回复
太感谢了,对你的仰慕之情......
etomahawk 2008-09-03
  • 打赏
  • 举报
回复
uses
psapi;

//不好意思,写错一个单词: LoadLibrary

edit1.Text:= Format('%d', [DWORD(tInf.lpBaseOfDll)]);
代码跳动 2008-09-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 etomahawk 的回复:]
Delphi(Pascal) codevar
hLib: THandle;
tInf: TModuleInfo; //这里报错,是要在uses里声明什么吗?
begin
hLib:= LoadLibray('xxx.dll');

if hLib <> 0 then
begin
GetModuleInformation(GetCurrentProcess, hLib, @tInf, SizeOf(tInf));

// 这个就是你想要的:
// tInf.lpBaseOfDll^ 如果用edit1.text:=pchar(@tinf); 这样能显示地址吗?
end;
//...
end;
[/Quote]

谢谢,菜鸟就是麻烦,多理解!
etomahawk 2008-09-03
  • 打赏
  • 举报
回复
var
hLib: THandle;
tInf: TModuleInfo;
begin
hLib:= LoadLibray('xxx.dll');

if hLib <> 0 then
begin
GetModuleInformation(GetCurrentProcess, hLib, @tInf, SizeOf(tInf));

// 这个就是你想要的:
// tInf.lpBaseOfDll^
end;
//...
end;

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧