C语言与汇编语言对照分析_第1页
C语言与汇编语言对照分析_第2页
C语言与汇编语言对照分析_第3页
C语言与汇编语言对照分析_第4页
C语言与汇编语言对照分析_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、游戏通常会包含各种各样的功能,如战斗系统、UI渲染、经济系统、生产系统等,每个3 / 20系统又包含各式各样子功能,如伤害判定、施法、使用道具、角色移动、玩家之间交易等 等。这些游戏功能在代码实现中往往少不了条件判断(如伤害判定)、循环(遍历物品列 表,播放游戏动画)等。在逆向过程中如果可以从汇编语言识别出对应的语法结构,在分析过程中将汇编代码 转换为C语言语法结构,可以帮助对程序执行流程的理解。下面分别介绍最常见的逻辑语法结构:a) ifelseb) switchcasec) for、while注:文中使用的反汇编工具为IDA一、ifelse-_decIspec(noinline) int

2、IfFunction (int nlrxlex) r-int nValue;r if (nlndex * 1)< nValue - 9x70000001;) else if (nlndex / 2) nValue - 0x70000002; else if (nlndex = 3) dValue - 0x70dGO003; else if (nlndex » 4) nVslue , 0x70000004;)三 else| nValue = iee;return nValue; I >汇编代码:.text:09*O1?78-text:O0401273 ,text:0D4Q1

