首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何解决DLL的入口函数中创建或结束线程时卡死

先看一下使用Delphi开发DLL时如何使用MAIN函数, 通常情况下并不会使用到DLL的MAIN函数,因为delphi的框架已经把Main函数隐藏起来 而工程函数的 begin end 默认就是MAIN...以上都是题外话,本文主要说明DLL入口函数里面创建和退出线程为什么卡死和如何解决的问题。...1) DLL_PROCESS_ATTACH 事件中 创建线程 出现卡死的问题 通常情况下在这事件中仅仅是创建并唤醒线程,是不会卡死的,但如果同时有等待线程正式执行的代码,则会卡死,因为该事件中...实际上如果是通过LoadLibrary加载DLL,则会在LoadLibrary结束前后的某一时刻正式执行)。...解决办法同样是避免 DLL_PROCESS_DETACH事件中结束线程,那么我们可以该事件中,创建并唤醒另外一个线程该新的线程里,结束需要结束的线程,并在完成后结束自身即可。

3.6K10

Delphi 教程

接下来重要的方法是CreateForm:创建窗体.这个方法使用dll内的窗体时更重要,因为只有它才能主动的修复dll入口,不然的话程序容易内存泄漏....还有一个是ProcessMessages:这个方法可以让程序进入一个单独的线程,从而使占用的cpu减少,并且可以跟据需要建立其他的线程.对于一些像浏览器之类的程序,需要同时打开多个页面,或是其他的事情同时进行...一个程序里,可以拥有多个线程,但是在线程冲突的情况下,必须使用synchronize方法来防止冲突,这个方法是定义classes单元内的公共方法,你在任何情况下都能使用它。...delphi通过httprio控件,可以调用一切存在的webService。 第三个讲的是TCPServer和UDPServer。...这个控件开发网络应用时是必需的,很多情况下,比如说QQ,可能会有多个用户同时向你发消息的情况,但是这些消息如果同时到达,就会引起阻塞。

1.9K10
您找到你想要的搜索结果了吗?
是的
没有找到

【操作系统】动态链接库

_stdcall标准的调用约定 C/C++ MFC Delphi 用pacal 是从左至右的压栈方式。...EXPORTS关键字可以第一个定义所在的同一行上或在前一行上。.def文件可以包含一个或多个EXPORTS语句。...; //声明要加载的函数 typedef int (*ADDPROC)(int a, int b); //从DLL获取函数地址,A通过导出函数的实际函数名 ADDPROC Add = (ADDPROC...如果我们动态链接库中使用标准调用约定_stdcall,而在可执行程序中使用动态加载DLL,会发生名字重编,如果知道DLL中函数的序号,这时可以使用宏MAKEINTRESOURCE把序号转变成名字。...对DLL文件来说,入口函数是DLLMAIN。 在编写DLL文件时,可以写DLLMAIN也可以不写。 函数原型 // 表示动态链接可以的模块句柄,当DLL初次被加载时,句柄可以通过这个参数传递进来。

75020

sdfsdfsd_dsd cd

1)—为DataSnap系统服务程序添加描述 这几天一直研究Delphi 2010的DataSnap,感觉功能真是很强大,现在足有理由证明Delphi7该下岗了。...dbxfb.dll和fbclient.dll 分发的服务器软件只需三个文件:你的服务器程序、dbxfb.dll 和 fbclient.dll 客户端发布方法: 1.客户端程序中加上uses MidasLib...,无需此步骤 分发的客户端软件只需一个文件:你的客户端程序 服务器和客户端无需Midas.dll,也不需要注册regsvr32 Midas.dll,看来Delphi2010的datasnap抛弃使用COM...现在把我整理的结果奉献给大家,免得大家花时间研究这个。 另外,通过研究发现,DSConnectEventObject.ChannelInfo.Id 属性实际上是内存地址,并不是一个简单的数字。...Session 说明:这是delphi2010中默认属性,也是delphi推荐设置。Session会为每个来自客户端的链接,建立一个线程来实例化。实例化是什么概念呢?

2K10

Unity与 DLL文件 ☀️| 什么是DLL✨?

一个应用程序可有多个DLL文件,一个DLL文件也可能被几个应用程序所共用,这样的DLL文件被称为共享DLL文件。...,应用程序通过按下所需DLL中特定的按钮,来调用DLL中这个按钮所代表的功能 查阅资料时看到有篇文章是这样说的: Windows中有3个非常重要的底层DLL:Kernel32.dll、User32.dll...使用DLL文件的好处是程序不需要在运行之初加载所有代码,只有程序需要某个函数的时候才从DLL中取出。另外,使用DLL文件还可以减小程序的体积。...比如我们修改应用程序的某一块功能时,可以只针对这块功能对应的DLL文件中的内容,而不必全局修改代码 便于不同领域的程序员之间合作 目前可以用的编程工具有很多,比如VB、VC、Delphi等,如果好几个人合作来编写一个大的程序...节省内存 如果多个应用程序调用的是同一个动态链接库,那么这个DLL文件不会被重复多次装入内存中,而是由这些应用程序共享同一个已载入内存的DLL

