dll文件

COM 包容组件

时间秒杀一切 提交于 2019-12-07 10:02:24
效果: <!--StartFragment --> 文件说明: 1、客户端 : CLIENT.cpp: main方法 Contain.exe :编译后的执行程序 GUIDS.CPP: GUID相关定义 IFACE.H:接口定义 2、组件: CMPNT1.cpp: 外部组件 CMPNT1.def: 接口定义 Cmpnt1.dll:编译后的DLL CMPNT2.cpp 内部组件 CMPNT2.def Cmpnt2.dll MAKEFILE :通过 nmake -f makefile 指令,将组件编译为DLL,并注册进入注册表 REGISTRY 相关文档 来源: CSDN 作者: jason5563 链接: https://blog.csdn.net/Jason5563/article/details/83611476

com组件、对象、接口

爷,独闯天下 提交于 2019-12-07 09:49:28
1、com(component object model)组件对象模型。 特点:语言无关、可以重用 应用:DirectX、OLE DB、ADO OLE是com的应用。 2、 一个com组件包括多个com对象,一个com对象实现多个接口。 3、com对象类似于c++中的类,包含属性和方法。在c++中,可以用类来定义com对象。 com组件对客户来说是透明的。 GUID用于标识com组件。 com接口:二进制特性,每个接口必须从IUnknown继承而来。 4、 IUnknown的定义: interface IUnknown { HRESULT QueryInterface( [in] REFIID iid, [out] void **ppv); ULONG AddRef(); ULONG Release(); } 输入参数iid为接口标识符:IID。 输出参数ppv为查询得到的结果接口指针。 IUnknown包含三个函数,分别是 QueryInterface、AddRef、Release。这三个函数是无比重要的,而且它们的排列顺序也是不可改变的。 QueryInetrface:查询com对象的其他接口指针 AddRef和Release用于对引用计数进行操作。 引用计数:每个com对象都记录 一个“引用计数“的数值,该数值记录了有多少个指针在使用com对象

COM组件开发(五)——使用MFC开发COM组件

孤人 提交于 2019-12-07 04:37:42
使用MFC创建一个进程内组件 这里使用的VS2008,新建一个MFC DLL项目,项目名称为“MFCCOM”,点击“确定”后进入MFC DLL向导,如下图所示: DLL类型选择“使用共享的MFC DLL的规则DLL”,附加功能勾选“自动化”(自动化是一种支持弱类型语言调用的特性),然后点击“完成”即可,生成的项目文件目录如下图: 生成的项目里包含了一个DLL的应用类和几个导出函数的定义,还有def文件和idl文件的生成。 为了开发COM,需要定义自己所需的COM对象类,这可以使用类向导来完成。通过点击菜单的“项目”——》“添加类”,选择“MFC类”,点击添加: 这里基类选择CCmdTarget,并勾选了自动化,这样这个类就是一个支持IDispatch接口的COM类了。 之后,只需添加项目自身的接口函数到类中即可,而且每个接口函数必须是以STDMETHODIMP作为返回值。 例如: STDMETHODIMP Test(BSTR* result); 来源: CSDN 作者: fishforever 链接: https://blog.csdn.net/q5806622/article/details/43954633

编程实现感染PE文件加载DLL

不打扰是莪最后的温柔 提交于 2019-12-07 01:00:46
PE文件是Windows系统可执行文件采用的普遍格式,像我们平时接触的EXE、DLL、OCX,甚至SYS文件都是属于PE文件的范畴。很多Win32病毒都是基于感染PE文件来进行传播的。今天我们就来尝试一下通过感染PE文件使其加载指定的DLL。       PE文件功能   众所周知,在Windows程序中需要调用各种各样的系统API,这些API被微软封装在不同的DLL文件中,这些DLL会在进程启动时(或者需要时)加载进进程的地址空间。我们调用一个API都是基于如下的汇编代码: 00411A3E mov esi,esp 00411A40 push 100h 00411A45 lea eax,[strDllDir] 00411A4B push eax 00411A4C call dword ptr [__imp__GetWindowsDirectoryA @8 (42B180h)] 这些汇编代码是针对如下代码的反汇编结果: char strDllDir[256]; GetWindowsDirectory(strDllDir,256);      可见,调用一个系统API是在参数压栈后调用call命令执行系统调用GetWindowsDirectory()的。上文说过,系统调用是通过DLL引入进程的,但是不同进程引入的DLL地址并不相同,程序是如何知道这个Call应该调用什么地址呢

JNI 调用,C++ invoke C# dll return to java(见git代码)

旧街凉风 提交于 2019-12-06 09:19:48
Java无法直接调用C# dll,需要通过经过桥接的方式,进行中继转发一下请求。查阅大量资料,做了大量实验,不停的调试、排错之后,期间试过jni4net,不过这个插件需要 修改原有的C# DLL内容,还会生成一些额外的Java代码,jni4net侵入性太多,将它排除。最后通过管理性的C++桥接方式,成功完成了Java调用C# DLL。 国内很多文章都是只有文章,没有在文中附上完整的代码工程,导致读者做实验时非常麻烦。而老外经常会带上完整的代码工程,这让读者做实验时参考起来非常方便。本文附上完整的Java、C++、CSharp代码工程,供大家参考。 实验环境: 64位 Win 7 jdk1.7.0_51 Eclipse 4.3.1 Visual Studio 2010 具体的实现步骤如下: 1,新建一个Java项目TestJNI,定义一个Java客户端类 TestJNI.java Java代码 package msg; public class TestJNI { public native boolean MasSentMessage(String a, String b); public native int add(int a, int b); public native String submit(String a, String b); public native

