gpt4 book ai didi

windows - 我如何知道我的 DLL 是如何加载的?

转载 作者:可可西里 更新时间:2023-11-01 11:37:38 26 4
gpt4 key购买 nike

我的 DLL 如何检测它是隐式加载还是显式加载?

示例 MyTestDll.dll

library MyTestDll;

uses SimpleShareMem, Windows, Dialogs;

procedure DetectMethodDllLoad: bool;
begin
// ?????
// need to detect loading method - implicit or explicit
end;

procedure MyTest; stdcall;
begin
if DetectMethodDllLoad then
ShowMessage('Working Program1 (implicit dll load)')
else
ShowMessage('Working Program2 (explicit dll load)');
end;

exports MyTest;

begin
end.

Program1.exe(隐式 dll 加载)

procedure MyTest; stdcall; external 'MyTestDll.dll' Name 'MyTest';

procedure TForm1.Button1Click(Sender: TObject);
begin
MyTest;
end;

Program2.exe(显式 dll 加载)

type
TMyTest = procedure; stdcall;

procedure TForm1.Button1Click(Sender: TObject);
var
MyTest: TMyTest;
H: HModule;
begin
H := LoadLibrary('MyTestDll.dll');
if H = 0 then
exit;
@MyTest := GetProcAddress(H, 'MyTest');
if Assigned(MyTest) then
MyTest;
FreeLibrary(H);
end;

如何实现DetectMethodDllLoad

最佳答案

如果您可以创建 DllMain 过程,DLL_PROCESS_ATTACH 调用的 lpReserved 参数将告诉您负载是静态的还是动态的。

http://msdn.microsoft.com/en-us/library/ms682583%28VS.85%29.aspx

你当然可以在 C 中做到这一点。我不知道在 Delphi 中是否可行。

关于windows - 我如何知道我的 DLL 是如何加载的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7325369/

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