2017-06-09 40 views
1

我正在使用masm32來學習編程32位彙編程序。我想知道如何在不使用io.h預定義的宏和特效的情況下直接從輸入讀取數據(如16位程序集,調用中斷等)?可能嗎?在程序集中讀取沒有使用io.h的輸入

謝謝

+3

是的。您可以調用操作系統提供的API。在Windows上,控制檯I/O通過調用['ReadConsole'](https://msdn.microsoft.com/en-us/library/windows/desktop/ms684958.aspx)和['WriteConsole']( https://msdn.microsoft.com/en-us/library/windows/desktop/ms687401.aspx)。這些由Windows SDK頭文件('windows.h')提供,以及您鏈接到二進制文件的相關庫。在Windows中,中斷不用於此目的。 –

+0

謝謝你的回答,但我想從頭開始寫,可能嗎? –

+0

不,從零開始寫它是不可能的。 –

回答

-1

使用像DOS這樣舊的操作系統,可以調用例如INT 16h要求BIOS進行按鍵。不幸的是,這在類似NT的Windows下是不可能的。出於一系列原因(安全性和穩定性是最重要的),訪問BIOS中斷由Windows內核控制,因此受限於常規應用程序。

換句話說,您必須通過Windows內核調用直接或間接獲取所有擊鍵。沒有其他辦法。你調用操作系統,操作系統調用內核,內核調用BIOS。

但無論如何,如果你仍然想要使用中斷,那麼就有可能 - 在選擇MASM32作爲目標語言後,代碼變得更加依賴於平臺。

在32位Windows下,來自NTDLL的許多Windows API可通過INT 2Eh訪問。問題在於,不同版本的Windows(有時甚至是不同版本的生成相同版本的)在INT 2Eh函數編號方面有所不同。

在開始研究此主題之前,請考慮兩次是否需要這種級別的平臺依賴性。

+0

這些API不是被設計成這樣調用的,它絕對沒有用處。 –

+0

@CodyGray它確實有用。例如,在惡意軟件中,它可能有助於避免用戶模式API跟蹤和導入表分析。 – hidefromkgb

+1

嗯,很好,只是我們需要的,寫入惡意軟件的方法。我不認爲這是「有用的」。 –