2017-06-09 25 views
1

私は32ビットアセンブリプログラムのプログラミングを学習するためにmasm32を使用しています。私はio.hの定義済みのマクロとprocsを使用せずに、どのようにして(16ビットアセンブリのように、割り込みなどを呼び出す)入力から直接読むことができるか知りたいですか?出来ますか?アセンブリでio.hを使用せずに入力を読み取る

おかげDOSのような古いOSのを使用して

+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

、あなたが呼び出すことができ、例えばINT 16hを使用してBIOSにキー押しを問い合わせます。残念ながら、これはNTのようなWindowsでは不可能です。セキュリティと安定性が最も重要な理由のために、BIOS割り込みへのアクセスはWindowsカーネルによって制御されるため、通常のアプリケーションでは制限されています。

つまり、すべてのキーストロークを直接または間接的にWindowsカーネル呼び出しで取得する必要があります。他の方法はありません。あなたはOSを呼び出し、OSはカーネルを呼び出し、カーネルはBIOSを呼び出します。

しかし、とにかく割り込みを使用したい場合は、ターゲット言語としてMASM32を選択した場合よりも、プラットフォームに依存する可能性があります。

32ビットWindowsでは、NTDLLのWindows APIの多くにINT 2Ehでアクセスできます。問題は、異なるバージョンのWindows(場合によっては異なるが同じバージョンのをビルドする)がINT 2Ehの機能番号が異なることです。

このトピックの調査を開始する前に、このようなレベルのプラットフォーム依存性が必要かどうかを2回考えてください。

+0

APIはそのように呼び出されるようには設計されておらず、その目的にはまったく役に立たない。 –

+0

@CodyGrayそれは目的を果たします。たとえば、マルウェアでは、usermode APIのトレースやテーブル分析のインポートを避けることができます。 – hidefromkgb

+1

うーん、すごい、ちょうど私たちに必要なもの、マルウェアを書く方法。私はそれが「役に立つ」とは考えていない。 –

関連する問題