
c/c++反汇编和逆向分析学习笔记
csdn_KONG
吉林大学在校学生
展开
-
c&c++反汇编与逆向分析学习笔记(4)--启动函数和用户入口
VC++开发的程序,在调试时总是从main或WinMain函数开始,于是很多开发者误认为它们是程序的第一条指令执行处,这个认识其实是错误的。main或WinMain也是一个函数,也需要一个调用者。在它们别调用前,编译器其实已经做了很多事情,所以main或WinMain应该是“语法规定的用户入口”,而不是“应用程序入口”。在应用程序被操作系统加载时,操作系统会分析执行文件内的数据,分配相关资源,读取原创 2015-04-10 10:22:29 · 1244 阅读 · 0 评论 -
c&c++反汇编与逆向分析学习笔记(7)--乘法表达式
乘法运算对应的汇编指令有有符号imul和无符号mul两种。由于乘法指令的执行周期较长,在编译过程中,编译器会先尝试将乘法转换成加法,或使用移位等周期较短的指令。当他们都不可转换时,才会使用乘法指令。 //C++源码说明 //防止被视为无效代码,将每条运算作为printf参数使用 //printf函数的讲解省略 int nVarOne = ar原创 2015-04-11 17:29:41 · 934 阅读 · 0 评论 -
c&c++反汇编与逆向分析学习笔记(9)--自增和自减
自增和自减分为两种: 1>自增自减运算符在语句块之后,先执行语句块,再执行自增自减 2>自增自减运算符在语句块之前,先执行自增自减,再执行语句块通常,自增和自减是被拆分成两条汇编指令执行的。 //C++源代码 int nVarOne = argc; int nVarTwo = argc; //变量后缀自增参与表达式运算 nV原创 2015-04-11 21:26:40 · 1093 阅读 · 0 评论 -
c&c++反汇编与逆向分析学习笔记(6)--减法表达式
减法运算对应于汇编指令SUB,虽然计算机只会做加法,但是可以通过补码转换将减法转换为加法形式来完成。 //C++源码 int nVarOne = argc;//变量定义 int nVarTwo = 0; scanf("%d",&nVarTwo);//获取变量nVarTwo的数据,使用scanf防止变量被常量化 nVarOne = nVarOne -原创 2015-04-11 11:32:43 · 975 阅读 · 0 评论 -
c&c++反汇编与逆向分析学习笔记(8)--除法表达式
除法运算对应的汇编指令分为有符号idiv和无符号div两种。除法指令的执行周期较长,效率也低,所以编译器想尽办法用其他运算指令代替除法指令。C++中的除法和数学中的除法不同。在C++中,除法运算不保留余数,有专门的的求取余数的运算(运算符为%),也称为取模运算。对于整数除法,C++的规则是仅仅保留整数部分,小数部分完全舍弃。 在C语言中 两个无符号数相除,结果为无符号数原创 2015-04-11 19:50:07 · 1610 阅读 · 0 评论 -
c&c++反汇编与逆向分析学习笔记(3)--基本数据类型表现形式
千万不要小看这些数据类型,我相信你肯定不知道float型数在变参函数参数传值时发生了什么。“小尾方式”在内存中存放数据,即按字节存放,高数据位存放在内存的低端,低数据位放在内存的高端。比如十六进制数0x12345678在内存中,将会存放为78 56 34 12。而大端则存放为 12 34 56 78。X86体系结构为小尾方式。整数类型 C++提供的整数类型有三种:int、原创 2015-04-05 22:17:16 · 1747 阅读 · 0 评论 -
c&c++反汇编与逆向分析学习笔记(2)--反汇编静态分析工具IDA
所谓“静态分析”,是相对于前面提到的“动态分析”而言的。在“动态分析”过程中,调试器加载程序,并以调试模式运行起来,分析者可以在程序的执行过程中观察程序的执行流程和计算记过。但是,在实际分析中,很多场合不方便运行目标,比如软件的某一模块(无法单独运行)、病毒程序、设备环境不兼容导致的无法运行……那么,在这个时候,需要直接把程序的二进制代码翻译程汇编语言,方便程序员阅读。想这样由目标软件的二进制代码原创 2015-04-05 17:42:17 · 8633 阅读 · 1 评论 -
c&c++反汇编与逆向分析学习笔记(1)--调试工具OllyDBG
我学习用的数据是钱松林和赵海合著的《C反汇编与逆向分析技术揭秘》,这本书绝对可以帮助程序员提高自己,修炼自己的内功。在软件的开发过程中,程序员会使用一些调试工具,以便高效地找出软件中存在的错误。而在逆向分析领域,分析者也会利用相关的调试工具来分析软件的行为并验证结果。其中OllyDBG是逆向分析中必不可少的一款软件,使用它,程序会按调试者的一员以指令为单位的执行。调试者可以随时中断目标的指原创 2015-04-04 17:14:00 · 10799 阅读 · 1 评论 -
c&c++反汇编与逆向分析学习笔记(5)--加法的求值过程和编译器优化
学了逆向分析之后,发现,虽然我们写了程序,但是程序并不是按完全按照我们写的代码一句一句执行的,很有可能一大部分代码都被编译器优化修改了。只有了解这些东西,我们才能写出性能更加优益,可读性与精炼并存的代码。 在VC++6.0中,算术运算和其他传递计算结果的代码组合起来才能被视为一条有效的语句,如赋值运算或函数的参数传递。单独的运算虽然可以编译通过,但是并不会生成代码。因原创 2015-04-10 11:34:55 · 1259 阅读 · 0 评论 -
c&c++反汇编与逆向分析学习笔记(10)--关系及逻辑运算
在编译器眼里,一切简单的东西都复杂了,一切为了CPU服务。我们来看编译器是怎么处理关系及逻辑运算的,又是怎么对其进行优化的。gogogo!计算机是如何判断"==","!=",">=",""," 在VC6.0中,是利用各种类型的跳转来实现两者间的关系比较的,根据比较结果所影响的标记位来选择对应的条件跳转指令。如何选择条件跳转指令,需要根据两个进行比较的数值所知用到的关系运算,不原创 2015-04-14 11:35:46 · 1065 阅读 · 0 评论