最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(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)論 (共 條)

使用qq登录你需要登录后才可以评论。
聊城市| 武宁县| 东乡县| 东宁县| 长治市| 阿勒泰市| 兖州市| 恩平市| 壶关县| 娱乐| 舞阳县| 西丰县| 德州市| 闽清县| 乌鲁木齐县| 贵港市| 景洪市| 漾濞| 鄂伦春自治旗| 赤水市| 武强县| 项城市| 噶尔县| 鹤庆县| 梓潼县| 石台县| 宿松县| 大安市| 贵德县| 宝丰县| 博乐市| 永州市| 中超| 清河县| 安陆市| 延边| 登封市| 永修县| 海伦市| 交口县| 合川市|