3、27 ,r<?Xt:O04O1Z?R _tekt:HH4C127E ,text.text :flH4(J1?P ,trxt :0n*nri27e .text:0D4Ql37E.trxt:UU4C12»fi :OCI4012H6. text:也岫012".text 律岫.teKt:DQd2va 4text:fi901291 _ttXt:OD*Ql291 -text:0B4Q1291.t«xt:0B*ei29*.text :09401?9I: *t蜡心。聃。12月1 -text:e0*0izni;int _Ifrunction 0Q<edx>(int

4、 nlntfpxH<cx>)?IFFunctian_09BVAH*»? proc near; CODE XREF;nindi©* - * enpnlndrx. 1jnzshort loc9Vf JX h 7G0DQQ01FIrt tn_«in+5|ploc4H127B:enp Jm nau re tn. nlndpK. 2 short loe_4i»l?H6 Fax, 70»PDi)U?hCODE需 REF :iFfunction 0(inf>*3TjlacU01286:enp Jnz non retn1 nlndpx, 3

5、shor t loc 4*01291 ejx+ 70aa0QO3riCQDtXRH :I Fl-unction U(int *t T j10CJIO1291:?lfFunctionCAp noucn«uz re tn- 岖回YUHHW1 nlndpx, 4edx, eT edxendpCODEXREF :IFFunctiurh B(int>>19Tj.teXt:0OiiO12FOcmpnlndex, 1.text: 004 012F3jnxshort loc_U012FB.text:B04A12F5noueax,.teXt:6Qfi612FAretnifelse结构比较固

6、定,通常包含cmp指令、jcc指令以及满足条件后执行的指令块。if.else结构可以串联,串联后的if.else有明显的代码块边界,逆向工具通常可以将代码块标识出来(图中虚线)。.text:B04012F B nlndex = ecx-text:IM>12F>jnzHOUrnlndex. 1short Inc机” B 7ODO0DOlh- .tpxt: D04012F flretnfpwi9,nnpinirLteit;eMB12FBLqc. UI1?F0::COM XflfF:1CFunction B(int)+3t)rtPKt;aD4D12FBCPlpnIndexP Z.text

7、 :aMai2FEhort lot *01306.text:Dd4Dl3UDHDUHl. 7VeMO02h.text:4040130retn、 switch.case1. 一个简单 switchcase144 145146 147148149 15g151152153 154155 156157 ISE 159 163161162163164 165166 167 IRpvoid GaneDispatch(int nGameEvent)|switch (nGameEventJcase 0:DoLogin();break;case 1:DoLogout);break;case 2:DoAttac

8、k();break;case 3:DoSpellSkUl();break;case 4:Do<lseltem();break;default:Def aultProcO ;汇编代码:|1»1,txt-dDai2ic ; unidu£+ftall GJArDispjtch 1 nt nejnEu«*ntQK«ti>)«tc4t:wmzit TGtM-tiSpJtcMBVproc; COM XREF: _fuln*¥3jpteKt:CO4O17lU nG«np(vvnt - rex .tnpnGjrwLvent, 4

9、; switch 5 cd?sJj3Mt lot *012&5 ; junpt Jtili' M4C12t cm"才 15jnpdi:oft-_4*lfaC(HiCjnfEupnt«| ; switch Jump.text:aB4Di?iC ;.towt:CD4ni?ic/Ct)tt:flDUni21CI CDOE XREF:int) *5f j«trxt :; QOTA XRt! ; G4wDich int):aFt *0173Cjn«trxt;0(»40121Cjnp7»oLQglnf»VAKXZ j j

10、unptablE 0»M1215 c»r fi,text时Bim $LHt_2; CDfrL XREF : £M-Dlptchj.t»xt: iDiifrizzi; onin xre v t GjntDHpafi n<int):DFfteNtjCDUHizzij”?DaLoqaGtia0¥nxxz ; junpubit Ba4ai2is “ i,t>cMCitMini776 ; ,text:由岫01整6; COOE XREF: Cam Di spate h(int,trMt :; DATA xREF: G,”wO isht i rt

11、 j : nF f ,*?3CO.“Mt:釉,1 "6j呷?»oAUjcWKMmZ ; juftblrIS mw 3.text:en4tn?ffc ; .t0Xt:CD401?7B/ttxtianunizzBj cddc xh£F; eMDispatchf int)tsf j* text :a1?维;tATft KNEF : 81。1专口0Mhe- t*Ff 1?以o.tPKt:>(MfOl?eJhp?D0SpellSkilif»V(kXXZ I junptatilrC«5r 3. t ® 建 t f。IW|i M1 £

12、;3 >.t>xt:<Mt123a. text 少岫01£3 UMft:; CODE XREF: G4HrDlsptchf int>«5tj.text:l»tn?3l;XREF: GaiwD 1 spateh(int) :DFf_M*12C|o.teNtitiDiinizaeJ叩?hiu£miBaYax" ; juMptJbi» imdi;is cj«c *,tMt:mUD123S ; Jp* 匕。岫 *735 .tPxt:<(MiO1?35 1(k><1235:; CODE XRE

13、F; CdwDispdtch« int)*3i j,tcxt:B(UtS1?3jnp?” JultPrw则附XZ ; juRpt-sblr 聃01215c»r.text:BOMJllgn *.tKt:ltHin23C nfF_fc»129Cdd (Fs«t $LH»_2; »ATA XREF: Eiwt)15pAtch(int)«5tr.t«Mt:0U4Di23Cda off$lh 2; JuHp tabit For switch stattwnt4d .fF、中t fLHd2f 皿 M抬*t iLW/l?.ttK

14、t:0MQ1?3C0d of Het §1 网.1<t :mi4ft1?;dC 7G*cMhp*tch£«Y4版E rndp 4口 “5 -上图显示了 switchcase 基本的结构:a)跳转表达式;b)分支代码;c)跳转表a)跳转表达式nuanpi.v?nv - pcx:ofl4ioii?iocapnGdneEuent, 4; switch s casts.text:09401213Jjshort loc_01235 ; Juuptabl? QQMV121S.tXt:a«4012lSJnpd5:AfFrmi123C(nCaHeEfnt*4l ;

15、 Switch juftp.tpxt:ouai2ic其中loc_401235 代码块对应switchcase 中default分支。当nGameEvent > 4 时,跳转到loc_401235 代码块,即default分支。当nGameEvent <= 4 时,根据跳转表达式进行跳转:5 / 20jmp ds:off_40123cnGameEvent*4其中off_40123c 为跳转表地址,跳转表中每一项代表一个32位地址(4个字节),当nGameEvent 为0按第一项地址跳转,当 nGameEvent为1按第二项地址跳转,依次 类推。b)分支代码trxttrxtzG&

