從C++探究匯編.01

學習C++的必要性

  • 得益于它的高效性滋捶、穩(wěn)定性、跨平臺性惧财,所以應用范圍廣泛垮衷;
  • 是很多語言的老祖宗帘靡,理解C++相當理解了很多流行語言的本質(zhì);
  • C++是面向?qū)ο蠛兔嫦蜻^程都比較完善的語言戈次,更能接近本質(zhì)怯邪;
  • 學幾種不同的編程語言利于在更高的維度的視角理解代碼悬秉;
  • C++轉(zhuǎn)什么都快和泌,逼格高武氓;

程序的本質(zhì)

軟件仇箱、程序的執(zhí)行過程:

  • 硬盤(程序軟件剂桥,可執(zhí)行文件权逗,機器碼) -- 裝載 --> 內(nèi)存
  • 內(nèi)存 <--寫-- --讀--> CPU
  • CPU --控制 --> 計算機 (顯示器旬迹、音響奔垦、話筒椿猎、其他設備)

寄存器與內(nèi)存:

  • CPU會先將內(nèi)存中的數(shù)據(jù)存儲到寄存器中犯眠,然后再對寄存器中的數(shù)據(jù)進行計算
  • 假設內(nèi)存中有塊空間的值是3筐咧,現(xiàn)想把它加1存儲到另一塊內(nèi)存空間
    ○ CPU首先將原內(nèi)存空間的值放到AX寄存器中:mov eax 铺罢,原內(nèi)存空間
    ○ AX寄存器與1相加:add eax韭赘,1
    ○ 賦值給另一塊內(nèi)存空間:mov, 另一塊內(nèi)存空間势就,eax

語言的發(fā)展:

高級語言-編譯->匯編語言<-反編譯--編譯->機器語言-運行->計算機

  • 匯編語言與機器語言一一對應袖牙,每條機器指令都有對應的匯編指令
  • 匯編語言 --編譯-->機器語言贼陶,機器語言 --反匯編-->匯編語言
  • 高級語言 --編譯-->匯編語言/機器語言碉怔,但是反過來幾乎不可能轉(zhuǎn)換

編程語言之間的本質(zhì)區(qū)別

  • C++撮胧、C芹啥、OC墓怀、Swift代碼 --編譯器編譯--> 匯編代碼 <--> 機器碼
    ○ C++:輕易反匯編
  • JS傀履、PHP莉炉、Python代碼 --腳本引擎解析--> 中間代碼 --> 機器碼
    ○ JavaScript:腳本語言絮宁,瀏覽器解析绍昂;
    ○ PHP:腳本語言偿荷,Zend Engine解析
  • Java跳纳、Ruby代碼 --編譯器編譯--> class字節(jié)碼 --JVM虛擬機--> 機器碼

C++語言

  • 源文件擴展名.cpp
  • 入口是main函數(shù)
  • C++完全兼容C語言的語法

Cin棒旗、Cout

  • cin铣揉、cout:進行控制臺的輸入、輸出
  • getchar():等待鍵盤輸入台猴,如果敲擊回車就會讀取鍵盤輸入(可以阻斷程序結(jié)束饱狂,顯示控制臺內(nèi)容)

函數(shù)重載(Overload)

  • 規(guī)則
    ○ 函數(shù)名相同
    ○ 參數(shù)個數(shù)不同,參數(shù)類型不同讲婚,參數(shù)順序不同
  • 注意
    ○ 返回值類型與函數(shù)重載無關
    ○ 調(diào)用函數(shù)時,實參的隱式類型轉(zhuǎn)換可能會產(chǎn)生二義性

