Windows开发相关简记二:exe和dll双形态
启动流程 BasicEntry 作为dll导出接口 PrepareEnv 先构建运行时 ntdll.dll kernel32.dll 获取当前dll句柄 EXE被当做DLL加载时,首先修复重定位数据,此时的全局变量等还无法访问 因为Windows操作系统不会修复当做DLL加载的E...
启动流程 BasicEntry 作为dll导出接口 PrepareEnv 先构建运行时 ntdll.dll kernel32.dll 获取当前dll句柄 EXE被当做DLL加载时,首先修复重定位数据,此时的全局变量等还无法访问 因为Windows操作系统不会修复当做DLL加载的E...
概述 现象 有个DLL是给JavaScript调用的,发现它加载了这个库后,给Init函数传入了两个参数 实际上,该动态库导出的函数中,Init是别名,为InitDefrag 而项目中名为InitDefrag的函数只有一个,且只有一个参数 结论 是正确的用法 因为上述的InitD...
概述 HOOK技术(钩子技术)是Windows操作系统中的一种核心机制,允许程序拦截并处理系统事件、消息或函数调用 通过HOOK,开发者可以监控或修改系统的行为,例如键盘输入、鼠标点击、窗口创建/销毁等 HOOK技术广泛应用于安全防护、自动化工具、调试分析等领域 原理 消息机制与...
相关 dll 包含所有的代码编译成的指令 lib 包含一个列表,表明dll含有哪些符号,每个符号对应在dll里的位置 工程 使用VS新建项目 选择Win32控制台应用程序 应用程序类型:DLL 附加选项:空项目 创建工程 环境 添加cpp文件 右键工程属性,选择C/C++ 选定代...
编译相关 #pragma init_seg 概述 是微软C++编译器中的一个编译指令,专门用于精细控制全局静态对象(包括静态变量)的构造和析构顺序 在解决复杂的初始化依赖或DLL加载问题时非常有用 语法 优先级 compiler 最高优先级 此组别的对象最先构造,最后析构 通常保...
概述 从vcpkg安装了libcurl的静态库,把该静态库拷贝到了项目同级目录,并在项目中引用了这个libcurl.lib 问题 现象 编译出test.exe的时候发现,同时会多出两个文件 libcurl.dll zlib1.dll 分析 在项目同级目录放进去的是静态库,也在项目...
ATL线程模型和套间 概述 在 COM 开发中,线程模式(Threading Model) 和 套间(Apartment) 是确保组件在多线程环境下安全运行的核心机制 ATL(Active Template Library)通过模板类(如 CComObjectRootEx)和线程...
位置 项目属性 C/C++ 代码生成 运行库 选项 /MT /MTd /MD /MDd 区别 这些区别是针对VC来讲 /MT /MTd指静态编译(多线程静态版本),使用lib以及MSVC相关的静态库 定义了它后,编译器把LIBCMT.lib 安置到OBJ文件中,让链接器使用LIB...
概述 注入方法 CreateRemoteThread + LoadLibraryA/W (最经典) SetWindowsHookEx (钩子注入) QueueUserAPC + LoadLibraryA (APC 注入) 注册表/配置文件 + AppInit_DLLs (系统级)...
加载 双击.exe的时候,该.exe被加载到内存当中,形成一个进程 在这个过程中,DLL也会被加载到内存中 DLL被加载后处于被占用的状态,不能对它进行修改删除等操作 DLL被卸载后,可以对它进行操作 对于占用同一个DLL的不同进程,不可比较DLL中变量的地址,因为DLL数据段每...
搜索当前标签