文章目錄
- div函式有回傳值的情況
- div函式沒有回傳值的情況
div函式有回傳值的情況
先用Visual C++寫一個C語言程式:
#include<stdio.h>
int div(int a , int b){
return a/b;
}
int main(){
int result = div(10,5);
printf("test!\n");
printf("%d\n",result);
return 0;
}
用OD打開動態除錯,找到div函式,0x5和0xA先后入堆疊然后呼叫div函式:

當div函式運行結束時,回傳值由eax保存:

回傳main函式之后,將回傳值eax保存在本地變數[local.1]上:

之后輸出的時候再把值從本地變數[local.1]上取出來給eax,然后eax入堆疊、%d\n入堆疊:

最后輸出,
div函式沒有回傳值的情況
#include<stdio.h>
void div(int * a , int * b,int c){
*a = *b / c;
}
int main(){
int m = 2;
int n = 8;
int * a = &m;
int * b = &n;
div(a, b,2);
printf("%d\n",*a);
printf("test!\n");
return 0;
}
先找到div函式,將變數[local.4]=0019FF38(地址上的值是00000008)放到edx入堆疊,將變數[local.3]=0019FF3C(地址上的值是00000002)放到eax入堆疊:

進入div函式,將引數2[arg.2](值為8)的值給eax,之后進行過除法idiv [arg.3],用eax的值去除以引數3[arg.3](值為2),結果4保存在eax中,之后將eax的值給引數1[arg.1]:

回傳main函式之后,就是將變數[local.3]=19FF3C的值給ecx,再將ecx=19FF3C地址上的值4取出來給edx,

最后edx=00000004入堆疊,輸出,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/229324.html
標籤:其他
上一篇:JAVA程式員的必殺技,面試中常考的8個經典演算法題,程序精妙,代碼精煉
下一篇:智能視頻監控的發展和優勢
