質問

実行可能ファイルに命令が含まれていることは知っていますが、これらの命令は正確には何ですか?たとえば、 MessageBox API関数を呼び出す場合、命令はどのようになりますか?

ありがとう。

役に立ちましたか?

解決

実行可能ファイルは、オペレーティングシステムによって認識されるバイナリファイルです。実行可能ファイルには、データが含まれるセクションが含まれます。 Windowsは、 PE形式を使用します。 PE形式には、 machine の説明があるセクションがあります。これらの命令は、順番に並べられたCPUによって理解される単なる数字です。

MessageBox()の関数呼び出しは、一連の命令になります

1)DLL内にある関数のアドレスを持っています。このアドレスはコンパイラーによって入力されます

2)「プッシュ」する手順スタックへのパラメーター

3)実際の関数呼び出し

4)何らかのクリーンアップ(呼び出し規約に依存)。

EXEファイルは特別にフォーマットされたファイルであることを覚えておくことが重要です。分解はできませんが、コードをコンパイルしてから、Visual StudioでEXEを開いて分解を確認できます。

他のヒント

見たことがあるなら、それは肥大化した質問です。 しかし、概要を説明するために最善を尽くします。 バイナリ実行可能ファイルには、「バイトコード」と呼ばれるこれらのものがあります。バイトコードは、命令を16進数で表したものにすぎません。通常、「検索」できます。バイトコードを作成し、アセンブリ命令に変換します。例えば: 指示:

mov ax, 2h

バイトコード表現を持っています:

B8 02 00

バイトコードはRAMにロードされ、「言語」であるため、プロセッサによって実行されます。私がバイトコードでプログラムを知っている正気の人はいません、それはただ複雑なものになるでしょう。アセンブリは...そのままで十分です。上位言語でプログラムをコンパイルするときは、コードを受け取ってアセンブリ命令に変換する必要がありますが、コンパイル後にコードがどのように変形するかを想像してください。誤解しないでください、コンパイラは素晴らしいですが、IDA Pro FreewareでC ++プログラムを逆アセンブルすると、私が話していることがわかります。 それは一言で言えば実行可能ファイルであり、この主題について書かれた本は確かにあります。 私はWindows APIの専門家ではありませんが、Windows API" MessageBox"を呼び出すための命令がどのようになるかを他の誰かが説明できます。数行のアセンブリのみにする必要があります。

書かれたコード(C言語または他の言語)は、コンパイラによってアセンブリと呼ばれる特別な種類の言語にコンパイルされます(まあ、マシンコードですが、非常に近いです)。アセンブリは、CPUがネイティブに実行する非常に低レベルの言語です。通常、アセンブリは非常に低レベルであるため、アセンブリではプログラミングしません(たとえば、メモリからのビットのやり取りに対処したくないなど)。

MessageBox 関数について具体的に言うことはできませんが、それは LOT の命令だと思います。考えてみてください:ボックスを描画し、コンピューターのスタイルに合わせてスタイルを設定し、偶数のハンドラーを接続して、ユーザーがボタンをクリックしたときに何かが発生し、Windows(または任意のオペレーティングシステム)に追加するように指示する必要がありますタスクバー(またはドックなど)、その他多くのもの。

作業している言語に依存します。しかし、多くの人にとってそれは次のように簡単です...

msgbox("Your message goes here")

または

alert("Your message goes here")
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top