c中的指針和直接引用結構體的編譯後的差別

 

PVirtualMachine lvm = ghook.init(&ghook); //sizeof(TStringList);//testihook();//SPlog64(2,9);
00007FF64EF1FA7C  lea         rcx,[_ghook (07FF64F0AD359h)]  
00007FF64EF1FA83  call        qword ptr [_ghook+148h (07FF64F0AD4A1h)]  
00007FF64EF1FA89  mov         qword ptr [lvm],rax  
  lvm->g1m(lvm);
00007FF64EF1FA8D  mov         rcx,qword ptr [lvm]  
00007FF64EF1FA91  mov         rax,qword ptr [lvm]  
00007FF64EF1FA95  call        qword ptr [rax+405Ch]

注意,第一個是直接把地址給了rcx,_ghook其實是這樣聲明的地址標記指針

_ghook:
  ghook TIHooKing <>
  gvm dq 0

第二個lvm就是lvm變量了。code

gook.init代碼是是這樣的it

_finit proc  ;initialze task
  push rbp
  mov rbp,rsp

  lea rax,_gvm
  mov gvm,rax

  leave
  ret
_finit endp

而_gvm其實是另外一個標記:class

_gvm:
 gvm tvm <>

因此,這就是指針的含義。test

相關文章
相關標籤/搜索