実行可能ファイルに命令が含まれていることは知っていますが、これらの命令とは正確には何ですか?たとえば、API関数を呼び出したい場合MessageBox
、命令はどのようになりますか?
ありがとう。
実行可能ファイルに命令が含まれていることは知っていますが、これらの命令とは正確には何ですか?たとえば、API関数を呼び出したい場合MessageBox
、命令はどのようになりますか?
ありがとう。
実行可能ファイルは、オペレーティングシステムによって理解されるバイナリファイルです。実行可能ファイルには、データを含むセクションが含まれます。WindowsはPE形式を使用します。PE形式には、機械の指示があるセクションがあります。これらの命令は、順番に並べられ、CPUによって理解される単なる番号です。
MessageBox()への関数呼び出しは、一連の命令になります。
1)DLLにある関数のアドレスを持っている。このアドレスはコンパイラによって入力されます
2)パラメータをスタックに「プッシュ」する手順
3)実際の関数呼び出し
4)ある種のクリーンアップ(呼び出し規約によって異なります)。
EXEファイルは特別にフォーマットされたファイルであることを覚えておくことが重要です。逆アセンブルはありませんが、コードをコンパイルしてから、VisualStudioでEXEを開いて逆アセンブルを確認できます。
私がこれを見たことがあれば、それは肥大化した質問です。しかし、私は概要を説明するために最善を尽くします。バイナリ実行可能ファイルには「バイトコード」と呼ばれるものがあり、バイトコードは命令の16進表現にすぎません。通常、バイトコードを「検索」して、アセンブリ命令に変換できます。例:命令:
mov ax, 2h
バイトコード表現があります:
B8 02 00
バイトコードはRAMにロードされ、プロセッサの「言語」として実行されます。私がバイトコードのプログラムを知っていることを正気に思っている人は誰もいません。組み立ては...それなりに楽しいです。プログラムを高級言語でコンパイルするときはいつでも、コードを取得してアセンブリ命令に変換する必要があります。コンパイル後にコードがどのように壊れて見えるかを想像してみてください。誤解しないでください。コンパイラは素晴らしいですが、IDAProフリーウェアを使用してC++プログラムを逆アセンブルすると、私が話していることがわかります。それは一言で言えば実行可能ファイルであり、確かにこの主題について書かれた本があります。私はWindowsAPIの専門家ではありませんが、他の誰かがWindowsAPI「MessageBox」を呼び出すための命令がどのようになるかを示すことができます。数行のアセンブリのみである必要があります。
記述されたコード(Cまたはその他の言語)はすべて、コンパイラーによってアセンブリーと呼ばれる特別な種類の言語にコンパイルされます(まあ、機械語ですが、非常に近いです)。アセンブリは非常に低レベルの言語であり、CPUがネイティブに実行します。通常、アセンブリは非常に低レベルであるため、プログラムを作成しません(たとえば、メモリからビットを前後にプルする処理を行いたくない場合など)。
MessageBox
機能について具体的には言えませんが、たくさんの説明があると思います。考えてみてください。ボックスを描画し、コンピューターのスタイルに合わせてスタイルを設定し、ユーザーがボタンをクリックしてWindows(または任意のオペレーティングシステム)に追加するように指示したときに何かが発生するように、偶数ハンドラーを接続する必要があります。タスクバー(またはドックなど)、および他の多くのもの。
それはあなたが働いている言語に依存します。しかし多くの人にとってそれは同じくらい簡単です...
msgbox("Your message goes here")
また
alert("Your message goes here")