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

結構體反彙編代碼:












發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章