识别汇编指令里的C和C++代码(一)

      C系列编程语言(C、C++)是应用最广泛的一类编程语言,并且无疑是Windows和Unix服务器程序使用最多的编程语言,而这两类应用程序正是逆向分析的主要对象,因此掌握C语言对于逆向分析而言至关重要。

      除了了解C语言以外,我们还应用熟悉C语言如何编译为对应的汇编指令,并理解如何用汇编的形式表示C变量、指针、函数和内存分配等。

     先看一下怎么在C++里声明一个用于计数的整数

int number;
...more code...
number++;

     对应的汇编代码是:

number dw 0
。。。more code。。。
mov eax,number
inc eax
mov number,eax

     在这里的例子里,先用DW指令定义整数number,接着把它放入EAX,并把EAX加1,然后把EAX重新放入number。

再来看一个简单的C++ if语句。

int number;
if (number<0)
{
  ...more...
}

下面是这个if语句对应的汇编代码

number dw 0
mov eax,number
or eax,eax
jge label
<no>
label :<yes>

在这个例子里,我们用DW指令定义number,然后把存储在number中的值移入EAX,如果number大于或等于0,执行JGE跳到lable。

接下来看一个使用数组的例子。

int array[4];
...more code...
array[2]=9;

在这个例子中定义一个有4个元素的数组array,并把其中的一个元素设为9,相应的汇编代码如下:

array dw 0,0,0,0
...more code...
mov ebx,2
mov array[ebx],9

这个例子中,我们声明了一个数组,然后通过EBX把9转移到数组中。

posted @ 2013-02-12 11:19  PD520C  阅读(710)  评论(0编辑  收藏  举报