2.7K20

error at hooking api ntprotect_read,match and write

编译环境:delphi 2010+windows 7 u ,用途读取其他程序中readprocessmemory和writeprocessmemory的参数,但不知读取偏移即a+($b),b是怎么读的...一 、用hook全局钩子 线程钩子:已实现 使用INLINE hookapi,CriticalSection临界区,dll分为动态loadlibry和静态加载 问题1:对多线程目标程序HOOK 卸载时会出现错误...不知是不是 问题2:使用INLINE HOOK目标程序多线程读取内存,程序卸载钩子时有时会出错,可能跟问题一 一样。使用CreateRemoteThread远程注入是否会有此问题,应该没有吧!...备注: windows核心编程中的 IAT Hook 是否存在线程问题??...(若真存在多线程问题, 此问题就有点麻烦)。似乎是说多线程下同时写入读写东西时,还没修复回IAI就被其他线程调用,程序会出错。 2009-10-0515:14:29 源码在此 !

58630

银行木马利用VMvare进行传播

该木马活动的对象主要是南美的银行,通过窃取用户的证书来非法获利。除了针对巴西用户外,还尝试用重定向等方法来感染用户的计算机。...令人意外的是,该木马使用了多重反逆向分析技术,而且最终的payload是用Delphi编写的,而Delphi银行木马中并不常见。...恶意软件加载 首先执行的二进制文件是vm.png,这是经过VMvare签名的合法的二进制文件。 依赖的二进制文件之一是vmwarebase.dll: ?...PlugX背后的理念是:一些安全产品的可信链是这样的,如果一个二进制文件是可信的(本文中的vm.png),那么它所加载的库默认是可信的。这种加载技术可以绕过一些安全检查。...注入是通过远程进程的内存分配和加载gbs.png库的LoadLibrary()来执行的。API的使用是通过AES加密来混淆的。

77880

DelphiHookApi(经典)

首先,大家都知道要在整个系统范围中拦截,需要使用Dll来完成。现在我们打开Delphi 2009,新建一个Dll工程:hookDll。...需要说明的是,Delphi是完全面向对象的编程语言,所以我们不要浪费,这个Dll打算用类的方式完成。于是,新建的DLL工程中添加一个Unit Pas,命名为unitHook, 用来写拦截类的处理。...Dll中,我们还使用到了内存映射,用来实现在拦 截全局时的内存共享,如这个例子中需要保存调用此hook的进程句柄,以防止通过任务管理器关闭示例程序。...; { 分配DLL程序到 DllProc 变量 } DllProc := @DllEntry; { 调用DLL加载处理 } DllEntry(DLL_PROCESS_ATTACH)...可以看到,DLL装入内存的时候其实就已经调用了InitHook,将要拦截的API拦截了 。

99650

Delphi调用动态链接库

调用动态库的两种方法 静态调用 这种用法的前提是在编译之前已经明确知道要调用DLL中的哪几个函数,编译时目标文件中只保留必要的链接信息,而不含DLL函数的代码;当程序执行时,利用链接信息加载DLL函数代码并在内存中将其链接入调用程序的执行空间中...代码演示 我们先创建一个动态链接库名称为PosPayIntf,最近几章介绍Delphi技术的都是用这个动态库,因为正好因为项目要做一个对接第三方微信支付宝的动态库。 ?...这样我们调用的时候就直接可以使用 ? 用静态调用动态库相对来说代码比较少,但是我们的动态库必须要放到和这个EXE的程序下,如果DLL文件没有存在,程序则无法运行,提示你少DLL文件。...---- 动态调用 今天我们主要说的还是动态调用,因为用动态调用的方法如果DLL不存在,或是入口函数有问题,我们都可以通过try except进行捕获,也不会影响主程序的使用。...我们调用动态库方法的按钮事件里面直接定义一个THandle和一个TPublicFun,TPublicFun撒向的就是我们的入口函数 ? 然后通过LoadLibrary来加载动态库 ?

2.5K20

恶意软件分析– AZORult Info Stealer

