《C++反匯編與逆向分析技術揭秘》——基本數據類型的表現形式


---恢復內容開始---

  • 基本的浮點數指令

示例代碼:

 Visual Studio 2013的反匯編代碼是:

對於movss,表示移動標量單精度浮點值

將標量單精度浮點值從源操作數(第二個操作數)移到目標操作數(第一個操作數)。源操作數與目標操作數可以是 XMM 寄存器或 32 位內存位置。此指令可用於將單精度浮點值移入/移出 32 位內存位置與 XMM 寄存器的低位雙字,或是用於在兩個 XMM 寄存器的低位雙字之間移動單精度浮點值。此指令不能用於在內存位置之間傳輸數據。

 對於cvtsi2ss指令,起到的是一個轉換的功能:

cvtps2pi MM,XMM/m64
把源存儲器低64位兩個32位單精度浮點數轉為兩個32位有符號(補碼)整數,放入目的寄存器。

 cvtss2sd

cvtss2sd XMM,XMM/m32
把源 存儲器低32位1個單精度浮點數變成1個雙精度浮點數,結果送入目的寄存器的低64位,高64位不變.

 

cvttss2si

將源操作數(第二個操作數)中的單精度浮點值轉換成目標操作數(第一個操作數)中的有符號雙字整數。

  • 指針

示例:

這里不管指針是什么類型的,由於都是32位的指針,所以都是的dword ptr。但是下面就因為數據類型的不同,導致分別使用的是byte ptr、dword ptr、word ptr:

示例代碼:

不同類型的指針加1,增長的大小其實是不同的,加的是這個類型的長度:

  • 引用

 引用類型其實就是指針類型,只不過它用於存放地址的內存空間對使用者而言是隱藏的。

 示例:

這里nVarType保存的實際上就是nVar變量的地址:

再來看Add函數的反匯編:

eax中保存的是傳遞下來的nVar的地址。

  • 常量

常量數據在程序運行前就已經存在,它們被編譯到可執行文件中。當程序啟動后,便會被加載進來。這些數據通常都會在常量數據區中保存,該節的屬性中是沒有可寫權限的,所以在對常量進行修改時會報錯。

示例:

 

 


免責聲明!

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



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