C語(yǔ)言與匯編語(yǔ)言對(duì)照分析.doc
《C語(yǔ)言與匯編語(yǔ)言對(duì)照分析.doc》由會(huì)員分享,可在線閱讀,更多相關(guān)《C語(yǔ)言與匯編語(yǔ)言對(duì)照分析.doc(20頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
. 游戲通常會(huì)包含各種各樣的功能,如戰(zhàn)斗系統(tǒng)、UI渲染、經(jīng)濟(jì)系統(tǒng)、生產(chǎn)系統(tǒng)等,每個(gè)系統(tǒng)又包含各式各樣子功能,如傷害判定、施法、使用道具、角色移動(dòng)、玩家之間交易等等。這些游戲功能在代碼實(shí)現(xiàn)中往往少不了條件判斷(如傷害判定)、循環(huán)(遍歷物品列表,播放游戲動(dòng)畫)等。 在逆向過(guò)程中如果可以從匯編語(yǔ)言識(shí)別出對(duì)應(yīng)的語(yǔ)法結(jié)構(gòu),在分析過(guò)程中將匯編代碼轉(zhuǎn)換為C語(yǔ)言語(yǔ)法結(jié)構(gòu),可以幫助對(duì)程序執(zhí)行流程的理解。 下面分別介紹最常見(jiàn)的邏輯語(yǔ)法結(jié)構(gòu): a)if...else b)switch...case c)for、while 注:文中使用的反匯編工具為IDA 一、if...else 匯編代碼: if...else結(jié)構(gòu)比較固定,通常包含cmp指令、jcc指令以及滿足條件后執(zhí)行的指令塊。 if...else結(jié)構(gòu)可以串聯(lián),串聯(lián)后的if...else有明顯的代碼塊邊界,逆向工具通??梢詫⒋a塊標(biāo)識(shí)出來(lái)(圖中虛線)。 二、switch...case 1.一個(gè)簡(jiǎn)單switch...case 匯編代碼: 上圖顯示了switch...case基本的結(jié)構(gòu):a)跳轉(zhuǎn)表達(dá)式;b)分支代碼;c)跳轉(zhuǎn)表 a)跳轉(zhuǎn)表達(dá)式 其中l(wèi)oc_401235代碼塊對(duì)應(yīng)switch...case中default分支。 當(dāng)nGameEvent>4時(shí),跳轉(zhuǎn)到loc_401235代碼塊,即default分支。 當(dāng)nGameEvent<=4時(shí),根據(jù)跳轉(zhuǎn)表達(dá)式進(jìn)行跳轉(zhuǎn): jmpds:off_40123C[nGameEvent*4] 其中off_40123C為跳轉(zhuǎn)表地址,跳轉(zhuǎn)表中每一項(xiàng)代表一個(gè)32位地址(4個(gè)字節(jié)),當(dāng)nGameEvent為0按第一項(xiàng)地址跳轉(zhuǎn),當(dāng)nGameEvent為1按第二項(xiàng)地址跳轉(zhuǎn),依次類推。 b)分支代碼 各個(gè)分支的處理邏輯都在這里,示例代碼中僅僅簡(jiǎn)單的調(diào)用對(duì)應(yīng)函數(shù)。 (PS:這里用jmp而不用call是編譯器優(yōu)化的結(jié)果) c)跳轉(zhuǎn)表 跳轉(zhuǎn)表實(shí)際是一個(gè)地址數(shù)組,存放了每個(gè)跳轉(zhuǎn)分支的地址(32位絕對(duì)地址),當(dāng)nGameEvent為0時(shí),跳轉(zhuǎn)表達(dá)式讀取數(shù)組中第一項(xiàng)數(shù)據(jù)(0x0040121C),即 .text:0040121CE98FFFFF+jmp?DoLogin@@YAXXZ 調(diào)用DoLogin函數(shù)。 (PS:實(shí)際運(yùn)行時(shí),由于隨機(jī)化基址,從調(diào)試器看到的跳轉(zhuǎn)表內(nèi)容可能與靜態(tài)分析時(shí)不同,這是重定位引起的,關(guān)于重定位的原理可以參考相關(guān)文檔,這里不再詳述) 2.不連續(xù)的switch...case 上面的示例中case的值是連續(xù)的,因此跳轉(zhuǎn)表比較規(guī)則。在實(shí)際使用中可能會(huì)遇到不規(guī)則的case值,如下圖: 匯編代碼: 上面的代碼有兩個(gè)特點(diǎn): i.最小case值非0 上圖中最小case值為3,為了不浪費(fèi)跳轉(zhuǎn)表空間,編譯器會(huì)將索引值減去3保證最小的case值對(duì)應(yīng)跳轉(zhuǎn)表中的第一項(xiàng)。 ii.case值不連續(xù) 編譯器會(huì)在跳轉(zhuǎn)表間隔中插入default跳轉(zhuǎn),保證邏輯正確。(以空間換取時(shí)間) 3.雙重跳轉(zhuǎn)表 匯編代碼: 相對(duì)于前一個(gè)示例,此處case值間隔更大。如果按照之前的方法,跳轉(zhuǎn)表的大小需要(110-30+1)*4=324字節(jié),占用內(nèi)存空間大。 編譯器為了節(jié)省空間,使用了雙重跳轉(zhuǎn):跳轉(zhuǎn)表、間接跳轉(zhuǎn)表。其中跳轉(zhuǎn)表與之前介紹的跳轉(zhuǎn)表一致,而間接跳轉(zhuǎn)表保存的不是分支地址,而是索引值,指向跳轉(zhuǎn)表中的索引。 跳轉(zhuǎn)表: 間接跳轉(zhuǎn)表: 在進(jìn)入switch...case時(shí),先算根據(jù)間接跳轉(zhuǎn)表獲得索引號(hào),再根據(jù)索引號(hào)查找跳轉(zhuǎn)表,獲取實(shí)際分支地址。 使用雙重跳轉(zhuǎn)表后,實(shí)際占用空間:5*4+(110–30+1)=101字節(jié),大大減少空間占用。 4.swtich...case退化 當(dāng)case值間隔過(guò)大,使用跳轉(zhuǎn)表、雙重跳轉(zhuǎn)表消耗的空間太大,編譯器會(huì)將switch...case退化為if...else,如下圖: 匯編代碼: 這里沒(méi)有跳轉(zhuǎn)表結(jié)構(gòu),只剩下cmp/jcc指令,可見(jiàn)編譯器已經(jīng)將swtich...case轉(zhuǎn)換為等價(jià)的if...else。但在轉(zhuǎn)換過(guò)程中,編譯還是做了力所能及的優(yōu)化:通過(guò)二叉查找法加快跳轉(zhuǎn)分支的查找。 5.嵌套switch...case 匯編代碼: 可以看出嵌套的switch...case結(jié)構(gòu)在匯編代碼上是相對(duì)獨(dú)立的,外層和內(nèi)層switch結(jié)構(gòu)有各自的跳轉(zhuǎn)表。 外層跳轉(zhuǎn)表: 內(nèi)存跳轉(zhuǎn)表(雙重跳轉(zhuǎn)表): 根據(jù)跳轉(zhuǎn)表中的地址項(xiàng),也可以清楚的區(qū)分外層和內(nèi)層的跳轉(zhuǎn)分支。 三、循環(huán)語(yǔ)句 a)for循環(huán) 匯編代碼: 其中nopdwordptr[eax+00h]為指令對(duì)齊,沒(méi)有實(shí)際意義。循環(huán)的匯編實(shí)現(xiàn)為: b)while循環(huán) 匯編代碼: 其中nopdwordptr[eax+eax+00h]為指令對(duì)齊,沒(méi)有實(shí)際意義。循環(huán)的匯編實(shí)現(xiàn)為: 從上面可以看出,for和while結(jié)構(gòu)的匯編實(shí)現(xiàn)幾乎一摸一樣,僅僅是使用的寄存器有些區(qū)別。實(shí)際逆向過(guò)程中將循環(huán)映射為for或者while結(jié)構(gòu)都是可以的。同時(shí)還可以看出,循環(huán)有個(gè)明顯的特征:往回跳轉(zhuǎn)(向地址小的方向跳轉(zhuǎn)),大部分情況下遇到往回跳轉(zhuǎn)的指令就是循環(huán),極少數(shù)如編譯器代碼結(jié)構(gòu)優(yōu)化生成的往回跳轉(zhuǎn)不是循環(huán)除外。 四、總結(jié) 語(yǔ)法結(jié)構(gòu)對(duì)應(yīng)的匯編代碼與編譯器有很大關(guān)系,同一份源代碼不同編譯器生成的匯編代碼結(jié)構(gòu)不一樣;即使是同一個(gè)編譯器,不同的編譯選項(xiàng)生成的匯編代碼結(jié)構(gòu)也不盡相同。需要在逆向過(guò)程中慢慢熟悉編譯器的特性。 精選word范本!- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來(lái)的問(wèn)題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
15 積分
下載 |
- 配套講稿:
如PPT文件的首頁(yè)顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國(guó)旗、國(guó)徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 語(yǔ)言 匯編語(yǔ)言 對(duì)照 分析
鏈接地址:http://www.820124.com/p-5399770.html