如何快速查看將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;
}
復制代碼

結構體反匯編代碼:




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM