首页 > 其他分享 >dll防止卸载,以及阻止crt释放,等

dll防止卸载,以及阻止crt释放,等

时间:2023-05-19 12:55:36浏览次数:35  
标签:crt CRT bRetVal lpReserved dll fdwReason INIT 卸载

部分dll有时需要在进程中永久有效,如hook, 正常的dll在程序退出时会释放dll, 然后导致dll中的对象被释放(CRT清理)
跟踪源码, 可以看到 在__DllMainCRTStartup 中有调用 _CRT_INIT释放资源,
中间不可控, 但是有一个异常捕获, 尝试生成一个异常, 但是简单异常的过滤条件无法满足
改用自定义入口:

#define _DECL_DLLMAIN
#include <process.h>

#pragma comment(linker, "/ENTRY:DllMainCRTStartup")

extern "C"	BOOL WINAPI DllMainCRTStartup(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved)
{
	BOOL	bRetVal;

	switch(fdwReason)
	{
	case DLL_PROCESS_ATTACH:	
		bRetVal = _CRT_INIT(hinstDLL, fdwReason, lpReserved);
		HookMgr.Init();
		break;
	case DLL_THREAD_ATTACH:		
		bRetVal = _CRT_INIT(hinstDLL, fdwReason, lpReserved);
		break;
	case DLL_PROCESS_DETACH:
		bRetVal = HookMgr.Stop();
		if(bRetVal == FALSE)
			return FALSE;

		bRetVal = _CRT_INIT(hinstDLL, fdwReason, lpReserved);	
		break;
	case DLL_THREAD_DETACH:		
		bRetVal = _CRT_INIT(hinstDLL, fdwReason, lpReserved);
		break;
	default:
		return TRUE;
	}

	return bRetVal;
} 

其他:

  1. dll导出 (x86, x64符号命名差异)

pragma comment(linker, "/EXPORT:NsiRpcSetParameterEx=_NopSub@40,PRIVATE")

// x64

pragma comment(linker, "/EXPORT:NsiRpcSetParameterEx=NopSub,PRIVATE")

  1. dll导出序号

pragma comment(linker, "/EXPORT:@103=_profapi_10@16,@103,PRIVATE")

标签:crt,CRT,bRetVal,lpReserved,dll,fdwReason,INIT,卸载
From: https://www.cnblogs.com/zzz3265/p/17414797.html

相关文章

  • PLSQL Developer 无法找到OCI dll
    运行PL/SQLDeveloper14(64bit)时,提示 Initializationerror 无法找到OCI.dll OracleHomeKey:OracleHomeDir: 解决方式: 1、从oracle 官方网站下载数据库瘦客户端链接工具   instantclient-basic-windows.x64-21.9.0.0.0dbru.zip  ,解压在“D:\instantclien......
  • 资源文件:获取 EXE、DLL 或 ICO 文件中的图标
    //声明:ExtractIcon( hInst:HINST;     {调用函数的程序实例} lpszExeFileName:PChar;{文件路径;文件可以是*.exe、*.dll、*.ico} nIconIndex:UINT    {图标索引}):HICON;{返回图标句柄;索引为0时返回第一个图标句柄;索引为#FFFFFFFF......
  • 如何将抓包工具证书(cer,crt, pem)写入到Android系统内置根证书目录中实现 HTTPS 抓包
    0x01前言:在Android6之前,手机系统既信任系统内置的证书,也信任用户自己安装的证书,但是在Android7之后,却发生了变化,手机系统只信任系统内置的根证书。当然了,这是为了手机系统更安全,但是这样一来,我们就无法使用burpsuite,charles,fidder抓包app的HTTPS请......
  • dpkg命令用法、Ubuntu下deb包的解压、打包、安装、卸载及常用命令参数
    dpkg命令的用法不带图简装:https://blog.csdn.net/wanghuohuo13/article/details/78916821?ops_request_misc=&request_id=&biz_id=102&utm_term=dpkg&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-6-.first_rank_v2_pc_rank_v29&am......
  • Windows安装、配置、卸载MySQL教程
    MySQL是一个关系型数据库管理系统,目前为Oracle旗下产品,它具有开源、体积小、速度快的优点,许多网站使用的都是MySQL数据库。简单而言,MySQL数据库核心功能就是用来存储数据的。MySQL数据库分为社区版和商业版,这里介绍的是社区版的安装教程一、下载MySQL打开MySQL官网下载链......
  • 使用notepad++查看DLL位数
    简便方法:直接用记事本或者notepad++打开exe文件(dll文件),会有很多乱码,不要头疼,接下来只需要在第二段中找到PE两个字母,在其后的不远出会出现d?或者L。若是d,则证明该程序是64位;若是L,则证明是32位。翻译搜索复制......
  • 卸载亚信的安全杀毒软件
    卸载亚信的安全杀毒软件前提:根据硬性要求装了亚信的两个杀毒软件,奈何它怎么也卸不掉。而且管理员密码也不知道,哎......
  • Node.js卸载与重装
    卸载第一步:打开系统自带的卸载功能,找到nodejs进行卸载第二步:删除C:\Users\Administrator\AppData\Roaming文件下的npm、npm-cache或者如果是zip下载的安装包,直接删掉解压文件即可第三步:删掉path系统变量内有关node的,如果是msi安装是会自动删掉环境变量的(反正我的是)安装通过Nod......
  • http yolov5 tensorrt C++ windows 客户端服务器高性能部署,使用tensorrt推理yolov5模
    httpyolov5tensorrtC++windows客户端服务器高性能部署,使用tensorrt推理yolov5模型,封装成了dll;http服务器,监听指定端口、调用dll加载模型到内存(可同时支持多个模型同时加载并行运行)同时监听指定http指定路径是否有请求,收到请求后解析json数据中数据,从中解析出识别指定模型类......
  • Qt ffmpeg yolov5 tensorrt 高性能部署,使用tensorrt推理yolov5模型,封装成了dll, 支
    Qtffmpegyolov5tensorrt高性能部署,使用tensorrt推理yolov5模型,封装成了dll,支持多窗口多线程推理,本项目为4窗口版,各个窗口支持识别类别,阈值,roi区域等设置。算法支持onnxruntime,tensorrt推理,以及推理加deepsort,bytetrack和kcf多目标跟踪。ID:353200676908443403......