dll文件

jna调用c编写的dll

故事扮演 提交于 2020-02-01 00:26:09
我们团队目前开发的产品是用java语言编写的,大家都知道,java编写的代码随便都可以被反编译,导致别人可能会看到你“裸奔”的样子。所以,为了避免这种安全隐患,团队最终商定,将部分核心代码改用c语言编写,封装为dll,再由java调用。 于是乎,我们就开始jna初探。今天通过各种百度,终于做了个例子出来,在此做个记录,以备后路之需。 1、构造一个dll 由于本机的vs2015没有安装c++模块,所以采用Dev-C++开发,具体步骤如下: 1.1、新建项目,选择DLL,C项目 1.2、删除自动生成的代码文件,编写一个简单的函数 1.3、编译项目,生成dll 2、通过jna调用dll 2.1、在java项目中加入jna依赖 <dependency> <groupId>com.sun.jna</groupId> <artifactId>jna</artifactId> <version>3.0.9</version> </dependency> 2.2、编写调用类 public class DllTest { public interface CLibrary extends Library { CLibrary INSTANCE = (CLibrary) Native.loadLibrary("cDll2", CLibrary.class); String hello(); }

Delphi中一些DLL的运用(要传递Application和Screen,似乎还忘了传递提示控件)

浪尽此生 提交于 2020-02-01 00:21:46
dll 调用部分: {****************************************************************} { } { Project: DllDebug             } { Copyright(c) 2003, 2005                 } { Unit for UCommonUnit                   } { Create : 2003-01-05 by 林红卫             } { Modify : 2003-01-16 by 林红卫             } { } {****************************************************************} unit UCommonUnit; interface uses Windows, SysUtils, Forms; type TRunDLL = procedure(DLLName, FormName, FormCaption: PChar; aApp: TApplication; Scr: TScreen) stdcall; procedure RunDLLForm(DLLName, FormName, FormCaption: string; aApp:

远程线程注入 .dll 文件

北战南征 提交于 2020-01-30 03:02:14
此文章只供学习所用,不要做坏事哟 ~ ^ _ ^ 远程线程注入 远程线程注入 是指一个进程在另一个进程中创建线程的技术。 远程线程是 另一个进程中的线程。 当前进程,下方称作进程A: 这个线程没有结束,一直都在等待命令,可以用 getchar 或 cin.get 实现。 我们的目的是: 将一个 .dll文件注入到进程A中 当 .dll文件注入后,执行一个线程 一、 .dll文件准备 1. 当我们注入 .dll文件后执行相对应的线程: 2. 线程代码是执行一个死循环语句: 3. 编译生成的 .dll文件如下所示: 二、注入 .dll文件 思路详解: 在进程A中执行 loadlibrary加载模块 打开进程A 在进程A中开辟一段内存,用于存放 .dll文件的路径 为 .dll文件分配内存,并且将路径名写入内存中 利用 Kernel32.dll 获取 LoadLibraryA地址 使用 CreateRemoteThread这个万恶之源的函数将 .dll文件注入到目标进程中 代码中每一个API的参数这里不做解释,可以百度或者MSDN查找相关资料阅读: # include <Windows.h> int main ( ) { LPCSTR lpDllPathName = "E:\\Win Learn\\远程线程\\Debug\\动态链接库.dll" ; // 1. 查找窗口 HWND

无法定位程序输入点的问题

吃可爱长大的小学妹 提交于 2020-01-28 13:28:15
今天尝试自己建立一个cocos工程 之前建立的工程不知何故不能运行,提示: 现在尝试找出问题所在。 发现一个奇怪的现象,就是自己建的独立cpp项目生成的程序,在vs12中不能运行,而在资源管理器双击exe程序却可以运行。 通常发现,若删掉zlib1.dll这个文件,则在 资源管理器也不能运行。 初步判断是vs加载dll时,zlib1.dll被另一个同名文件替换了,而该同名dll里面没有inflateReset2函数(可能是版本不一样?)。 查看vs输出窗口,发现加载了SysWOW64里面的dll,于是去该目录一搜,果然找出一个 zlib1.dll,删之,正常。 由此得出一个结论,就是vs加载dll时,搜索路径是先去 SysWOW64、System32这类目录找,然后再在当前目录(一般是.vc(x)proj文件所在目录)找。 但是为什么cocos工程中的示例项目没有出现这个问题?现在还搞不明白。 来自为知笔记(Wiz) 来源: https://www.cnblogs.com/dydx/p/4297579.html

dll找不到问题

淺唱寂寞╮ 提交于 2020-01-24 15:03:55
用vs2010编写的程序经常会发生的一个问题。在自己的机器上运行的好好的,但是在别的机器上就会发生没有找到MSVCR100D.dll。这是 个很头疼的问题。对于一些代码量几百行的小程序,我不可能要求其他电脑也一定要配有MSVCR100D.dll这个dll。当然解决方法也有,但是我也不 可能要求所有的电脑都装上.net framwork 2.0。微软又给CSer们出了个难题。 原因: 工程默认没有使用静态联编,没有把必须的DLL库一块编译进去导致的。 解决方法: 在vs2010下,按ALT+F7,打开工程属性–>配置属性–>代码生成–>运行时库–>选多线程(/MT) 英文版为:Options->Configuration Properties->C/C+±>Code Generation->Runtime Library->Multi-threaded(/MT) MT选项:静态链接LIB版的C和C++运行库。在链接时就会在将C和C++运行时库集成到程序中成为程序中的代码,程序体积会变大。 MTd选项:LIB的调试版。 MD选项:使用DLL版的C和C++运行库,这样在程序运行时会动态的加载对 应的DLL,程序体积会减小,缺点是在系统没有对应DLL时程序无法运行。 MDd选项:表示使用DLL的调试版。 在配置中,把“公共语言运行库支持”设置为:无公共语言运行库支持 就可以了

C#中动态加载和卸载DLL

时间秒杀一切 提交于 2020-01-23 07:41:49
from: http://www.yaosansi.com/post/1443.html 在C++中加载和卸载DLL是一件很容易的事,LoadLibrary和FreeLibrary让你能够轻易的在程序中加载DLL,然后在任何地方卸载。在C#中我们也能使用Assembly.LoadFile实现动态加载DLL,但是当你试图卸载时,你会很惊讶的发现Assembly没有提供任何卸载的方法。这是由于托管代码的自动垃圾回收机制会做这件事情,所以C#不提供释放资源的函数,一切由垃圾回收来做。 这引发了一个问题,用Assembly加载的DLL可能只在程序结束的时候才会被释放,这也意味着在程序运行期间无法更新被加载的DLL。而这个功能在某些程序设计时是非常必要的,考虑你正在用反射机制写一个查看DLL中所有函数详细信息的程序,程序提供一个菜单让用户可以选择DLL文件,这时就需要让程序能够卸载DLL,否则一旦用户重新得到新版本DLL时,必须要重新启动程序,重新选择加载DLL文件,这样的设计是用户无法忍受的。 C#也提供了实现动态卸载DLL的方法,通过AppDomain来实现。AppDomain是一个独立执行应用程序的环境,当AppDomain被卸载的时候,在该环境中的所有资源也将被回收。关于AppDomain的详细资料参考MSDN。下面是使用AppDomain实现动态卸载DLL的代码, using

【Windows】 rundll32.exe 在 Windows10 上的应用

為{幸葍}努か 提交于 2020-01-23 07:06:30
rundll32.exe概述 rundll32.exe用于在内存中运行DLL文件,它们会在应用程序中被使用。这个程序对你系统的正常运行是非常重要的。注意:rundl132.exe和rundll32.exe相似。但是rundl132.exe是W32.Miroot.Worm病毒。该病毒允许攻击者访问你的计算机,窃取密码和个人数据。对该文件的建议是立即删除。 顾名思义,"执行32位的DLL文件"。它的作用是执行DLL文件中的内部函数,这样在进程当中,只会有 Rundll32.exe,而不会有DLL后门的进程,这样,就实现了进程上的隐藏。如果看到系统中有多个 Rundll32.exe,不必惊慌,这证明用 Rundll32.exe启动了多少个的DLL文件。当然,这些 rundll32.exe 执行的 DLL 文件是什么,我们都可以从系统自动加载的地方找到。 我来介绍一下rundll32.exe这个文件,意思上边已经说过,功能就是以命令行的方式调用动态链接程序库。系统中还有一个 Rundll.exe文件,他的意思是"执行16位的DLL文件",这里要注意一下。再来看看Rundll32.exe使用的函数原型 : Void CALLBACK FunctionName (HWND hwnd,HINSTANCE hinst,LPTSTR lpCmdLine,Int nCmdShow);

DLL基础

浪尽此生 提交于 2020-01-21 17:08:23
Windows API中的所有函数都包含在DLL中。3个最重要的DLL是:   1) Kernel32.dll :它包含用于管理内存、进程和线程的各个函数   2) User32.dll ,它包含用于执行用户界面任务(如窗口的创建和消息的传送)的各个函数   3) GDI32.dll ,它包含用于画图和显示文本的各个函数。 Windows还配有若干别的DLL,它们提供了用于执行一些特殊任务的函数。AdvAPI32.dll包含用于实现对象安全性、注册表操作和事件记录的函数;ComDlg32.dll包含常用对话框(如File Open和File Save);ComCtl32.DLL则支持所有的常用窗口控件。 1、使用DLL的原因 1) 扩展了应用程序的特性   由于 D L L能够动态地装入进程的地址空间,因此应用程序能够在运行时确定需要执行什么操作,然后装入相应的代码,以便根据需要执行这些操作。 2) 可以用许多种编程语言来编写   可以选择手头拥有的最好的语言来编写DLL。 3) 简化了软件项目的管理   附带的文件应该尽量少,这样,应用程序的初始化时间也会相对少很多。 4) 有助于节省内存   若两个或多个应用程序使用同一个DLL,那么该DLL的页面只要放入RAM(随机存取存储器)一次,所有的应用程序都可以共享它的各个页面。若所有的应用程序都链接到这个库的静态库

