dll文件

StyleCop(C#代码检测工具)

匿名 (未验证) 提交于 2019-12-03 00:38:01
一、StyleCop是微软的一个开源的静态代码分析工具,检查c#代码一致性和编码风格。 二、下载地址 http://stylecop.codeplex.com/releases/view/79972   默认安装目录:C:\Program Files (x86)\StyleCop 4.7   自己定义的dll规则也放在这个目录下 三、使用方式: 打开 VS 之后选择一个类或者一个类库右击 RunStyleCop运行结果: 四:编写自己的规则: 1、创建一个类库,   新建一个MyCustomAnalyzer.cs文件,引用StyleCop.dll和StyleCop.Csharp.dll   代码如下: AddViolation方法中的三个参数"AvoidUsingAInClassNames"是自己定义的规则,这个规则就是下文xml中的 Rule Name="AvoidUsingAInClassNames" 2、新建一个和类同名的xml文件   MyCustomAnalyzer.xml内容如下:   设置该xml文件属性:编译方式为嵌入式 (即编译到dll中),Rules中可以放多个Rule但不要忘了改Name和Id   将这个项目生成DLL,把MyCustomAnalyzer.dll放到StyleCop根目录下。到此自定义规则就完成了。 4、使用自己的规则:   打开 VS

Dll注入技术之劫持注入

匿名 (未验证) 提交于 2019-12-03 00:37:01
Dll注入技术之劫持注入 测试环境 工具:FileCleaner2.0 和 lpk.dll 主要思路 利用Window可以先加载当前目录下的dll特性,仿造系统的LPK.DLL,让应用程序先加载我们的伪LPK.DLL,然后在我们的dll中去调用原来系统的原函数. 引用网络中的原理讲解 ●背景知识● 首先我们要了解Windows为什么可以DLL劫持呢?主要是因为Windows的资源共享机制。为了尽可能多得安排资源共享,微软建议多个应用程序共享的任何模块应该放在Windows的系统目录中,如kernel32.dll,这样能够方便找到。但是随着时间的推移,安装程序会用旧文件或者未向后兼容的新文件来替换系统目录下的文件,这样会使一些其他的应用程序无法正确执行,因此,微软改变了策略,建议应用程序将所有文件放到自己的目录中去,而不要去碰系统目录下的任何东西。 为了提供这样的功能,在Window2000开始,微软加了一个特性,强制操作系统的加载程序首先从应用程序目录中加载模块,只有当加载程序无法在应用程序目录中找到文件,才搜索其他目录。利用系统的这个特性,就可以使应用程序强制加载我们指定的DLL做一些特殊的工作。 举个例子来说吧,Windows的系统目录下有一个名为LPK.DLL的系统文件,程序运行时会在c:\Windows\system32文件夹下找到这个DLL文件并加载它。如打开记事本程序

C++ dll的隐式与显式调用

匿名 (未验证) 提交于 2019-12-03 00:33:02
应用程序使用DLL可以采用两种方式:一种是隐式链接,另一种是显式链接。在使用DLL之前首先要知道DLL中函数的结构信息。Visual C++6.0(或者更先进的版本)在VC\bin目录下提供了一个名为Dumpbin.exe的小程序(使用方法见 VS自带工具:dumpbin的使用 ),用它可以查看DLL文件中的函数结构。另外,Windows系统将遵循下面的搜索顺序来定位DLL: 1.包含EXE文件的目录,2.进程的当前工作目录, 3.Windows系统目录, 4.Windows目录,5.列在Path环境变量中的一系列目录。   1.隐式链接   隐式链接就是在程序开始执行时就将DLL文件加载到应用程序当中。实现隐式链接很容易,只要将导入函数关键字_declspec(dllimport)函数名等写到应用程序相应的头文件中就可以了。下面的例子通过隐式链接调用MyDll.dll库中的Min函数。首先生成一个项目为TestDll,在DllTest.h、DllTest.cpp文件中分别输入如下代码: [cpp] view plain copy //Dlltest.h #include"MyDll.h" extern "C" _declspec( dllimport int int int extern "C" _declspec( dllimport int int int //TestDll

DLL卸载

匿名 (未验证) 提交于 2019-12-03 00:33:02
DLL卸载 DLL卸载(DLL Ejection)是将强制插入进程的DLL弹出的一种技术,原理是驱使目标进程调用FreeLibrary() API,即将FreeLibrary() API的地址传递给CreateRemoteThread()的lpStartAddress参数并把要卸载的DLL的句柄传递给lpParameter参数。 注意:使用FreeLibrary() API实现DLL卸载,仅适用于卸载自己强制注入的DLL文件。PE文件直接导入的DLL文件是无法在进程运行过程中卸载的。 编写DLL卸载程序 下面编写针对之前DLL注入编写的InjectDll.exe和myhack.dll的DLL卸载程序EjectDll.exe程序。当然想卸载指定进程的指定DLL文件时只需修改代码中常量定义部分即可。 //EjectDll.cpp #include "windows.h" #include "tchar.h" #include "tlhelp32.h" //定义目标进程名和目标DLL文件名常量 #define DEF_PROC_NAME (L"notepad.exe") #define DEF_DLL_NAME (L"myhack.dll") //查看设置权限 BOOL SetPrivilege(LPCTSTR lpszPrivilege, BOOL bEnablePrivilege){

C++调用dll文件的两种方法

匿名 (未验证) 提交于 2019-12-03 00:32:02
DLL中导出函数的声明有两种方式:一种是在函数声明中加上_declspec(dllexport)关键字,另一种方式就是采用模块定义文件声明。.def 文件为连接器提供了有关被链结程序的导出、属性及其他方面的信息。在连接阶段,可以使用/DEF(指定模块定义文件)连接器选项调用.def 文件。 .def 文件必须至少包含下列模块定义语句: 1】文件中的第一个语句必须是LIBRARY 语句。此语句将 .def 文件标识为属于 DLL。 LIBRARY 语句的后面是 DLL 的名称。 链接器将此名称放到 DLL 的导入库中。 2】EXPORTS 语句列出名称,可能的话还会列出 DLL 导出函数的序号值。在函数名的后面加上 @ 符和一个数字,给函数分配序号值。 当指定序号值时,序号值的范围必须是从 1 到 N,其中 N 是 DLL 导出函数的个数。使用符号时外部调用程序可以使用函数名称和序号加载函数。 可以尝试以下步骤使用Def文件创建一个DLL。 1】新建一个win32 console application,选择DLL项目类型,创建一个空项目。 2】在工程中添加一个.cpp文件,输出以下代码。 int __stdcall add( int a, int b) { return (a + b); } int __stdcall sub( int a, int b) { return (a

C/C++函数调用约定

匿名 (未验证) 提交于 2019-12-03 00:30:01
常见的函数调用约定[5]: cdecl stacall fastcall thiscall naked call 1)、压栈顺序:函数参数从右向左 2)、参数栈维护:由调用函数把参数弹出栈,传送参数的内存栈由调用函数来维护(正因为如此,实现可变参数vararg的函数(如printf)只能使用该调用) 3)、函数修饰名约定:VS将函数编译后会在函数名前加上下划线前缀 4)、每一个调用它的函数都包含清空堆栈的代码,所以产生的可执行文件大小会比调用_stdcall函数的大 1)、压栈顺序:函数参数从右向左的压栈书序 2)、参数栈维护:被调用函数把参数弹出栈(在退出时清空堆栈) 3)、函数修饰名约定:VS将函数编译后会在函数前面加上下划线前缀,在函数名后加上“@”和参数的字节个数 1)、压栈顺序:用EXC和EDX传送前两个双字(DWORD)或更小的参数(一个双字为四个字节)剩下的参数仍旧自右向左压栈传送 2)、参数栈维护:被调用的函数在返回前清理传送参数的内存栈 3)、函数修饰名约定:VS:将函数编译后会在函数名前面加上“@”前缀,在函数名前加上“@”和参数的字节数 1)、压栈顺序:this指针存放在CX/ECX寄存器中,参数从右向左的顺序压栈 2)、thiscall不是关键字,因此不能被程序员指定 1)、当采用1-4的调用约定时,如果必要的话,进入函数时编译器会产生代码来保存ESI