16、;HflOIC: trxtzlC4itl1221 t»xt:00461221 t*xtzfle4tl1221Ktl 明/:FF+g;i:Dtb 昨叮:hHrDi、|iTtnht int)*3j;口口1白 KHFF: gnr(Ji、|iqtcht i nt)(;口“_?Oataq£niimAX» 二IUt1?1S C*Vr Bjil ?3CdSL»fi_23:CURECjiwEiiS!p-a<1:£h(int)«Kij:DAT A SCREf: £dnwDi.SpJtth(ivlit):bffiil123CaOtext

17、.HMD例&trxtzBMnl7lf tFMtzBrwni?# trxt Hiri4nl77H trxt ::nMnl73tl! .irxt :DMn13D ,ipxtieMni23fi!E9rrTOaLoqautHBVAXXZ :tAt 1f9的if$LH4/;FF*;tl>»E KftH ± Ed*。101MtM int*。;&A1 A: X.ftF F $ CjnrlXp j.tcb( int ) :Df fTOaAtNckMmflXXZ ;«M*171S ca” ?411?SCjdtvHIft$1忖5FF*g工 COOIF;let j

18、曾;由片 KHEF; EdHrtlifid>tch(int)iDf f_加口如能H ; juiHprjblr”等 34i1?3C(q$LM:;亡DOEF i tjnrtlipdtchf int);DAI A XR.CF : Cdiw'tJit.p Jtch( int) zaf f411?nUfrUdl 押 feUxt:MW1295 mirnl 加£9IHtFFFF*?0aU»n¥flfi0VllXXZ - junpitdblFf4七淤E9 ft好台FF1« *lr*2*S :FF>)"pJ Cl>l>E !&am

19、p;RE F : fitinrC Isip'ditchllnt )*9fJ70«Fju 11Pr<ic«WASS? ; juRptjblr aMiiSif defjiult各个分支的处理逻辑都在这里,示例代码中仅仅简单的调用对应函数。(PS:这里用jmp而不用call是编译器优化的结果)c)跳转表atrxt;»MH!35 FF.text:«Mlil23A M 9i*0align 4 dd affrt乳时7;DA1AXREf : Gint) «St.trxt :0MI123CIC 11.teNt : 9 MI123C21 1?*&#

20、171;D*dd offset$LH5 r;junpff&r SMitcFi st26 IN*SO*dd Offset$LH6 2,Irkl 2U1W017-ICM 1?Mtadd MH$1 KT &.text : gMI123C.I LI 1J事flflldd off4rft州3MM卬/打hflRV衅推IF加跳转表实际是一个地址数组,存放了每个跳转分支的地址(32位绝对地址),当nGameEvent为0时,跳转表达式读取数组中第一项数据(0x0040121c ),即.text:0040121c E9 8F FF FF+ jmp ?DoLoginYAXXZ调用DoLogin 函

21、数。(PS:实际运行时,由于随机化基址,从调试器看到的跳转表内容可能与静态分析时不同,这是重定位引起的,关于重定位的原理可以参考相关文档,这里不再详述)2.不连续的 switchcase上面的示例中case的值是连续的,因此跳转表比较规则。在实际使用中可能会遇到不规则的case值,如下图:11 / 20ii I -_deilsp*cfftoiflllne)Alndek)兔 riy II int nValue;343,I l-switch (nlPidex)'»11(37case1:MIriv4lue 1;39 Ibreak40 I<AM7:41 InValue*3;42

22、 Ibrtak;43 IAft10;44 Inv«lue.5;*5Ibreaks46 11:47 InVtlut7;#Ibreak;4学default:5# InVfllur * IM;siI I S2541汇编代码:.t»xt:lC4Vl(FiQ ; int _usercdll Suitchyunction lS<FJX><irit nl<idrKff(ecM>岫口 TSwLtchFunctiort ia9YAHH0Z proc nrjr; CODE XSEF : ziMlEp.text zBMOloita ntndeK - rex/砂能匕屿

