一簡單c++程序之反匯編


   
   
   
           
  1. #include<iostream>
  2. using namespace std;
  3. class point3d;
  4. class point2d;
  5. class point3d
  6. {
  7. private:int x; int y; int z;
  8. public:
  9. point3d(int a = 0, int b = 0, int c = 0) :x(a), y(b), z(c) {}
  10. };
  11. class point2d
  12. {
  13. int a;
  14. int b;
  15. public:
  16. point2d(int x=0,int y=0):a(x),b(y){}
  17. operator point3d()
  18. {
  19. return{ a,b,0 };
  20. }
  21. };
  22. int main()
  23. {
  24. point2d z;
  25. point3d q = z;
  26. return 0;
  27. }
反匯編后
point 2d z:(將調用構造函數
push 0(壓入2個參數罷了)
push 0
lea ecx,[z] (將z對象的地址保存到ecx中)
call  point2d::point2d (0C01348h)  
mov   dword ptr [this],ecx   .將ecx(z對象的地址).保存到this指針當中
mov   eax,dword ptr [this]  .將z對象的地址賦給eax
mov ecx,dword ptr [x]; 將變量x的值取出來保存到ecx中
mov dword ptr [eax],ecx..將ecx=0賦給對象z的低4位(也就是a)
mov eax,dword ptr [this].將對象的地址賦給eax
mov ecx,dword ptr [y] 將變量y的值給ecx
mov dword ptr [eax+4],ecx 將y的值賦給高4位對象的地址(也就是b)
mov eax,dword ptr [this],將對象的地址給eax作為返回值


point3d q =z;

   
   
   
           
  1. 008538B4 lea eax,[q] ;將q的地址賦給eax
  2. 008538B7 push eax ;壓棧.作為參數
  3. 008538B8 lea ecx,[z] ;將z的地址賦給ecx
  4. 008538BB call point2d::operator point3d (085133Eh)
   
   
   
           
  1. 00853380 push ebp
  2. 00853381 mov ebp,esp
  3. 00853383 sub esp,0CCh
  4. 00853389 push ebx
  5. 0085338A push esi
  6. 0085338B push edi
  7. 0085338C push ecx
  8. 0085338D lea edi,[ebp-0CCh]
  9. 00853393 mov ecx,33h
  10. 00853398 mov eax,0CCCCCCCCh
  11. 0085339D rep stos dword ptr es:[edi]
  12. 0085339F pop ecx ;
  13. 008533A0 mov dword ptr [this],ecx ;將 point2d z的地址賦給了this指針
  14. return{ a,b,0 };
  15. 008533A3 push 0 ;0壓棧
  16. 008533A5 mov eax,dword ptr [this]
  17. 008533A8 mov ecx,dword ptr [eax+4] ;將z的a變量的值賦給ecx
  18. 008533AB push ecx ;ecx壓棧
  19. 008533AC mov edx,dword ptr [this]
  20. 008533AF mov eax,dword ptr [edx] ;將a的值賦給了eax中
  21. 008533B1 push eax ;eax壓棧
  22. 008533B2 mov ecx,dword ptr [ebp+8] ;取出q的地址
  23. 008533B5 call point3d::point3d (0851357h) ;point3d(一個q的地址.參數.3個變量參數)
  24. 008533BA mov eax,dword ptr [ebp+8] ;將q的地址取出來.作為返回值
  25. }













免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM