九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
常量、指針和變量的實現(xiàn)機制
分類: 逆向?qū)W習(xí) 2010-08-06 21:39 189人閱讀 評論(0) 收藏 舉報

無論是硬件設(shè)計還是軟件設(shè)計,計算機領(lǐng)域都有一條設(shè)計法則-----那就是把不變化的和變化的東西分離出來,這樣做的好處是穩(wěn)定性提高了,而且方便維護。

按照一般的PE文件結(jié)構(gòu)來說,常量存儲在數(shù)據(jù)區(qū)塊,變量存儲在堆棧,一般程序的編譯器也很樂意按照這種方式編譯和生成PE文件。

在內(nèi)存中,一般數(shù)據(jù)是從低地址往高地址存放,而在堆棧中數(shù)據(jù)是從內(nèi)存高的地址往內(nèi)存低的地址存放。

  1. int a=3,*pa=&a;  
  2. int main()  
  3. {  
  4.     int b=4;  
  5.     int *pb=&b;  
  6.     *pb=*pa;  
  7.     return 0;  
  8. }  

反匯編形式如下:

[c-sharp] view plaincopy
  1. int a=3,*pa=&a;  
  2. int main()  
  3. {  
  4. 00E013A0  push        ebp                            ;保護EBX寄存器的值  
  5. 00E013A1  mov         ebp,esp                        ;ebp指向當(dāng)前堆棧指針   
  6. 00E013A3  sub         esp,0D8h                       ;為局部變量預(yù)留D8h字節(jié)空間  
  7. 00E013A9  push        ebx                            ;保護ebx寄存器的值  
  8. 00E013AA  push        esi                            ;保護esi寄存器的值  
  9. 00E013AB  push        edi                            ;保護edi寄存器的值  
  10. 00E013AC  lea         edi,[ebp-0D8h]                 ;edi指向局部變量緩沖區(qū)  
  11. 00E013B2  mov         ecx,36h                        ;ecx作為計數(shù)器下面循環(huán)復(fù)制36h*4字節(jié)數(shù)據(jù)  
  12. 00E013B7  mov         eax,0CCCCCCCCh                 ;要復(fù)制的源數(shù)據(jù)放入eax中  
  13. 00E013BC  rep stos    dword ptr es:[edi]             ;循環(huán)復(fù)制數(shù)據(jù)到局部變量緩沖區(qū)中  
  14.     int b=4;  
  15. 00E013BE  mov         dword ptr [b],4                ;[b]=變量b  
  16.     int *pb=&b;  
  17. 00E013C5  lea         eax,[b]                        ;eax寄存器保存變量b的指針  
  18. 00E013C8  mov         dword ptr [pb],eax             ;[pb]=指針pb  
  19.     *pb=*pa;  
  20. 00E013CB  mov         eax,dword ptr [pb]             ;eax=指針pb  
  21. 00E013CE  mov         ecx,dword ptr [pa (0E07008h)]  ;ecx寄存器保存指針pa  
  22. 00E013D4  mov         edx,dword ptr [ecx]            ;edx寄存器的值=a  
  23. 00E013D6  mov         dword ptr [eax],edx            ;pb指向的值被賦值為a,也就是b=a  
  24.     return 0;  
  25. 00E013D8  xor         eax,eax                        ;eax清零  
  26. }  
  27. 00E013DA  push        edx                            ;下call面干啥的不知道, _CheckStackVars?  
  28. 00E013DB  mov         ecx,ebp   
  29. 00E013DD  push        eax    
  30. 00E013DE  lea         edx,[ (0E013F4h)]   
  31. 00E013E4  call        @ILT+130(@_RTC_CheckStackVars@8) (0E01087h)   
  32. 00E013E9  pop         eax    
  33. 00E013EA  pop         edx    
  34. 00E013EB  pop         edi                            ;恢復(fù)edi寄存器的值  
  35. 00E013EC  pop         esi    
  36. 00E013ED  pop         ebx    
  37. 00E013EE  mov         esp,ebp                        ;恢復(fù)調(diào)用前的堆棧指針  
  38. 00E013F0  pop         ebp                            ;恢復(fù)ebp寄存器的值  
  39. 00E013F1  ret                                        ;函數(shù)返回  


本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
函數(shù)是如何被調(diào)用的?
計算機指令系統(tǒng)的指令格式、尋址方式、指令種類及與C代碼的對照
潘凱:C 對象布局及多態(tài)實現(xiàn)的探索(五)
[原創(chuàng)]進程和線程
游戲輔助原理與制作第八課--------植物大戰(zhàn)僵尸種植植物CALL的尋找思路
從匯編源碼逐步分析函數(shù)調(diào)用過程
更多類似文章 >>
生活服務(wù)
熱點新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服