C++字符串与数值——安全的类型转换扩展

可紊 提交于 2019-12-06 07:38:16
数值和字符的转换一直是C++的弱项,C++只提供来自C语言的单向不安全转换。 (C语言中,atoi函数和atof函数可以把字符串转换为数值,但没有反转函数) 如若要反转,只能用不安全的printf(). 虽然很多编译器额外提供反向转换(如itoa,_itoa函数),但也是相当不安全。 因此我开发了一个可以安全的双向转换的库以备使用。 库文件下载: http://pan.baidu.com/netdisk/singlepublic?fid=199923_3319019563 http://dl.dbank.com/c0eaq7aa8b 文件列表: TYSafeCast.h TYSafeCast10.dll TYSafeCast10.lib TYSafeCast10d.dll TYSafeCast10d.lib TYSafeCast.def msvcp100.dll msvcr100.dll msvcp100d.dll msvcr100d.dll /*- ========================================================== * 文件名 :TYSafeCast.h * 开发人员:袁培荣 * 当前版本:1.0.0.2595 * 创建时间:2012-05-31 * 修改时间:2012-05-31 * 功能说明:安全的类型转换扩展 * 版权说明

Release和Debug有什么不同

穿精又带淫゛_ 提交于 2019-12-06 07:05:02
Release版称为发行版,Debug版称为调试版。 Debug中可以单步执行、跟踪等功能,但生成的可执行文件比较大,代码运行速度较慢。Release版运行速度较快,可执行文件较小,但在其编译条件下无法执行调试功能。 Release的exe文件链接的是标准的MFC DLL(Use MFC in a shared or static dll)。这些DLL在安装Windows的时候,已经配置,所以这些程序能够在没有安装Visual C++ 6.0的机器上运行。而Debug版本的exe链接了调试版本的MFC DLL文件,在没有安装Visual C++6.0的机器上不能运行,因为缺相应的DLL,除非选择use static dll when link。 来源: oschina 链接: https://my.oschina.net/u/67036/blog/6042

Reflector调试dll功能

不想你离开。 提交于 2019-12-06 03:04:32
Reflector不仅仅是一个反编译工具,之前用Resharper,把这个给忽略了,这个Reflector还有一个调试dll功能, 在调试时反编译代码,会生成对应的pdb文件,就可以进行dll源码调试了,可以直接在扩展管理器里安装。 来源: https://www.cnblogs.com/zhaogaojian/p/11959601.html

动态链接库DLL

青春壹個敷衍的年華 提交于 2019-12-06 00:26:22
1、Windows应用程序编程接口提供的所有函数都包含在DLL中,三个重要DLL: Kernel32.dll:包含的函数用来管理内存、进程和线程; User32.dll:包含的函数用来执行与用户界面相关的任务,如创建窗口和发送消息; GDI32.dll:包含的函数用来绘制图像和显示文字。 2、如果编译器看到一个变量、函数或C++类是用 _declspec(dllexport) 修饰的,那么她就知道应该在生成的DLL模块中导出该变量、函数或C++类。 3、 extern ”C“ 修饰符用来告诉编译器不要对变量名或函数名进行改编,这样用C、C++或任何编程语言编写的可执行模块都可以访问该变量或函数。 4、为了让线程能够调用DLL模块中的一个函数,我们必须将DLL的文件映像映射到调用线程所在进程的地址空间中,可以通过两种达到该目的: 隐式链接:直接让应用程序的源代码引用DLL中所包含的符号,使得加载程序会在应用程序运行的时候隐式地载入(并链接)所需的DLL; 显示链接:应用程序在运行的过程中,线程调用 LoadLibrary(Ex) 将DLL载入到进程的地址空间中,并调用 GetProcAddress 来与想要的输出符号进行链接。 5、FreeLibrary或FreeLibraryAndExitThread:显式地卸载DLL模块 6、每个DLL在进程中有一个与之对应的使用计数

win10 c++程序打包

邮差的信 提交于 2019-12-05 22:37:29
步骤如下: 1、 先动态编译连链接,生成exe; 2、 找到exe依赖的dll文件 使用Process Explore来获取所依赖的dll文件 打开procexp.exe,通过菜单View–Lower Pane View–DLLs勾选,显示dll窗口, 在编译环境下运行程序,找到相应的进程,查看需要的dll文件,如图所示,其中系统dll可以忽略,把需要的dll和exe copy到一个新的目录下; 3、 打包 打包工具使用Enigma Virtual Box, Enter Input File Name中,选择exe Enter Output File Name,输出文件名称 点Add按钮,添加准备好的dll文件 点Files Options,勾选Enable Files Virtualization和Compress files,OK 最后,点Process,完成,exe自此可独立运行。 如图所示 来源: https://www.cnblogs.com/lovebay/p/11948939.html