DLL的创建、导出和加载

情到浓时终转凉″ 提交于 2020-01-19 22:09:21
一、创建DLL项目   打开VS2008,点击File——>New——>Project——>Visual C++——>Win32 Console Application,填入工程名称,下一步,选择Application Type为DLL,Additional options为Empty project。   添加cpp文件和h文件,实现DLL需求的功能。、   点击生成解决方案,可在对应目录下看到生成的lib和dll文件。 二、DLL的函数导出和加载   DLL导出有两种方式:__declspec(dllexport)和.def文件。c++加载DLL也有两种方式(静态链接和动态链接)。 1、用__declspec(dllexport)导出函数     #ifdef XXX_EXPORTS     #define XXX_API __declspec(dllexport)   #else     #define XXX_API __declspec(dllimport)   #endif   extern "C" BOOL XXX_API XXX(函数参数列表); 2、用.def导出函数   LIBRARY "xxx"(DLL的名称)   EXPORTS     xxx(要导出的函数名) 3、静态链接   #pragma comment(lib,"xxx.lib")    4

QT导入libcurl支持HTTPS

£可爱£侵袭症+ 提交于 2020-01-19 12:34:33
对于我这种不会编译的人来说,必须找到已经编译好的DLL文件,以及头文件才能使用。 幸运的在这个网站https://stackoverflow.com/questions/28137379/libcurl-win32-static-with-ssl,也有人提问相同的问题,所以就这儿工具找到了已经编译好的文件链接,直接下载就行。 我的工具环境使用的是WIN32,所以只能下载对应的文件 libcURL for Win32 is here http://curl.haxx.se/gknw.net/7.40.0/dist-w32/curl-7.40.0-devel-mingw32.zip , 至于在QT导入libcurl文件就容易的多了,在pro文件最下面写入 LIBS += D:\QTitem\MyTest\curl\libcurldll.a INCLUDEPATH += D:\QTitem\MyTest\curl\include注意 curl这里是我电脑自己存放所有libcURL文件的路径,改成你自己的。这里并没有完成,如果你不做接下来这一步,将会收到错误提示。例如: Starting D:\QTitem\MyTest\debug\MyTest.exe... 程序异常结束。 D:\QTitem\MyTest\debug\MyTest.exe crashed. 为了避免这个错误出现