随笔分类 -  Windows C/C++逆向分析

摘要:C++程序设计之四书五经(下篇)作者:荣耀我在上篇中“盘点”了TCPL和D&E以及入门教程、高效和健壮编程、模板和泛型编程等方面共十几本C++好书。冬去春来,让我们继续C++书籍精彩之旅。标准库当我还在研究院工作时,与同院另外两家研究所合作开发过一个大型水利枢纽调度集成项目。我们三家软件系统之间都要... 阅读全文
posted @ 2015-07-02 20:07 SolidMango 阅读(493) 评论(0) 推荐(0)
摘要:Windbg脚本和扩展工具开篇好长一段时间没写文章了,最近一直忙于为项目的可调式性做一些脚本和扩展工具,鉴于对windbg强大威力的震撼,以及相对较少的资料,笔者决定写一系列关于如何开发Windbg脚本和扩展命令的文章,您的支持是我最大的动力,希望本系列文章对您有所帮助。那么一个完整的windbg script是什么样子的呢?首先让我们看如下示例:$$ 该脚本是列出用户进程和栈r$t0=nt!PsActiveProcessHead.for(r$t1=poi(@$t0);(@$t1!=0)&(@$t1!=@$t0);r$t1=poi(@$t1)){r?$t2=#CONTAINING_RE 阅读全文
posted @ 2012-11-30 17:42 SolidMango 阅读(2239) 评论(6) 推荐(2)
摘要:General-Purpose RegistersThe 32-bit general-purpose registers EAX, EBX, ECX, EDX, ESI, EDI, EBP, and ESPare provided for holding the following items:• Operands for logical and arithmetic operations• Operands for address calculations• Memory pointersAlthough all of these registers are available for g 阅读全文
posted @ 2012-09-24 08:59 SolidMango 阅读(1322) 评论(0) 推荐(1)
摘要:我为什么要学习C++反汇编 写在开始从6月7日开始到今天已经有5天了,在这5天的业余时间(工作之余)里终于系统的完成了C++反汇编的大部分问题的学习,今天写篇总结,算是对这几天学习的总结。首先我想说明的一个问题就是我为什么要花时间研究C++反汇编?这事得从笔者遇到的一个问题开始说起,大约2周前我们项目做在开发过程中遇到了一个Crash的问题,由于只有客户提供的一个.dmp文件,我们只能从这个地方入手,说起来很奇怪,从C++代码的角度根本看不出来问题,我找来了一个传说中的公司的大牛,大牛就在我面前给我详细的分析了一遍这个转储文件,感觉他看反汇编出来的代码就像看C++源代码一样,看问题也会更透彻, 阅读全文
posted @ 2012-06-11 18:04 SolidMango 阅读(6238) 评论(12) 推荐(8)
摘要:最近在分析C++ dump 文件的时候觉得有必要将一些必要的反汇编东西总结一下以备别人参考,自己有时间的时候也可以进行更多的改进。下面通过一个简单的C++代码转成汇编代码后的详细解释说明一下C++和汇编的对应关系,以及如何识别汇编代码中进行的一些操作的意义。代码的调用关系如下图所示:完整C++代码下:intInternalFunctionA(intnSizeA1,intnSizeA2){intlocalnSizeA1=nSizeA1;intlocalnSizeA2=nSizeA2;intnFunctionA=localnSizeA1+localnSizeA2;returnnFunctionA; 阅读全文
posted @ 2012-06-08 13:34 SolidMango 阅读(3865) 评论(12) 推荐(3)
摘要:上文说明了C++反汇编后的EBP,ESP寄存器都是做什么用的,相信大家已经有所了解,如果有没看过的请参考下文:http://www.cnblogs.com/pugang/archive/2012/05/25/2518499.html本文不会对其再做过多的讲解,如果还有问题,欢迎大家留言讨论。首先明确本文要解决的问题:在没有源代码的情况下如何看明白我们的汇编代码中哪些是局部变量。为了便于说明我将C++代码和汇编代码在一起,完整代码如下:intInternalFunctionA(intnSizeA1,intnSizeA2){00401000pushebp00401001movebp,esp0040 阅读全文
posted @ 2012-06-07 18:47 SolidMango 阅读(3072) 评论(0) 推荐(2)
摘要:详解C++代码反汇编后的堆栈寄存器EBP和ESP最近在分析一个进程崩溃的严重问题,其中有些过程分析需要对ebp, esp 有清晰的理解,对于ebp 和esp 相信大家都很熟悉了,但是为了使本文自成体系,我还是解释一下。ebp--栈底指针esp--栈顶指针如图所示,简化后的代码调用过程如下:void Layer02(){ int b = 2;}void Layer01(){ int a = 1; Layer02();}那么函数执行过程中ebp和esp是如何变化的呢?如下是反汇编后的代码:void Layer02(){00413700push ebp00413701mov ebp,esp 0041 阅读全文
posted @ 2012-05-25 18:35 SolidMango 阅读(15026) 评论(7) 推荐(6)