首页
社区
课程
招聘
[求助]有关Delphi DLLMAIN返回为FALSE的问题
发表于: 2014-9-3 12:35 7525

[求助]有关Delphi DLLMAIN返回为FALSE的问题

2014-9-3 12:35
7525
C开发DLL时在DLLMAIN中返回false 系统会自动释放掉自己这个DLL,这点可以实现DLL自卸载功能
但是在Delphi中入口不是一个DLLMAIN而是这样的

procedure DLLEntryInit(fdwReason: DWord);
begin
  case (fdwReason) of
    DLL_PROCESS_ATTACH:;
    DLL_PROCESS_DETACH:;
    DLL_THREAD_ATTACH:;
    DLL_THREAD_DETACH:;
  end;
end;

begin
  DllProc := @DLLEntryInit;
  DLLEntryInit(DLL_PROCESS_ATTACH);
end.

这个DLLEntryInit函数算是Delphi的DLLMAIN
请问Delphi有办法通过入口操作让DLL实现自卸载吗?有没有哪位大牛知道的,谢谢了!
我还试着用FreeLibraryAndExitThread函数实现DLL自卸载但发现这个不太稳定同样的程序在有的电脑上可以成功  有的电脑上就会报错 有的还会不卸载

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 26
活跃值: (66)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
mark
2014-9-3 15:26
0
雪    币: 245
活跃值: (294)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
结帖吧,经过分析发现DELPHI的DLLMAIN是模拟出来的不是和C那种的,所以没法通过让DLLMAIN返回FALSE让他自动卸载只能用FreeLibraryAndExitThread,之前是因为参数传错了导致一直没能成功,现在已经可以了。
2015-1-19 13:58
0
雪    币: 19
活跃值: (1086)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
delphi的DllMain是假的 所以不正常也是正常的
2015-1-19 15:44
0
雪    币: 126
活跃值: (179)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
Delphi的DLLMain是在编译器编译的时候构造出来的,这个入口不是真正的DLLMain了.
//DLLMain返回值,ret是用Eax传过来的
procedure DLLReturn(ret : LongBool); register;
asm
  LEAVE
  RET 12 //3个参数
end;

//算是比较接近DLLMain了
procedure DLLMain(Reason : Integer); register;
begin

end;

begin
  //eax inittable,[ebp+8] hinst,[ebp+12] reason,[ebp+16]resvd
  asm
    mov eax, [ebp + 12]
    mov ecx, [ebp + 16]
    call DLLMain
  end;

  DLLReturn(True);
end.
这上面的代码也不是真正的DLLMain,但是模仿的比较像而已
2015-1-21 23:30
0
雪    币: 26
活跃值: (66)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
procedure DLLEntryInit(fdwReason: DWord);
begin
  case (fdwReason) of
    DLL_PROCESS_ATTACH:;
    DLL_PROCESS_DETACH:;
    DLL_THREAD_ATTACH:;
    DLL_THREAD_DETACH:;
  end;
end;

begin
  DllProc := @DLLEntryInit;
  DLLEntryInit(DLL_PROCESS_ATTACH);
  exitcode:=-1 //就可以了
end.
2015-1-22 00:53
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
hksoobe 结帖吧,经过分析发现DELPHI的DLLMAIN是模拟出来的不是和C那种的,所以没法通过让DLLMAIN返回FALSE让他自动卸载只能用FreeLibraryAndExitThread,之前是因为参数 ...
你好,我可以找你写个外挂吗
上传的附件:
2017-8-17 11:54
0
游客
登录 | 注册 方可回帖
返回
//