通过Delphi和C ++语言重新开发此木马,可以修复早期版本中存在的缺陷和不足。攻击者使用此木马窃取信息,例如浏览历史记录,Cookie,凭据,加密货币信息等。...AZORult v3变体是用Delphi语言开发的。 本报告中分析的变体是信息窃取者。它使用base64算法使用其命令和控制(C2)加密通信,同时窃取存储不同浏览器目录中的信息。...但是,证据表明,开发语言被确定为Borland Delphi语言。 图3可执行组合类型 汇编代码中查看该恶意软件的代码,使其使用沙盒防御规避技术。执行后,恶意软件会感知其执行环境。...图8 ActivateKeyboardLayout调用 然后发现正在加载LoadResource模块以修改注册表项。...图10 WININIT DLL 在数据包捕获中,我们发现通过TCP蒸汽IP地址136.144.237.217处进行了C2通信,如下所示。

1.6K20

C++动态链接库

函数的可执行代码位于一个 DLL 中,该 DLL 包含一个或多个已被编译、链接并与使用它们的进程分开存储的函数。DLL 还有助于共享数据和资源。多个应用程序可同时访问内存中单个DLL 副本的内容。...DLL 是一个包含可由多个程序同时使用的代码和数据的库。 定义 通过使用 DLL,程序可以实现模块化,由相对独立的组件组成。例如,一个计帐程序可以按模块来销售。...可以在运行时将各个模块加载到主程序中(如果安装了相应模块)。因为模块是彼此独立的,所以程序的加载速度更快,而且模块只相应的功能被请求时才加载。   ...此外,如果应用程序是多线程的,则可以入口点函数中使用线程本地存储 (TLS) 来分配各个线程专用的内存。...注意:线程应用程序中,请确保将对 DLL 全局数据的访问进行同步(线程安全),以避免可能的数据损坏。为此,请使用 TLS 为各个线程提供唯一的数据。

2.4K50

python dll注入监听_DLL注入和API拦截

下面就来介绍如何让程序加载我们自己的DLL: 1.使用注册表 2.使用Windows挂钩 3.使用远程线程 4.使用木马DLL,即让程序加载我们伪装的DLL 5.通过修改线程内存地址的机器指令 1.使用注册表...NT\CurrentVersion\Windows AppInit_DLLs有可能包含一个或多个DLL的文件名(通过空格或逗号分隔),第一个DLL的文件名可以包含路径,但其他DLL包含的路径将被忽略。...3.使用远程线程来注入DLL DLL注入技术唯一的目标就是让别的程序加载我们的DLL,这样我们就可以我们自己的DLL中做任何我们想做的事情。...好了,现在我们实现了别的进程中创建一个线程,那么怎么让线程去执行LoadLibrary函数,又怎么加载我们自己的DLL呢?...4.使用木马DLL,即让程序加载我们伪装的DLL 5.通过修改线程内存地址的机器指令 这两种方式下回分解 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/145651

1.1K10

libzplay库

libzplay目前,非开源,只可以windows上应用; 关于MP3文件播放:通常步骤是:获取MP3相关参数 -> 解码-> 相关平台播放音频接口播放声音; 可以播放解码播放MP3的库很多,如果VLC...解码库一般可以用lame,播放播放库可以用SDL,或者Windows上的waveout,directsound等很多方法,这里例举了,因为在任何平台上,无论怎么封装库,最后调用的还是平台播放接口; 这里Windows...关于streams的播放,可以参考dynamic_stream示例,示例中的是获取MP3格式,但是也可以通过接口自定义设置格式; enum TStreamFormat { sfUnknown =...Library is using native WINAPI functions from kernel32.dll, user32.dll, gdi32.dll and winmm.dll....(Delphi wrapper class) – and any other language which can use exported __stdcall functions from dll

93120

揭秘“食鼠猫”病毒背后的灰色产业链

样本使用delphi语言编写,通过多层Loader模块的解密与内存加载执行,下载运行最终功能模块,样本分析同样按Loader层和功能模块层分为两大部分。...5、IDriverT.exe正常程序的基础上添加恶意代码后重新编译,运行以后解密模块D,继续内存加载运行。 ?...主要流程如下: 1)、下载百度杀毒软件压缩包释放,释放资源文件BDLiveUpdate.exe、dl.dll以及twain.dat,创建服务启动BDLiveUpdate.exe进程,在被白进程主动加载的...dl.dll中解密twain.dat模块,然后内存加载运行。...[*] 互联网流量推广链条 国内互联网的推广行为一直以来缺乏严格的规范和监管,利益的熏陶下衍生了非常多的灰色地带。被利益纠结在一起的流量圈内角色关系复杂,有时其中一环就覆盖了链条上的多个角色。

1.2K70
领券