• 如何快速查看将C反汇编的代码


    https://www.cnblogs.com/jack204/archive/2011/12/02/2271884.html

    查看反汇编主要的思路在于将 流程,处理,算法 区分开来。
    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;
    }
    复制代码

    结构体反汇编代码:



  • 相关阅读:
    ISO 学习笔记 2015-03-15
    IOS 学习笔记 20150314
    IOS 学习日志 2015-3-13
    Letter Combinations of a Phone Number
    anagrams
    Pow(x, n)
    Distinct Subsequences
    Excel Sheet Column Number
    MIT 三课程
    c++ 重载,覆盖,重定义
  • 原文地址:https://www.cnblogs.com/twodog/p/12138033.html
Copyright © 2020-2023  润新知