SASM-アセンブラー用のIDE

こんにちは、愛するhabravchane!



この投稿では、去年随時書いたプロジェクトをコミュニティに紹介したいと思います:SASM(SimpleASM)-x86およびx86-64アセンブリ言語でプログラムを開発するためのIDE。



画像



SASMは、構文強調表示とデバッガーを備えたアセンブラー言語NASM、MASM、GAS、FASM用のシンプルなクロスプラットフォーム(WindowsおよびLinuxで利用可能)開発環境です。 このプログラムはすぐに使用でき、アセンブリ言語を学習する初心者に適しています。 Qtに基づきます。 無料のGNU GPL v3.0ライセンスの下で配布されています。



ソースはGitHubリポジトリにあります

バイナリはプログラムWebサイトからダウンロードできます。



カットの下に、少しの歴史と可能性のより詳細な説明があります。



どこに行ったの



私の大学の1年目には、トレーニングコース「Architecture and assembly language」がありました。このコースでは、アセンブラーNASMを検討し、審査員コンテストでタスクを渡しました。 以前のプログラミングでIDEを使用することに慣れていたため、コマンドラインですべてをコンパイルするのはあまり喜ばしくありませんでした。 私の意見では、NASMに便利なIDEはありませんでした。 Geanyのような普遍的なソリューションはあまり好きではありませんでした(味と色の友人はいませんが、誰かがこれをすべて使用して喜んでいます)。 はい、私はすでに何か大きなことをしたいと同時にC ++を学びたいと思っていました。

そのため、主に私とクラスメートのために、NASM用にIDEを作成することにしました。



以前にGUIを書いた経験はありませんでした。 いくつかの検討の後、優れた無料のフレームワークであると同時にクロスプラットフォームであるQtを使用することが決定されました。 最初は、単純な強調表示、ビルドログ、入力/出力ウィンドウを備えた単純なテキストエディタが作成されました。 誇らしげに呼ばれる「IDE」プログラムは、テキストエディターにあるテキストを収集し、ビルドされたプログラムを実行することができました。

それから、少し正規表現を学んで、私は美しいハイライトを作りました。 デバッガー(GDB)をねじ込みました。 タブや、コードの検索やコメント付けなど、テキストエディターにあらゆる種類のシンプルな機能を追加しました。 プログラムを徐々に正常な形式に仕上げ、エラーを修正しました。



この春、SASMは上記のトレーニングコースに含まれており、新入生はすでにそれを使用していました。 最近、NASM-MASM、FASM、およびGASを除く他のアセンブラーのサポートをプログラムに追加しました。



特徴



画像



まず、強調表示、タブ、およびプログラムをビルドして実行する機能を備えた単なるコードエディターです。 別のウィンドウで起動します。

ログには、プログラムの実行時間に関する情報が表示されます。 入力と出力には2つの形式があります。 私が言ったように、このプログラムはもともとコンテストに合格するためのものでした。 これには、最後の2つの機能が非常に便利です。 exe'shnikを保存する必要がある場合は、[ファイル]メニューでこれを実行できます。



デバッガー


画像



プログラムの最も複雑なコンポーネントの1つは、デバッガーです。 彼にはそれほど多くの可能性はありませんが、特定の最小基本セットがあります:彼は現在の行を表示し、エントリなしでステップを踏み、エントリなしでプログラムを実行/一時停止し、ブレークポイントを設定し、レジスタとメモリを見ることができます。 また、基本的な機能がまだ不足している人のために、GDBの任意のコマンドを入力するためのコマンドラインがウィンドウの下部から実装されています。



はい、デバッガーはGDBに基づいています。 アセンブラーの制限のため、作るのはそれほど簡単ではありませんでした。 特に、NASMは通常のデバッグ情報を生成できず、プログラム内の現在の場所を特定し、アセンブラーによって生成されたリストとEIPコマンドカウンターの現在のアドレスを一致させる必要があります。



NASMのマクロライブラリ


SASMには、I / O用のio.incマクロライブラリが含まれており、コース「アーキテクチャおよびアセンブリ言語」で使用され、64ビットモードをデバッグおよびサポートするために若干書き直されています。 トレーニングの初期段階では非常に便利です。関数を呼び出すための規則や規則を考慮することなくデータを表示できます。



たとえば、EAXレジスタに含まれる数値を表示するには、次のように記述します。



PRINT_DEC 4, eax ; 4 -







の代わりに



section .data





format db "%d", 0





section .text





push eax





push format





call printf





add esp, 8







io.incに含まれるコマンドは、ヘルプに記載されています。



オプション


画像



プログラム設定では、テキストエディターを完全にカスタマイズできます-カラースキームの設定、フォントの選択、初期テキストの設定。

言語も設定されています(ロシア語と英語が利用可能です)。



画像



オプションでは、アセンブラー(NASM、MASM、GASまたはFASM)およびビット深度(x86またはx64)の選択も可能です。 これらのオプションは、プログラムの選択(アセンブラーとリンカー、およびそれらのオプション)に影響します。 また、新しいアセンブラは、バックライトと初期テキストを調整します。 アセンブリのパスとオプションも手動で設定できます。



オプショナル


プログラムには、各アセンブラーのヘルプとサンプルプログラムが含まれています。プロジェクトフォルダーのHello Worldプログラムと初期テンプレートを使用すると、すぐにコードの記述を開始できます。



Windowsでは、プログラムの構築に必要なすべてのコンポーネントが既にSASMに含まれています。 プログラムは「箱から出して」すぐに動作します-起動後すぐにプログラミングを開始できます。

Linuxでは、gcc、gdb、および必要なアセンブラーをインストールします。



おわりに



プログラムとソースの詳細については、上記のリンクをご覧ください。 最初のコードの品質はあまり良くないかもしれません-私はC ++とOOPを習得しましたが、念のためすぐに謝罪します。



オープンソースプロジェクト-誰かが突然参加して何かを変更したい場合-ようこそ!

また、フィードバック、提案、エラーメッセージも歓迎します。 そしてもちろん、合理的な批判、それなしで。



All Articles