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

时间:2023-01-15 04:53:31
说明:

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


问题:

   基址会根据这个dll的载入点不同变化?  如何取得这个xxx.dll的基址?  希望给出代码!

5 个解决方案

#1


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;

#2


引用 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;


谢谢,菜鸟就是麻烦,多理解!

#3


uses
  psapi;

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

  edit1.Text:= Format('%d', [DWORD(tInf.lpBaseOfDll)]);

#4


太感谢了,对你的仰慕之情......

#5


你好,怎么我用不了?读不出这个DLL的基址?

#1


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;

#2


引用 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;


谢谢,菜鸟就是麻烦,多理解!

#3


uses
  psapi;

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

  edit1.Text:= Format('%d', [DWORD(tInf.lpBaseOfDll)]);

#4


太感谢了,对你的仰慕之情......

#5


你好,怎么我用不了?读不出这个DLL的基址?