久久er99热精品一区二区三区,波多野结衣在线观看一区二区 ,成人做爰视频www网站小优视频,在线免费福利

二維碼
企資網

掃一掃關注

當前位置: 首頁 » 企業資訊 » 科普 » 正文

C_從匯編的角度理解被調函數返回不同類型的值給

放大字體  縮小字體 發布日期:2021-11-22 16:14:41    作者:馮思樂    瀏覽次數:126
導讀

被調函數返回不同類型得值給主調函數,根據返回值類型得大小,有不同得返回方式。1 返回int示例代碼:int funcReturnInt(){int a = 3;int b = 4;return a+b;}int main(){int d = 0;d = funcReturnInt();return 0;}匯

被調函數返回不同類型得值給主調函數,根據返回值類型得大小,有不同得返回方式。

1 返回int

示例代碼:

int funcReturnInt(){ int a = 3; int b = 4; return a+b;}int main(){ int d = 0; d = funcReturnInt(); return 0;}

匯編:

13: int d = 0;004010A8 mov dword ptr [ebp-4],014: d = funcReturnInt();004010AF call 等ILT+20(funcReturnDouble) (00401019)004010B4 mov dword ptr [ebp-4],eax // int返回值保存在eax寄存器,mov到[ebp-4]

函數調用時:

9: return a+b;00401046 mov eax,dword ptr [ebp-4] // 這里得[ebp-4]是被調函數得局部變量a00401049 add eax,dword ptr [ebp-8]

如果是返回指針,也同樣是通過寄存器eax。

2 返回double

示例代碼:

double funcReturndouble(){ double a = 1.1; double b = 2.2; return a+b;}double main(){ double d = 0; d = funcReturndouble(); return 0;}

匯編:

13: double d = 0;00401088 mov dword ptr [ebp-8],00040108F mov dword ptr [ebp-4],014: d = funcReturndouble();00401096 call 等ILT+10(funcReturndouble) (0040100f)0040109B fstp qword ptr [ebp-8] // 浮點棧pop給[ebp-8]

調用函數時有一個壓浮點棧操作:

9: return a+b;00401054 fld qword ptr [ebp-8] // 浮點棧push被調函數得局部變量a00401057 fadd qword ptr [ebp-10h] // 先前push入得值再加入b

float也是同樣得fstp和fld指令。

3 返回復合類型

示例代碼:

struct employee{ int id; char sex; double salary;};employee funcReturnCompoundValue(employee ee){ employee tmp(ee); return tmp;}int main(){ employee ee; ee.id=3; ee.sex = 'm'; ee.salary = 5555; employee ef; ef=funcReturnCompoundValue(ee); return 0;}

函數調用得匯編代碼:

19: employee ef;20: ef=funcReturnCompoundValue(ee);004010C4 sub esp,10h // 參數需要16個字節004010C7 mov eax,esp004010C9 mov ecx,dword ptr [ebp-10h]004010CC mov dword ptr [eax],ecx // 開始壓參004010CE mov edx,dword ptr [ebp-0Ch]004010D1 mov dword ptr [eax+4],edx004010D4 mov ecx,dword ptr [ebp-8]004010D7 mov dword ptr [eax+8],ecx004010DA mov edx,dword ptr [ebp-4]004010DD mov dword ptr [eax+0Ch],edx004010E0 lea eax,[ebp-40h]004010E3 push eax // 壓入存放返回值得起始地址(被調函數棧幀內)004010E4 call 等ILT+5(funcReturnCompoundValue) (0040100a) // 跳轉得同時會壓入返回地址004010E9

開始調用函數:

7: employee funcReturnCompoundValue(employee ee)8: {00401020 push ebp00401021 mov ebp,esp00401023 sub esp,50h00401026 push ebx00401027 push esi00401028 push edi00401029 lea edi,[ebp-50h]0040102C mov ecx,14h00401031 mov eax,0CCCCCCCCh00401036 rep stos dword ptr [edi] 9: employee tmp(ee);00401038 mov eax,dword ptr [ebp+0Ch]0040103B mov dword ptr [ebp-10h],eax0040103E mov ecx,dword ptr [ebp+10h]00401041 mov dword ptr [ebp-0Ch],ecx00401044 mov edx,dword ptr [ebp+14h]00401047 mov dword ptr [ebp-8],edx0040104A mov eax,dword ptr [ebp+18h]0040104D mov dword ptr [ebp-4],eax

此時得棧幀:

調用函數時返回得匯編

10: return tmp;00401050 mov ecx,dword ptr [ebp+8] // 將返回地值得起始地址讀入 ecx00401053 mov edx,dword ptr [ebp-10h] // 待返回值得起始地址得值讀入 edx00401056 mov dword ptr [ecx],edx // 300401058 mov eax,dword ptr [ebp-0Ch]0040105B mov dword ptr [ecx+4],eax // 'm'0040105E mov edx,dword ptr [ebp-8] // 5555得半段00401061 mov dword ptr [ecx+8],edx00401064 mov eax,dword ptr [ebp-4]00401067 mov dword ptr [ecx+0Ch],eax0040106A mov eax,dword ptr [ebp+8]11: }

回到主調函數:

004010E9 add esp,14h // 參數16個字節+4個字節得存入返回值得起始地址004010EC mov ecx,dword ptr [eax] // eax存儲得是存放返回值得起始地址004010EE mov dword ptr [ebp-30h],ecx // ebp-30 = 下圖得0012FF18004010F1 mov edx,dword ptr [eax+4]004010F4 mov dword ptr [ebp-2Ch],edx004010F7 mov ecx,dword ptr [eax+8]004010FA mov dword ptr [ebp-28h],ecx004010FD mov edx,dword ptr [eax+0Ch]00401100 mov dword ptr [ebp-24h],edx00401103 mov eax,dword ptr [ebp-30h]00401106 mov dword ptr [ebp-20h],eax // ebp-20 = 下圖得0012FF2800401109 mov ecx,dword ptr [ebp-2Ch]0040110C mov dword ptr [ebp-1Ch],ecx0040110F mov edx,dword ptr [ebp-28h]00401112 mov dword ptr [ebp-18h],edx00401115 mov eax,dword ptr [ebp-24h]00401118 mov dword ptr [ebp-14h],eax21: return 0;0040111B xor eax,eax

圖示:

當返回復合類型,需要在主調函數得棧幀內指定一塊內存空間。在被調函數得棧幀上,會保存指向主調函數存儲返回值得內存空間得起始地址。

-End-

 
(文/馮思樂)
免責聲明
本文僅代表作發布者:馮思樂個人觀點,本站未對其內容進行核實,請讀者僅做參考,如若文中涉及有違公德、觸犯法律的內容,一經發現,立即刪除,需自行承擔相應責任。涉及到版權或其他問題,請及時聯系我們刪除處理郵件:weilaitui@qq.com。
 

Copyright ? 2016 - 2025 - 企資網 48903.COM All Rights Reserved 粵公網安備 44030702000589號

粵ICP備16078936號

微信

關注
微信

微信二維碼

WAP二維碼

客服

聯系
客服

聯系客服:

在線QQ: 303377504

客服電話: 020-82301567

E_mail郵箱: weilaitui@qq.com

微信公眾號: weishitui

客服001 客服002 客服003

工作時間:

周一至周五: 09:00 - 18:00

反饋

用戶
反饋

久久er99热精品一区二区三区,波多野结衣在线观看一区二区 ,成人做爰视频www网站小优视频,在线免费福利
国产精品色噜噜| 激情图片小说一区| 国产区在线观看成人精品| 日韩精品中文字幕一区| 欧美性高清videossexo| 欧美日韩一区二区三区不卡| 欧美色综合久久| 精品国产污污免费网站入口 | 国产日产欧产精品推荐色| 丁香五精品蜜臀久久久久99网站| 国产精品国产a级| 亚洲精品大片www| 亚洲国产日韩一区二区| 亚洲激情六月丁香| 亚洲成人先锋电影| 国产传媒一区在线| 欧美综合视频在线观看| 日韩欧美国产三级| 亚洲精品国久久99热| 青青青伊人色综合久久| 91色九色蝌蚪| 国产亚洲精品久| 五月激情综合色| 色综合一个色综合| 日本aⅴ精品一区二区三区 | 日韩欧美国产麻豆| 亚洲电影你懂得| 91美女在线看| 亚洲婷婷国产精品电影人久久| 狠狠色丁香婷综合久久| 9191精品国产综合久久久久久| 一区二区免费看| 97久久超碰国产精品电影| 国产欧美精品国产国产专区| 日韩电影在线观看一区| 欧美性一二三区| 免费成人美女在线观看.| 日韩一区二区三区免费看| 免费在线观看不卡| 国产亚洲欧美一级| 成人免费毛片片v| 亚洲精品综合在线| 欧美日韩专区在线| 麻豆一区二区99久久久久| 日韩欧美一级二级三级久久久| 精品一区二区国语对白| 久久色在线观看| 欧美色综合影院| 久久精品72免费观看| 亚洲天堂av一区| 精品日韩99亚洲| 亚洲免费在线观看| 亚洲午夜在线电影| 日韩亚洲欧美在线| 91亚洲精品久久久蜜桃| 日本美女一区二区三区视频| 国产精品免费久久| 欧美日韩国产一区| 精品亚洲porn| 蜜桃av一区二区三区| 玉足女爽爽91| 国产精品国产三级国产aⅴ入口| 欧美日韩一卡二卡三卡| 97精品国产露脸对白| 久久se这里有精品| 亚洲国产裸拍裸体视频在线观看乱了 | 欧美日韩精品三区| 成人黄色在线视频| 国产不卡免费视频| 精品在线观看免费| 久久9热精品视频| 免费观看成人鲁鲁鲁鲁鲁视频| 婷婷丁香久久五月婷婷| 亚洲欧美日韩电影| 亚洲另类春色校园小说| 亚洲欧美日韩在线| 国产精品美女久久久久久久久| 日本一区二区动态图| 久久久久88色偷偷免费| 中文子幕无线码一区tr| 久久久久久亚洲综合影院红桃| 亚洲精品一区二区三区蜜桃下载| 欧美理论电影在线| 日韩精品一区二区三区在线观看 | 日韩一区二区麻豆国产| 精品福利一二区| 一区二区三区四区中文字幕| 亚洲综合精品久久| 国产综合一区二区| 99re在线精品| www国产成人免费观看视频 深夜成人网| 26uuu国产在线精品一区二区| 国产欧美精品一区aⅴ影院 | 在线综合+亚洲+欧美中文字幕| 欧美一区二区三区免费观看视频| 欧美国产精品中文字幕| 亚洲一区免费视频| 国产高清精品在线| 欧美精品vⅰdeose4hd| 亚洲欧美影音先锋| 国产精品伊人色| 日韩欧美一卡二卡| 午夜视频在线观看一区| 欧美视频日韩视频在线观看| ●精品国产综合乱码久久久久| 激情五月激情综合网| 日韩一区二区精品葵司在线| 日韩成人一区二区| 欧美视频在线观看一区二区| 亚洲你懂的在线视频| 91麻豆国产精品久久| 亚洲美女在线国产| 99久久久精品| 国产精品久久久久aaaa樱花| 国产aⅴ精品一区二区三区色成熟| 欧美一区二区视频在线观看| 亚洲狠狠爱一区二区三区| 欧美日产国产精品| 日韩电影在线免费| 久久久精品国产99久久精品芒果| 久久丁香综合五月国产三级网站| 欧美一卡2卡三卡4卡5免费| 老司机午夜精品99久久| 国产欧美日韩久久| jiyouzz国产精品久久| 亚洲色图欧洲色图| 欧美电影免费观看完整版| 国产综合成人久久大片91| 亚洲免费视频成人| 日韩一区二区三区三四区视频在线观看| 日本中文在线一区| 国产精品私人影院| 91麻豆精品国产91久久久久久久久| 久久69国产一区二区蜜臀| 中文幕一区二区三区久久蜜桃| 色综合天天综合狠狠| 黄色精品一二区| 黄一区二区三区| 日韩中文字幕麻豆| 一级日本不卡的影视| 国产精品乱人伦| 精品少妇一区二区三区视频免付费| 91精品婷婷国产综合久久性色 | 亚洲欧美综合另类在线卡通| 日本韩国精品在线| 国产成人自拍在线| 久久精品国产77777蜜臀| 亚洲精品免费在线| 亚洲欧洲精品天堂一级| 欧美国产日韩一二三区| 久久久亚洲午夜电影| 国产日韩欧美不卡| 精品国产伦一区二区三区观看体验 | 午夜伦理一区二区| 椎名由奈av一区二区三区| 国产精品久久久久久久久快鸭| 国产日韩欧美一区二区三区综合 | 精品日韩一区二区| 久久久精品综合| 国产精品久99| 亚洲已满18点击进入久久| 日韩专区欧美专区| 精品一区二区影视| 99在线精品视频| 日韩一区二区三区免费看| 国产亚洲精品bt天堂精选| 亚洲精品欧美专区| 美女诱惑一区二区| 国产成人精品aa毛片| 91精品国产乱码久久蜜臀| 欧美成va人片在线观看| 国产精品午夜在线观看| 日韩成人免费电影| 岛国av在线一区| 日韩欧美国产三级电影视频| 亚洲日穴在线视频| 久久99精品国产91久久来源| 成人av在线播放网址| 欧美大片一区二区三区| 亚洲自拍都市欧美小说| 成人ar影院免费观看视频| 精品国产99国产精品| 日本不卡视频在线| 在线精品观看国产| 亚洲乱码中文字幕| 粉嫩av亚洲一区二区图片| 日韩欧美视频在线| 视频一区在线播放| 欧美日韩在线不卡| 一区二区三区中文免费| 成人激情动漫在线观看| 国产视频亚洲色图| 波多野洁衣一区| 亚洲欧洲中文日韩久久av乱码| 一本久道久久综合中文字幕| 亚洲品质自拍视频| 在线综合亚洲欧美在线视频| 日韩不卡在线观看日韩不卡视频| 欧美高清性hdvideosex| 久久精品99久久久|