C++下动态链接库(dll)生成与调用

匿名 (未验证) 提交于 2019-12-03 00:29:01
下面用到的VS为VS2015 ,首先是dll的生成,我以最常用的加法运算来举例: (1)首先新建一个win32 项目,命名为Add_test (2)然后点击确定->下一步: (3)最后点击完成 然后新建头文件和源文件Add.h和Add.cpp 在Add.h添加如下代码,表示需要导出的函数 在Add.cpp中添加如下代码,为函数的内容: (4)然后按下F7生成,则在目录下会生成dll和lib文件。 最后是对生成的dll和lib文件的调用 (1)首先新建win32控制台文件,命名为test_Add (3)直接点击完成->完成,然后按下F7生成,将上一步生成的dll和lib放到debug文件夹下(和工程exe文件放在一起): (4)然后在右键项目属性->链接器->输入 输入lib的路径,如下 到这里环境就配置好了,接下来就是函数的利用 (5)在stdafx.h文件中,写入如下语句,表示导入函数 (6)在main函数中输入如下代码 最终得到 到这里已经完全实现了dll的生成与调用,如有读者仍然不懂,可以下载 源代码 查看 文章来源: C++下动态链接库(dll)生成与调用

如何使用 Webpack 的 Dllplugin

匿名 (未验证) 提交于 2019-12-03 00:27:02
在使用 Dllplugin 之前,首先我们应该了解它是干什么的,如果你的项目够大的话,可能每次编译都要花费很多时间,那么Dllplugin就是用来处理这个事情的。通过使用它你可以大大缩短编译的时间,提升构建速度。接下来我们就来看看如何使用这个配置。 下面是官网给出的介绍: DllPlugin manifest.json DLLReferencePlugin context name : 暴露出的 DLL 的函数名 ( TemplatePaths [hash] [name] path : manifest json 文件的 绝对路径 new webpack . DllPlugin ( options ) path manifest.json require import DLLReferencePlugin output.library DllReferencePlugin 这个插件是在 webpack 主配置文件中设置的, 这个插件把只有 dll 的 bundle(们)(dll-only-bundle(s)) 引用到需要的预编译的依赖。 context : ( 绝对路径 ) manifest (或者是内容属性)中请求的上下文 manifest content name content manifest.content ) name manifest.name externals )

