逆向工程學習筆記(3) FPU基本操作

2021-10-20 10:46:09 字數 980 閱讀 4485

x87內部執行時可以使用8個80bit的資料暫存器及控制暫存器、狀態暫存器等:

對於這8個資料暫存器,x87是以棧的形式使用的:

在其狀態暫存器中使用了3個位元位以記錄棧頂的位置。有入棧或者出棧時此指標進行移動,當超過8個數時進行迴圈覆蓋。

在intel的資料手冊中很貼心的給出了乙個計算的例子:

第一條fld指令將5.6這個立即數放入st(0),圖(a)

fmul指令將st(0)中的數和2.4相乘得到結果13.44,並放入st(0)中,圖(b)。

同樣的操作,指令3和指令4計算3.8x10.3並將結果放入st(0),注意此時的fld指令會導致棧指標移動,因此5.6x2.4的計算結果就變成了st(1)。

最後一條指令將st(0)與st(1)的值相加並放入st(0)並得到結果。

看下fld操作的偽碼:

回頭看3條計算指令:

0x40002040    fld qword [sym.d_pi]

0x40002046    fmul qword [esp + 4]

0x4000204a    fmul qword [0x40003050]

在通過原始碼獲得的先驗知識裡,我們知道:

這裡的d_pi是全域性變數,[esp + 4]是傳入的第乙個引數,[0x40003050]是乙個全域性的常量。

但是當沒有這個先驗知識時,我們如何處理碰到的指令並轉換為c語句呢?

逆向工程學習記錄

od基本指令 指令快捷鍵 含義restart ctrl f2 重新開始除錯 step info 單步步入 f7執行一句op code 操作碼 若遇到呼叫命令 call 將進入函式 內部 step over 單步步過 f8執行一句op code 操作碼 若遇到呼叫命令 call 將進入函式自身,不跟隨...

軟體逆向工程學習(一)

本專題學習軟體逆向的基本原理 方法,並針對具體案例進行逆向分析,從而學習一套完整 系統的軟體逆向的方法並獲取相關經驗。ollydbg 常用於動態除錯程式,無法除錯核心,ui功能強大。softice 工作在ring0態的偵錯程式,常用於除錯驅動程式,功能強大的命令列工具。windbg 介於上兩者之間的...

軟體工程學習筆記

1 軟體工程的基本概念 軟體的概念 軟體 程式 文件 軟體是能夠完成預定義功能的可執行的電腦程式和使程式正常執行所需要的資料,加讓描述程式的操作和文件。程式 適合計算機處理的語句序列 它的目的是啥呢?是為了解決某個特殊的問題 文件 開發活動的記錄 用於通訊和交流,開發過程的管理和執行階段的維護 軟體...