プログラミング言語で、入力プログラムからWin32プログラムを作成できるコンパイラのソースコードを探しています(どちらでも構いません、単純なほうがいいかもしれません)
それでも、自分に合ったものを見つけることができず、GCC のような巨大なコンパイラーには非常に多くの機能があり、どこから始めればよいかわからないため、非常に混乱します。
- 私が調べられるプログラミング言語用の OpenSource Win32 マイクロコンパイラはありますか?
プログラミング言語で、入力プログラムからWin32プログラムを作成できるコンパイラのソースコードを探しています(どちらでも構いません、単純なほうがいいかもしれません)
それでも、自分に合ったものを見つけることができず、GCC のような巨大なコンパイラーには非常に多くの機能があり、どこから始めればよいかわからないため、非常に混乱します。
http://en.wikipedia.org/wiki/List_of_compilersライセンス タイプが「オープン ソース」のものを選択
コンパイラのビルド方法を理解しようとしていますか、それとも Win32 実行可能ファイルが内部的にどのように見えるかを理解しようとしていますか?
前者の場合、コンパイラの作成方法に関する本を読む方が、ソース コードをリバース エンジニアリングするよりもはるかに効率的です。コンパイラは、これまでに見たことのないものであり、作成者が原則と使用される一般的な手法とツールを順を追って説明してくれると非常に役立ちます。また、コンパイラは段階的に構築されており、対象となる CPU とオペレーティング システムに関する知識が必要になるのは、実装の最後に近づいていることも指摘しておく価値があります。コンパイラの構築に慣れていない場合は、その段階に到達する前に学ぶべきことがたくさんあります。
ただし、Win32 実行可能ファイルの形式を理解したい場合は、x86 (または x64) アセンブリ コードと Portable Execution (PE) ファイル形式 (Windows で実行可能ファイルに使用される) を理解する必要があります。x86 アセンブリ コードの紹介については、Dr. Paul Carter の優れた「PC Assembly Language」の無料の電子ブックhttp://www.drpaulcarter.com/pcasm/をお勧めします。PE については、http://msdn.microsoft から始めます。 com/en-us/magazine/cc301805.aspxおよびhttp://msdn.microsoft.com/en-us/magazine/cc301808.aspx
コンパイラの教科書を手に取ることをお勧めします。彼らはコンパイラに必要なすべてのコンポーネントを説明し、通常はコンパイラを最初から最後まで開発します。
私は、コンパイラ コースからJava での最新のコンパイラ実装のコピーを所有しており、非常に満足しています。
最も単純なプログラミング言語はアセンブリ、正確にはx86アセンブリです。最も有名なアセンブラであるNASMはオープンソースです。あなたはそれのソースをチェックすることができます:
NASMには、実際にアセンブラステートメントに「コンパイル」されるマクロがあります。本格的な言語ではありませんが、基本に焦点を当てています。
MS-DOS (16 ビット)用の Pascal、C、またはSmallCコンパイラ ソースを探すことをお勧めします。特に、それらが 16 ビット フラット リアル モード (<= 64KB メモリ モード) に制限されている場合は、かなり単純なはずです。
セグメント化されたリアル モードのサポートは、回避するのが最善の複雑さを大幅に追加します。これは、32 ビット フラット プロテクト モード プログラム (非 OS 32 ビット プログラミング) には関係ありません。
x86 以外のプロセッサの場合、Motorola MC68000 16/32 ビット プロセッサを対象とする Pascal に似た構文コンパイラであるJack Crenshaw の一連の記事「Let's Build a Compiler 」のサンプル プログラム。シリーズのwin32バージョンで Forth で書かれた Marcel Hendrix の記事もあります。
PE-i386 出力 (つまり Win32) をサポートするTCC - Tiny C Compilerもあります。
ただし、Firas Assaad がコメントで提供した SO リンク全体 (これらのリンクの 1 つを除くすべてを含む) をわざわざ読むことができない場合は、コンパイラのソース コードが非常に長いことに気付くと思います。
コンパイラがどのように機能するか、および/またはどのようにコーディングするかを学ぶことが目的である場合は、そのテーマに関する本を読む必要があります。ただし、ソース コードのサンプルを探す場合は、このような Pascal コンパイラのサンプルを試してください。
Pascal はやや単純な文法を持ち、多くの本で実装されています。