探索函數(shù)重載本質(zhì)

  • 定義函數(shù)名相同雏婶,參數(shù)類型不同的函數(shù)
  • 運行查看匯編代碼留晚,發(fā)現(xiàn)在Vistual Studio中,幾個函數(shù)在匯編中函數(shù)名完全一樣
    ○ 原因:其實名稱不一樣憨闰,但是VS的開發(fā)者做了優(yōu)化導致看起來都一樣
  • 用IDA pro工具查看:把程序的exe文件拽到ida需五,能識別到時pe文件(windows的可執(zhí)行文件)
    ○ functionwindow會展示所有函數(shù)的名稱宏邮;
    ○ 編譯分為Debug模式和Release模式蜜氨,Debug模式東西太多不方便查看埋哟;

    Debug模式:很多調(diào)試信息,生成的可執(zhí)行文件比較臃腫赤赊;
    Release模式:取出調(diào)試信息抛计,生成的可執(zhí)行文件比較精簡高效;

    ○ 查看Release模式下匯編波俄,由于默認開啟了編譯優(yōu)化,導致匯編中幾個函數(shù)直接轉(zhuǎn)成了main函數(shù)中的對應的幾行代碼趴生;
    ○ 關閉Release模式下的編譯優(yōu)化刘急,再次編譯叔汁,查看幾個函數(shù)名在匯編中分別變?yōu)閒uncname_0检碗、funcname_1、funcname_2折剃;
  • 本質(zhì)總結(jié):
    ○ 采用了name mangling/name decoration技術(shù)
    ○ C++編譯器默認會對符號名(如函數(shù)名)另假、進行改編己莺、修飾(命名傾軋)
    ○ 重載時會生成多個不同的函數(shù)名,不同編譯器(MSVC胜蛉、g++)有不同的生成規(guī)則
    ○ 通過IDA打開[VC_Release禁止優(yōu)化]可以查看
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市解虱,隨后出現(xiàn)的幾起案子漆撞,更是在濱河造成了極大的恐慌殴泰,老刑警劉巖浮驳,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異至会,居然都是意外死亡离咐,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進店門奉件,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事煤痕∠锏郏” “怎么了现拒?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵鹃锈,是天一觀的道長。 經(jīng)常有香客問我硝枉,道長廉丽,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任妻味,我火速辦了婚禮正压,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘弧可。我一直安慰自己蔑匣,他們只是感情好,可當我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布棕诵。 她就那樣靜靜地躺著裁良,像睡著了一般。 火紅的嫁衣襯著肌膚如雪校套。 梳的紋絲不亂的頭發(fā)上价脾,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天,我揣著相機與錄音笛匙,去河邊找鬼侨把。 笑死犀变,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的秋柄。 我是一名探鬼主播获枝,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼骇笔!你這毒婦竟也來了省店?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤笨触,失蹤者是張志新(化名)和其女友劉穎懦傍,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體芦劣,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡粗俱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了虚吟。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片寸认。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖稍味,靈堂內(nèi)的尸體忽然破棺而出废麻,到底是詐尸還是另有隱情,我是刑警寧澤模庐,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布烛愧,位于F島的核電站,受9級特大地震影響掂碱,放射性物質(zhì)發(fā)生泄漏怜姿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一疼燥、第九天 我趴在偏房一處隱蔽的房頂上張望沧卢。 院中可真熱鬧,春花似錦醉者、人聲如沸但狭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽立磁。三九已至,卻和暖如春剥槐,著一層夾襖步出監(jiān)牢的瞬間唱歧,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留颅崩,地道東北人几于。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像沿后,于是被迫代替她去往敵國和親沿彭。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,700評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 1.程序的本質(zhì) 1.軟件\程序的執(zhí)行過程 2.寄存器與內(nèi)存 CPU會先將內(nèi)存中的數(shù)據(jù)存儲到寄存器中得运,然后再對寄存器...
    一抹相思淚成雨閱讀 846評論 0 0
  • 001--初識匯編 我們在學習逆向開發(fā)之前,我們要了解一個基本的逆向原理.首先我們是逆向iOS系統(tǒng)上面的APP.那...
    GK_Caesar閱讀 246評論 0 0
  • 前言 最近準備學習匯編膝蜈,然后在B站上看到叫iOS小賢的作者發(fā)的視頻挺不錯,打算跟著學熔掺,文章是看視頻的筆記,最后有原...
    小涼介閱讀 1,319評論 2 8
  • 在逆向開發(fā)中非剃,非常重要的一個環(huán)節(jié)就是靜態(tài)分析.首先我們是逆向iOS系統(tǒng)上面的APP.那么我們知道,一個APP安裝在...
    霧中探雪閱讀 285評論 0 0
  • 今天青石的票圈出鏡率最高的恨锚,莫過于張藝謀的新片終于定檔了。 一張滿溢著水墨風的海報一次次的出現(xiàn)在票圈里倍靡,也就是老謀...
    青石電影閱讀 10,330評論 1 2