转自:https://www.cnblogs.com/jack204/archive/2011/12/02/2271884.html 阅读:https://www.cnblogs.com/qiangua/p/3717691.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;}结构体反汇编代码: