2013-09-01 93 views
2

不確定這是否是一個愚蠢的問題,或者這裏涉及到一個聰明的技巧。在64位模式下使用不推薦的x86_32指令

我想爲調試器使用x86_32'into'(int overflow的異常)指令,我正在寫作趣味。我發現這條指令從未真正成爲主流,並且在x86_64中被棄用。我想在x86_64的運行時在我的程序中執行int overflow檢查(我正在構建一個動態二進制工具框架的頂級功能)。

  1. 有什麼辦法可以使用這個指令來檢查x86_64上的邊界嗎?

  2. 我沒有自由重新編譯程序,所以所有編譯器相關的標誌都被排除了。儘管我有基礎結構來生成運行時代碼。

  3. 我不想在軟件中實現這個邊界檢查(我有我自己的理由),並希望利用hw功能。

注意:我知道可以用於邊界檢查的新英特爾MPX指令,但這些指令尚未普及。

有什麼想法?

+3

它不只是'棄用',它完全刪除了64位代碼。您可以使用JO和JNO指令簡單檢查OF標誌。如果不能編譯程序,詢問這個問題幾乎沒有意義。 –

+0

是的,你是對的,這條指令完全從x86_64中刪除。我不能重新編譯,但我可以做運行時代碼生成。感謝您的意見,我明白我可以用這些做什麼。 – user2628063

+0

在同一個筆記上還有一個查詢,關於如何在x86_64上模擬bounds指令功能的任何輸入?我正在查看英特爾手冊,但沒有看到任何標誌可以幫助這裏... – user2628063

回答

1

INTO in x64 is deprecated。
這是一個事情,更多的指示(如x87的所有)應該已被棄用,但可悲的是沒有。

自第一個8086 and even before整數溢出已在標誌寄存器中處理。

使用OF標誌完成簽名值的邊界檢查,使用C標誌對邊界檢查無符號值。

隨着所有access violation檢查內置到系統中,不再需要INTO。你最好的選擇是寫一個異常處理程序。
也許會問一個問題:「如何捕捉x86_64程序集中的異常」?

相關問題