64位系统下OpcRcw修改过程

匿名 (未验证) 提交于 2019-12-03 00:27:02
OPC服务访问设备简单方便不多说,但网上基本上都是32位上的DLL,总共有5个基础的,分别是OpcRcw.Cmd.dll、OpcRcw.Comn.dll、OpcRcw.Da.dll、OpcRcw.Dx.dll、OpcRcw.Hda.dll 这五个DLL中有一个参数都是Pack = 8或Pack = 4 。 32位下是Pack = 4,64位下要改为Pack = 8。 进入将32位修改成64位下可用DLL的步骤正题: 1、网上https://github.com/icsharpcode/ILSpy/releases 下载ILSpy开源工具,运行它; 2、将上面五个DLL都拖入ILSpy工具界面,在左边会出现五个文件的名字,分别选中后,工具栏文件选项中选择SAVE CODE 源码为C#,就保存为工程文件了。 4、将五个DLL复制到你的项目文件中去,重新引用新的DLL即可。 文章来源: 64位系统下OpcRcw修改过程

c++调用matlab函数 - dll方式

匿名 (未验证) 提交于 2019-12-03 00:26:01
项目中遇到一个问题,需要用c++调用matlab程序,这里记录下整个过程。 matlab 2014a visual studio 2010 PS:版本问题要注意,之前是visual studio 2017,这个就一直报错(笑cry),matlab比较难安装,所以一般来说调节visual studio版本就好了。 mcc -W cpplib:MatPredictGPS -T link:lib ../predict_gps.m 其中MatPredictGPS为生成的文件名 cpplib,是指编译成C++的lib -T表示目标,link:lib表示要连接到一个库文件的目标 ../predict_gps.m为需要生成dll的函数。 PS:如果predict_gps.m依赖其它matlab函数,可以将依赖的函数一并放在后面,用空格分开就好。 命令运行后生成以下文件: #include "stdafx.h" # pragma comment(lib,"mclmcrrt.lib") # pragma comment(lib,"libmx.lib") # pragma comment(lib,"libmat.lib") # pragma comment(lib,"mclmcr.lib") # pragma comment(lib,"MatPredictGPS.lib") #include