zoukankan      html  css  js  c++  java
  • 识别汇编指令里的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转移到数组中。

  • 相关阅读:
    [XJOI]noip43 T2多人背包
    Codeforces Round #198 (Div. 2)E题解
    [XJOI]noip40 T2统计方案
    Codeforces Round #198 (Div. 2)C,D题解
    Codeforces Round #198 (Div. 2)A,B题解
    9.19[XJOI] NOIP训练37
    9.18[XJOI] NOIP训练36
    kmp算法详解
    [模板系列] AC自动姬
    luogu1967[NOIP2013D1T3] 货车运输 (最大生成树+LCA)
  • 原文地址:https://www.cnblogs.com/pd520/p/2910230.html
Copyright © 2011-2022 走看看