zoukankan      html  css  js  c++  java
  • 如何快速查看将C反汇编的代码

    查看反汇编主要的思路在于将 流程,处理,算法 区分开来。
    1 函数调用
    原C代码:

    int sum(int, int);
    int main(){
    int c = sum(1, 2);
    printf("c=%d", c);
    return 0;
    }

    int sum(int a, int b){
    int c = a + b;
    return c;
    }

    反汇编的函数调用主要使用bp-frame式(不懂自己去查去)的调用方式:

    mmm

    然后是被调用的sum:

    ss

    2  for循环
    基本的for循环是这样的:

    int sum(int b){
    int c, i=0;
    c = 0;
    for(i=0; i<4; i++){
    c += b;
    }
    return c;
    }

    然后反汇编后,for循环一般是以下的形式的:

    下面看看上面的c代码反汇编后变成了什么:

    3 do-while循环
    例子代码为:

    int sum(int b){
    int c, i=0;
    c = 0;
    do{
    c += b;
    i++;
    }while(i < 4);
    return c;
    }

    do-while循环的基本结构:


    然后我例子代码的反汇编为:

    4 while循环|
    例子代码为:

    int sum(int b){
    int c, i=0;
    c = 0;
    while(i < 4){
    c += b;
    }
    return c;
    }

    while反汇编的基本结构为:


    上述代码反汇编的结果为:

    5 if-else分支判断
    例子代码的c语言为:

    int sum(int b){
    int c, i=0;
    c = 0;
    if(i<0){
    c = -1;
    }else if(i<1){
    c = 1;
    }else if(i<3){
    c = 3;
    }

    return c;
    }

    if-else分支的基本结构:


    然后上述代码的反汇编结果为:

    6 switch-case 判断分支:

    int sum(int b){
    int c, i=0;
    c = 0;
    switch(i){
    case 1:
    c = -1;
    break;
    case 2:
    c = 0;
    break;
    case 3:
    c = 1;
    break;
    default:
    c = 2;
    }
    return c;
    }


    反汇编结果很直接:

     7 使用结构体:
    结构体的例子代码:

    int sum(int b){

    jack j;
    pjack pj = &j;


    j.one = 1;
    j.two = 2;
    pj->one = 3;
    pj->two = 4;
    return pj->two;
    }

    结构体反汇编代码:













  • 相关阅读:
    junit spring
    DFU协议介绍
    USB枚举过程
    触摸板单点描述符
    Linux下使用codeblocks交叉编译ARM-LINUX-GCC程序
    树莓派 原理图 摄像头接口定义
    usb描述符详细讲解
    常用的算法思想
    STM32f407 DCMI方式驱动 OV2640
    linux echo命令-转
  • 原文地址:https://www.cnblogs.com/jack204/p/2271884.html
Copyright © 2011-2022 走看看