五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

【經(jīng)驗(yàn)分享】如何查看C++生成的匯編代碼?

2021-11-03 16:32 作者:C語(yǔ)言編程__Plus  | 我要投稿

想要真正的理解一段代碼到底是怎么執(zhí)行的,還是要從匯編的層面去看,那怎么得到一段c++代碼所對(duì)應(yīng)的匯編代碼呢,下面為你介紹三種方式。


1. gcc編譯生成XXX.s文件

一般來(lái)講,給你一個(gè)cpp文件,比如test.cpp,然后我們編譯都是直接g++ test.cpp這樣簡(jiǎn)單直接的方式,但其實(shí)它中間有很多個(gè)過(guò)程的,包含預(yù)處理、編譯、鏈接等過(guò)程,而這其中的編譯這個(gè)過(guò)程其實(shí)就是生成了匯編文件。

比如對(duì)于一個(gè)cpp文件,我們執(zhí)行下列命令:

這樣生成test.s就是test.cpp所對(duì)應(yīng)的匯編代碼,當(dāng)然我們也可以一步到位,直接使用g++ -S test.cpp -o test.s也是可以的。

2. 使用objdump命令得到匯編代碼

linux下的objdump命令用于從可執(zhí)行文件或者目標(biāo)文件中顯示某些信息,所以用它也可以得到可執(zhí)行文件對(duì)應(yīng)的匯編代碼。

比如對(duì)于test.cpp,可以使用如下的命令得到匯編指令:

通過(guò)這樣的方式能看到可執(zhí)行文件所對(duì)應(yīng)的匯編指令。

3. 使用gdb命令得到匯編代碼

第1、2兩種情況下得到的都是編譯期間生成的匯編指令,但因?yàn)橛行┐a是運(yùn)行時(shí)才能確定的原因,所以運(yùn)行時(shí)的匯編指令與編譯時(shí)并不完全一致,比如棧的地址,編譯期間其實(shí)是不知道的,運(yùn)行時(shí)才會(huì)真正的分配。

我們可以使用gdb來(lái)獲取每一行代碼運(yùn)行時(shí)所對(duì)應(yīng)的匯編指令,首先使用g++ -g test.cpp -o test來(lái)得到可執(zhí)行文件,然后gdb ./test進(jìn)入gdb模式,比如對(duì)于這段c++代碼:

使用如下gdb命令可得到對(duì)應(yīng)的匯編指令:

這樣看起問(wèn)題來(lái)就很方便了,我們能看到每一行c++代碼對(duì)應(yīng)的匯編指令是什么,對(duì)于初學(xué)者而言,使用此種方式是最為方便的。

好了,本篇文章就為大家介紹到這里,覺(jué)得內(nèi)容對(duì)你有用的話,記得支持一下喲!

如果你也喜歡編程,想好C/C++的話!如果你也想讓自己成為一個(gè)具有真材實(shí)料的厲害的程序員,不妨從現(xiàn)在開(kāi)始!

微信公眾號(hào):C語(yǔ)言編程學(xué)習(xí)基地

C語(yǔ)言零基礎(chǔ)入門教程(83集全)

整理分享(多年學(xué)習(xí)的源碼、項(xiàng)目實(shí)戰(zhàn)視頻、項(xiàng)目筆記,基礎(chǔ)入門教程)

歡迎轉(zhuǎn)行和學(xué)習(xí)編程的伙伴,利用更多的資料學(xué)習(xí)成長(zhǎng)比自己琢磨更快哦!



【經(jīng)驗(yàn)分享】如何查看C++生成的匯編代碼?的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
芮城县| 绥阳县| 永福县| 岢岚县| 沽源县| 鄂温| 台中市| 德昌县| 淄博市| 宜阳县| 平阴县| 辽宁省| 泗阳县| 黔东| 古丈县| 鄂伦春自治旗| 屏南县| 康保县| 江都市| 北川| 新建县| 宁陵县| 呼和浩特市| 洛扎县| 兴化市| 光泽县| 当雄县| 偃师市| 岐山县| 大连市| 林西县| 日照市| 蒲城县| 汾西县| 新干县| 自贡市| 丘北县| 靖州| 新绛县| 慈溪市| 安阳县|