23、,1岫*ddnlndext -3: 5witch Q c«sr5|才enpnlndrx, t:BUQ1 MjAjlC也。r*tHD1H7 ; junfit.iblt 0通口1修*白 di*f jult ejm:b»ttxt:iu(ri(ydd«;dFf_*ti>70|nnd»xan); &Mltcn Ju”手工 T - f . V4 If 1.text : i<4*i mf.t»xt:>e«(ri(MF Slhu a:; code xref: svitchFuflctian_i(int)*Bf jvt 

24、71; Q(lAjOI MF; DAV A XRt f : Sul tChF unci li)n 1 (int) zof tf WU10/iovtrxt:Btl4i0l04fnow比.1: JuRptdblr tIMCIiMt cjm 3.trKt:m(ri0S4rrtn; .trxt :a01 OSS; CODE XREF: SwitCbFuncCUn_mnt>«atj text 1略,;DAI A XRE F » Swi tchF unct(int) ioF!F_ti01:IU01 >55口。- 3: junptjblrBW C4Se /: leii ail

25、 kar«tnaeKt:Dfl4iai kh.t»Kt:>M(riosb $tH6_«:; code xref: svltchFunctian_i(int>>bT 1.tFKtn(Hi(ri kb; t)ta KREF : swlt£t>Function_i( Int)I711dvt>xt:lfi4iOl IKOrowrjx, 5; JuRptJ>blp工事u It.trxt:tt4»1il6>rrtn.text: Itsumirtrxl:auaiD61 $1 H7_a:; CODC XRFF: Swl

26、ttHFufictlon_iHnt)«HtJ t您愠K;。白m口 XRf F : SwitchFuffiictin 1(int) :off *U171口rqtr«x» ?: J”呻中汕 enikfliBiiS c«p m teiKt i Ie* ari marrtn.tnt:DM01067 Loc_»l»/:; CODE XREF: £wltthFunctUn_l(int*6f j.r»xt:H4(ri(Hr; svitchFunctionj,tPKt:m(riH?; DAIA XREF :.trxt :IBAi0

27、1M7rov翼.A Mi; JuRpt J:blr CtMBUMS fftFumlt cjife*tExt:g,106Crrtn/打匕4iign IINiTtextdff JID1 a/Hdd 。事Fset jlHli fl: DATA XREI . Sull till' uih 1 1 uri 1( list Jt hfiH-t F*t : ,电'UI U/flld>d QifFs?t Iqc 片91 MTi jiump tablrswitch stmt即”nt»t?xt:«ri4010flldd)CC<il1U7,t«kt:sci4

28、iBiO7fldid ofF&rt iiac_4niM7,t#kt:DC4ai0Aadd$LK IJffWIdFOlddlac_iiO1Mf.text tQeiaridd ofFs»t lec_4BiK.TfXtlBQlOrBdd DfFS#t $LNA B2dd ofF»t $LN7 >.texi :aeiiiMUa TSwitchFmrcC 1 o«t_1MV1ttllS2 rndp上面的代码有两个特点:i.最小case值非0上图中最小case值为3,为了不浪费跳转表空间,编译器会将索引值减去3保证最小的case值对应跳转表中的第一项。add n

29、lndex, -3;switch 9 casesii. case值不连续编译器会在跳转表间隔中插入default跳转,保证逻辑正确。(以空间换取时间)VMdl MC ;+ t»Mt:aahui dad .trxl : miuui LVO.text:BMB1S7CID70 art xtext;4»u1 Uto 孰01酊。.i»t : moi S70.fpxn : bilk 1 m i TSwitcfiuncUanalign 1 Oh dd Dff5rt dd offset locJtlM, dd offsetdulor 4闫 1 聃孑dd offset0dd off

30、set loc*fl1067 dtl effort lodlu&F dd aFf«ptLitt n dd oFfsvtLH7二。_1WYRHI«K endp"DATA XRFF : SwithFunctioin_1 ( int)*8Tr ;junp tJblr for switch stdtenentI3.双重跳转表56575&596061626364656667属69707273747576777879_dleclspec(noinline) int SwitchFunction_2(int nlndex)F"int nValue;sw

31、itch (nlndex)case 30:nValue = 1;break;case 70;nValue = 3;break;ca se IM:nValue = 5;break;Cd5E 110:nValue = 7;break;default:nValue = 100;return nValuej汇编代码:text :aMOiOAa二 intHsvrcall SiritchFunction 20<vait>(int oIndvx0<PCN>>TSwitehFunction 2HRVAHHH? pr,w nrr; CODf XR(F: *kri*3H口nn<

32、loK-ecMAeMt IIMDIMfladdDf H 1 F F E 2b ; Itch B1ft ;IMD1 0A3Etiltid。*.)fhnrt ld£_«aiact ; iurr.i-i 1 I' i,L,0Ut,增卜 Mr*,.text HMonoAflROU2Xme* ds:b9te_kQl Bnindex.t«xt :asiionmFWds :Gf f n(K>4 e : switch jwnp.text :*MO1OB6 .,text 1BU01K&; CODE XR(F: SwitchFunetUn_2dM)«F

33、rj«text :iiMQiaBA: DATA XREF : SwitchFijrhctieii_2( iht) :of. tft ;«MflhlDeAROM1二 junptblF OMOIMt C45P 3Q;«Mfrin8Bretnf-jA.uk -un-i HGtr.t#*tiiD4oioec.txt:moiDBCi:;CODE XHlf: suitehFuncticn;DAI A XREF« Su i t c hF unc t id n 2 ( int.) " of F *0C%。.text: 101 IBCMV度.3;即匕岫*1*F

34、a” 70.text :aa«»oi>cireto( t ' in ifc? g.teKt r<Q*tHOC?-ttxt: LlQhQI ac? $t M6 1;CODC XRfF t S«ltChFWCti«n(jftt)*Ftj.tfrict IIDhOIOC DAT A XRET I Stoi tf hF u nc: t: io fl 2( tftt.) I d f f IrBI 001|01 1AMt:IM010C?HOU*JK申S;|uApi<>bie OMiiCflf “3 1U9-t4>kt :IMU1

35、KX1rB七力4"iau+ A.Bi>hnil fH111中.text :*mntKB.text:*n(nDCB:CBM XHGF: Swl tcWunctlMi_(litt )+F tj.texti<MtHK8;DAT A XREF : SwitchFunction_2(int j:eH _11 *1 (!( o 1.t»Ktwu翼.7:jiMptdlblt a1"F Ctst 11(L 酬 IHOCDr*tnsteH ;iM&i hce:aMoiocE Uc_4fltaa :;EODt XRII- t wHthF uftttiQii.trx

36、t zlMQrlKE;StritchFunctiomi_2( int>*FTj.text :mD1 DCE;UM。XREF:.tvxt :muioctmu64h;juriptjible OMUMf defiult casrretnW3.-,textoiffnitddnFfvrt$IH41. offsetT vFF$rlOFfMt $IH7 1Aexttc rhtwiao*'tmUMMOE 朦 .txt JflMfllWB .tf xtB.t«Kt:meiaE8t vtfLKt : t M-A1 tf ft . text,trxttf ftTtext :>Kflia

37、ct + text tfiMfllMS aexuauvi ws .text-aMtn ocs .text:aMeiot b .txt.text: IM 111 OCR .trxt: IMB19» .trxtBArxtzBHtlttB .trxt:at4ei(K« ,textDCSb(|tr i«aiaEaTSwltCliFuftetiandid of fsrt db%db%db%db露9b.db Ob ubM.dbdbA.db1.此H.dbb.db»db灯Ub靴.曲*,i3b*.dbA.bA.db3lflC_rrtdfj4»1KE褊%*

38、1;科4, kk*露* % 4.ie4, 与. * 包. % . 露 九 * 2,* *t ORlAi i i«"P*;DATA H* 跖 * *. . . H 修 w n n h XRE F J Swi tchFunct ion_?( jut) *F Tr tdb>lr f©r sviitch statpnpritXREF £ SwitchFunct ton_2(iiHt )+®fr ;incflrpct tablr tor switch stdtpnpnt# / 20相对于前一个示例,此处 case值间隔更大。如果按照之前的方法,跳转

39、表的大小需要 (110-30 + 1) *4 = 324 字节,占用内存空间大。编译器为了节省空间,使用了双重跳转:跳转表、间接跳转表。其中跳转表与之前介 绍的跳转表一致,而间接跳转表保存的不是分支地址,而是索引值,指向跳转表中的 索引。跳转表: .! h a "«-r-ur e w xr n.tKt ziliiJKJintiii aHdd Dff5rt $LH4 1, off5rt $LHS_11 nFfset $1 H6 J * offset $IH7 10101004; DAT A XREF : Swil:chFunctionH2(int)*FTrddlocjiOlQ

40、CE ; junp For switch £titewnt15 / 20间接跳转表:.textH b!fte_*aiaESdb斡*.DATA M£F= fiwLtchFmctlsn 2(int)4iTrLtXt :004«1DESdb与 .与* ; Indirect kJbl京 for suiteh EitdtrwntLt ext:a4M CKWdb*.tPMt :a(Ml«1Ul:8db鼻*db西.事.*Lt pKt: 00441 (KS曲心db*db*.:0Mai K8db岫*科*Ltrxtdb1,*.tpKtdb*,dbnfi*.tpwt :eo&

41、gt;i4i«sdb*,k.ttXt :tKM01M:8db与.4Lt: 00491M8db与k teMt :0gt1 帆行db*,tfMt:OOJi01IK8db蜘.2t*Ltpxt0(8db*h.*.tfKt :O(P1«1»:Sdb*4LteMtrQMeiucsdb3在进入switchcase时,先算根据间接跳转表获得索引号,再根据索引号查找跳转表,获取实际分支地址。*text = 03i口1 肺 G iHnde*醛*<iddnlntfex+ '30; switch Hl cd5ts.t»C:0B4»1M3enpnTndPX

42、 5Oh.trxt:Q(Miaij#short 1dc_*1VCE ; junpl-ble 岫1QAF default c4sf.text :o&MgiM8nouzx中占k* dsibytPotOFBtnindeKj.text:g041iMF1阱dsF_O10D*eaK«4| ; switch jump使用双重跳转表后,实际占用空间:5*4 + (110 - 30 + 1 ) = 101字节,大大减少空间占用。4 . swtichcase 退化当case值间隔过大,使用跳转表、双重跳转表消耗的空间太大,编译器会将switchcase 退化为if.else ,如下图:81S3

43、B4B586 8788 8996 9192 939495 % 97 9£99 100 血 162 163 10410S 106 167108 169 ne111112 113_ci« 1 spec tnoin 1 me ) irtt SwitchFunctiortnlndex)r-int nValue;switch (nXndex) (cas« 1M60:nvilu« 1; br«flk;casenVslue a 力 br«ak;Case 3000O:nVdlue - 5; br占k;case 40090:nVjlut - 7; br

44、eak;case 56WG:nValue * *; break;cast 60600:nV4lue - 11; break;cae 70909: nV*lu# bre«k;default:return nvalue;nValu, 1d0;。日49114M ; int ustrcall SwKchFunctLofl_ax>(int nnU«x<tCM>)DDJlini4n ?SnitChFunCtiDn 3WVAHMV praC nrK; COOf XREF : nain421p.text白 mind03c ,呼仁黑09011*0enpnfndfx t0gg

45、i1“jgshort loc_itaii7*-text0940118jzShort IOC 411117埠.text0gm:/nindvx, 1COU0ODMD1150jzshort iDE_iiOHAE0040112eppnlndrx,n-tent。餐niSBjzshort ioc_i)aii4B.teictt”nindeic, 3a0000D*fr1160jnz土hort 1dc_1i 01192.text0B4O1U?KMf*c* 5QQ*rii47rttn/ dHlbvlirAEi&® p*text0D*r)168004Q1168 l<iC_4ai16B: CO

46、DE XREF: SwlUhFunCti<ih_3j。聃 g168BWUfdM, 3ciei*U116 口rftn A*睁.JCirAlLODOi16E .textQB40116E, text0D4IT116E lvc_*ft116Ei: CQDf XREF: $wiUhFvnctlQn_3j-tfrwrO EI*ni&EMU1.txt09*01173retn.IUKC.UU4U1 1 f 1 . tp*t9D4D1174.text电白Lac; CODE XHEF : SwitchFunctinn目fj0帖011曲RPU?.mretn. I If NCI Hl l f R ,.t

47、ext.textLae *B117A:; CODE X»EF: SwitchFLnctiDn 30nt)tfiij*te«tODBHaeppn1ndext 5审/,目-textQ»nisoJ2short idc_4«iia4.tesct0D4Dns?nindFM t &CQ00.text0S4ri188jz&hort Ioe lidUVE. t?xt0B*Q11AAenpnTndFX, 70000-tPMtQO4IM190jzsnort ioc_itaiivfl.textDD40H192.text0D*B119? Lfl£_*0

48、1192; CODE XttEFt SwithFunctlon_3(int)t201j.text90401192nouraxv 6Ahg聃91197re tnvl>rK£lUMH 1 1YH .text0D4B1198.teMt0B*fr1198 1dC_*S119B:; CODE XREF : SwitchFunetion_3(int)5Sij*t?xt09401199routni>-t&wtflB41Hl4Dr 呼 tm' I li K t0040119E .tPMtD040119Et皆翼t0D4D119E UC 4S119E:; CODE XflEF

49、 : Swit£hFunetidn_3(j0a41H19Emup«xt OUb.ttxtODJI01I1A3retn Airn QJkfl 4 4 Afa -U W W 1 1EF f,teMtQD4QH1A4.text0D41H1A* Lac hS11Ati:; CODE XREF: SwitchFunctinnintJt*Of j-tMtMUFJXt 电*n09401149retn.tm004U11A9 TSuitcbFunctioft 3QvAiiiNiZ endp,心口这里没有跳转表结构,只剩下 cmp/jcc指令,可见编译器已经将swtichcase转换为等价的i

50、f.else。但在转换过程中,编译还是做了力所能及的优化:通过二叉查找法加快跳转分支的查找。17 / 205 .嵌套 switch.casedeclspec(noinline) int SwitchFunctiQn_4(int nlndexl, int nlndex2)F ."int nValue;switch (nlndexl)case 3:里 Fswitch (nlndex2)case 10:nValue = 0x70600001;break;case 20:nValue = 0x70000002;break; case 30:nValue - 0x700&0003; b

51、reaks case 40:nValue = 0x70000004;break; case 50:nValue = 0x70000005; break;case 6:nValue = 0x70600006;break;default: nValue -_ break;_ 1case 7:Value = 3;break;case 1&:nValue = 5;break;case 11;nValue = 7;break;default;nValue = 100;_ return nValue;: ini nsercll StfltthFunctiaft W<«4x>(

52、lnt f)nd«x1QC«£x>r int nEndtx28<#dx>>工界翼匕tSvlUhrumctianpr4C hejr; CODE XREF : 11aBi力相心yp.trxtn】nd屏胃 1 - pck;fiUftl 100 “In4甘寓? - ed*.trxE:tD4tl1Oli4dideSMl* -3: switch 9 casrsLt»NtifU<11Di13cupftliradrxl 8jashort loc_nin23i ; jvRpt4oie muquD'B drfjuit cjec.t

53、71;xttnanaiia9d&:aff 4Vi23enind«iti*« ; switch Juhp,uxt:eM*iiof 解LtrKt;»Mai 1OF $1 N6_? t;XAfF: s»itctifut>cUDR_h( int Jot )*atj.trxE: CM>11(F: dr 1 a ,靠“ :Stoi tc:hi unct ion_>( iri>t B int) tof f* |klnd*x2-1l ; juqit«blf «MI11ba CM 3Lt»C:tM<11E

54、2cupe4K. SoxtextilMffllESI*sftart lot: juMtatdc M4S11CE drFdult Cjse.“xhBMMIETiwufx m. d$;hyt*_“t事*&*.trxl:DMV1lE£jnpm" 21?函m ; switch junpJ 肝,t z fl 仙 d i ww S ".tMtilUtl tFS; £OBF XHFI t StaittliFuhCtldn > tflt+lnt )*1( t j,ttxC:tMVHF9; MT。xhef : SMLtcni unction。沁t.lnt):。”.t«jtt:iMaiiFSmu03,* 7e«flODBih : W>tabia a»«iicc cw i«iLttxtIFAretnv 工 w R C n V (ft*sir.arxtrOMftlUBLtfxCVHVlHfr $LW:; CUtt XfftFz uitctifunction_«<lmt JntitfJ.t»HKillMV11F0; QATft 芯RE J : SiiitcliFunrt ion int Jml ) :uFf IQ1?

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论