识别汇编指令里的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转移到数组中。
原文链接: https://www.cnblogs.com/pd520/archive/2013/02/12/2910230.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/77869

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月9日 下午6:16
下一篇 2023年2月9日 下午6:16

相关推荐