- 博客(13)
- 资源 (2)
- 收藏
- 关注
原创 在windows程序中嵌入Lua脚本引擎--编写自己的Lua库
在《在windows程序中嵌入Lua脚本引擎--建立一个简易的“云命令”执行的系统》一文中,我提到了使用Lua的ffi库,可以让我们像写C代码一样写lua程序。这是个非常令我们这些C程序员激动的事。但是我们使用ffi库写出来的程序往往比较大,因为我们可能要声明一些API的原型和结构体。比如我们看luajit的wiki中关于使用ffi调用kernel32的一个例子。(转载请指明出于b...
2012-11-29 21:55:17 10177 18
原创 在windows程序中嵌入Lua脚本引擎--建立一个简易的“云命令”执行的系统
在《在windows程序中嵌入Lua脚本引擎--使用VS IDE编译Luajit脚本引擎》开始处,我提到某公司被指责使用“云命令”暗杀一些软件。本文将讲述如何去模拟一个简易的“云指令”执行系统。(转载请指明出于breaksoftware的csdn博客) 首先我们思考下“云指令”的优点: 1 一次性执行,在客户端几乎无法得知其被执行的证据。在C...
2012-11-27 21:10:29 4779 2
原创 在windows程序中嵌入Lua脚本引擎--使用VS IDE编译Luajit脚本引擎
前些天听到一个需求:某业务方需要我们帮忙清理用户电脑上的一些废弃文件。同事完成这个逻辑的方案便是在我们程序中加入了一个很“独立”的业务逻辑:检索和删除某个程序产生的废弃文件。试想,该“独立”的逻辑之后会如何?被删掉?一直保留着?不管如何,这都意味着我们代码需要做修改,我们生成的二进制文件将产生差异,我们要为了这个需求要发一次版本。想一想客户端升级这样一个漫长且耗流量的过程,我甚至认...
2012-11-22 21:13:23 10939 7
原创 一种不会导致资源泄露的“终止”线程的方法
在项目工程中,我们可能会使用第三方开发的模块。该模块提供一个接口用于完成非常复杂和耗时的工作。我们一般不会将该API放在UI线程中执行,而是启动一个线程,用工作线程去执行这个耗时的操作。(转载请指明出于breaksoftware的csdn博客)static VOID OtherPartFun() // 第三方提供函数,超级耗时,不如来个极限,死循环{ int nIn...
2012-11-21 20:56:28 2632 6
原创 DllMain中不当操作导致死锁问题的分析——DllMain中要谨慎写代码(完结篇)
之前几篇文章主要介绍和分析了为什么会在DllMain做出一些不当操作导致死锁的原因。本文将总结以前文章的结论,并介绍些DllMain中还有哪些操作会导致死锁等问题。(转载请指明出于breaksoftware的csdn博客) DllMain的相关特性 首先列出《DllMain中不当操作导致死锁问题的分析--进程对DllMain函数的调用规律的研究和分...
2012-11-09 20:35:24 9842 10
原创 DllMain中不当操作导致死锁问题的分析——线程中调用GetModuleFileName、GetModuleHandle等导致死锁
之前的几篇文章已经讲解了在DllMain中创建并等待线程导致的死锁的原因。是否还记得,我们分析了半天汇编才知道在线程中的死锁位置。如果对于缺乏调试经验的同学来说,可能发现这个位置有点麻烦。那么本文就介绍几个例子,它们会在线程明显的位置死锁掉。(转载请指明出于breaksoftware的csdn博客) DLL中的代码依旧简单。它获取叫EVENT的命名事件,然后等待这...
2012-11-09 19:48:43 6388
原创 DllMain中不当操作导致死锁问题的分析--线程退出时产生了死锁
我们回顾下之前举得例子(转载请指明出于breaksoftware的csdn博客) case DLL_PROCESS_ATTACH: { printf("DLL DllWithoutDisableThreadLibraryCalls_A:\tProcess attach (tid = %d)\n", tid); HANDLE h...
2012-11-08 20:06:41 4516
原创 DllMain中不当操作导致死锁问题的分析--加载卸载DLL与DllMain死锁的关系
前几篇文章一直没有在源码级证明:DllMain在收到DLL_PROCESS_ATTACH和DLL_PROCESS_DETACH时会进入临界区。这个论证非常重要,因为它是使其他线程不能进入临界区从而导致死锁的关键。我构造了在DLL被映射到进程地址空间的场景,请看死锁时加载DLL的线程的堆栈(转载请指明出于breaksoftware的csdn博客) 如果仔细看过《...
2012-11-08 19:17:47 4864 2
原创 DllMain中不当操作导致死锁问题的分析--DisableThreadLibraryCalls对DllMain中死锁的影响
《windows核心编程》作者在讨论DllMain执行序列化的时候,曾说过一个他的故事:他试图通过调用DisableThreadLibraryCalls以使得新线程不在调用DllMain从而解决死锁问题。但是该方案最后失败了。思考作者的思路,他可能一开始认为:因为线程要调用DllMain而加锁,于是windows在发现DllMain不用调用时就不用加锁了。本文将探讨DisableT...
2012-11-07 20:00:14 8478 6
原创 DllMain中不当操作导致死锁问题的分析--导致DllMain中死锁的关键隐藏因子2
本文介绍使用Windbg去验证《DllMain中不当操作导致死锁问题的分析--导致DllMain中死锁的关键隐藏因子》中的结论,调试对象是文中刚开始那个例子。(转载请指明出于breaksoftware的csdn博客) 1 g 让程序运行起来 2 ctrl+break 中断程序 3 ~ 查看线程数 其实该程序自己运行起来
2012-11-05 22:52:01 3826 8
原创 DllMain中不当操作导致死锁问题的分析--导致DllMain中死锁的关键隐藏因子
有了前面两节的基础,我们现在切入正题:研究下DllMain为什么会因为不当操作导致死锁的问题。首先我们看一段比较经典的“DllMain中死锁”代码。(转载请指明出于breaksoftware的csdn博客)//主线程中HMODULE h = LoadLibraryA(strDllName.c_str()); // DLL中代码static DWORD WINA...
2012-11-05 21:27:45 7236 6
原创 DllMain中不当操作导致死锁问题的分析--进程对DllMain函数的调用规律的研究和分析
不知道大家是否思考过一个过程:系统试图运行我们写的程序,它是怎么知道程序起始位置的?很多同学想到,我们在编写程序时有个函数,类似Main这样的名字。是的!这就是系统给我们提供的控制程序最开始的地方(注意这儿是提供给我们的,而实际有比这个还要靠前的main)。于是看到DllMain就可以想到它是干嘛的了:Dll的入口点函数。那何时调用这个函数的呢?以及各种调用场景都传给了它什么参数呢...
2012-11-02 23:50:53 6088 1
原创 DllMain中不当操作导致死锁问题的分析--死锁介绍
最近在网上看到一些关于在DllMain中不当操作导致死锁的问题,也没找到比较确切的解答,这极大吸引了我研究这个问题的兴趣。我花了一点时间研究了下,正好也趁机研究了下进程对DllMain的调用规律。因为整个研究篇幅比较长,我觉得还是分开写比较能突出重点。本文先说说死锁。(转载请指明出于breaksoftware的csdn博客) 介绍死锁之前,我说一个我小时候听过的一...
2012-11-02 23:50:31 3796 1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人