2015-12-29 29 views
0

我正試圖寫入一個指向內存進程中的double的指針,當我執行dll注入時遇到了這個問題。C++ dll,如何寫入內存中的指針的double值?

這裏是我的類:

class SpeedHack : public MasterClass { 
    private: 
     SpeedHack() {}; 
     struct Speed { double speed; }; 
    public: 
     Speed* getAddy() 
     { 
      return (Speed*)(address); 
     } 
     bool isSpeedAtkon = false; 

     void writeMem() 
     { 

      getAddy()->speed = 3.1; 

     } 
     static SpeedHack& get() 
     { 
      static SpeedHack instance; 
      return instance; 
     } 
    }; 

//address is 0x767650 and value is a double 0.300000 

我也有其他的類,比如它和所有其他的工作,但我從來沒有在結構(僅在這個類)

的應用程序崩潰雙onceIi嘗試調用writeMemory()方法...其他類的其他結構總是工作,即使它們更復雜...

記錄此:Logger :: log(「%f」,SpeedHack :: get()。 getAddy() - >速度);如預期的返回我0.300000,並記錄地址返回我正確的一個...

所以我不知道我在做什麼錯了...(應用程序崩潰,當我嘗試在此地址更改double值)...有人知道我可以修復它嗎?

+2

我認爲通過「雙指針」你實際上是指*指向* double(而不是例如'sometype **')? –

+0

對不起,我不是英語母語的人 – Noj

+1

*程序如何崩潰?因爲您沒有對該值的寫入權限,或者因爲3.1是不正確的值?或者是其他東西? –

回答

0

好,謝謝博佩爾鬆我用這段代碼解決它......我抓住它從互聯網上,但我不知道這一切是需要:

void doSpeedAtk() 
     { 
      DWORD OldProtection; 
      VirtualProtect((LPVOID)address, 4, PAGE_READWRITE, &OldProtection); 
      getAddy()->speed = 3.1; 
      VirtualProtect((LPVOID)address, 4, PAGE_READWRITE, &OldProtection); 
     } 
+1

可能想寫回'OldProtection'而不是寫第二個值。 –

+0

你能告訴我,我怎麼辦? – Noj

+1

你的第二個VirtualProtect應該有'OldProtection',它說'PAGE_READWRITE'將它設置回原來的樣子 - 或者保持原狀,並且根本沒有第二條線。 –