2016-06-26 8 views
0


私の目標は、メインの関数や他のクラスやそのようなもののような、独自のコードの重要な部分を節約できるコードを書くことです。 私はクラス内でそれらをコピーします私のプログラムでは、ユーザ入力を使っていくつかのコード(func、obj、class、...)を追加/削除したいと思っていますが、そのコードを再生成して、私はそれをコンパイルして削除する必要があります。

だから私は上記のすべてを計画し、私はそれがコードをコンパイルしたい部分を除いて、とにかく私のコードにg ++をリンクするにはありませんか?しかし、私はg ++に主な機能があることを知っています。 は+私は、既存のシステム上のコンパイラを使用カントと私はあなたがリンクコンパイラを使用してコードにする必要はありません別の実行ファイルとしてコンパイラ...g ++自体を自分のプロジェクトにリンクするには?

+0

実行可能ファイルを他の実行可能ファイルにリンクすることはできません.g ++は単なる実行可能ファイルだけではありません(作業には大量のファイルが必要です)。これを行う最善の方法は、GCCの外部コピーを使用してロード可能な動的オブジェクトを作成するか、LLVMを使用してコードを生成することです。 –

+0

私はそのg ++​​はexeですが、私たちはプリコンパイルされたバイナリを使用することはできません....そして、私はちょうど私が外部のものを使用することはできません... plsはtxtを読んで... llvmは何ですか? – shervin

+0

私はグーグルLLVMのグーグルが良い選択のように思えるが、私は自分のコンパイラをllvmライブラリを使って書かなければならないだろうか? – shervin

答えて

1

を持って傾けます。 パッケージコンパイラで実行可能です。あなたのコードはC++ソースコードを生成してから、コンパイラを呼び出して新しい実行ファイルを生成することができます。

ほとんどのコンパイラはサイズが巨大であることに注意してください。あなたのシステムにG ++またはMinGWをインストールして理解を深めてください。

詳細については、インターネットで「Compiler Design Theory」を検索してください。これは、C++などの言語を実行可能ファイルに変換する方法についての情報を提供します。

また、オペレーティングシステムに新しい実行可能ファイルを起動させる(そして現在のインスタンスを強制終了する)必要があります。これは、オペレーティングシステムのAPIのいくつかの研究を必要とします。

IMHOの場合、最も良い方法は、解釈またはスクリプト言語を使用することです。別の方法は、C++プログラムにスクリプトまたはスクリプトの一部を実行させることです。

編集1:非常に最低のレベルで非常に低いレベル
、マイクロコード発生する必要がある(プロセッサプロセスは、コマンドバイト)。

手順は次のようになります。

  1. メモリ にいくつかの既知の場所にあるマイクロコードと場所を生成します(あなたがアクセス権を持っているし、実行権限を持っていること)。
  2. マイクロコードへの実行を転送し、戻り値 をスタックにプッシュすることを覚えておいてください。

ハードコードは、特に、すべての分岐命令のターゲットアドレスを調整します(ポジション独立コードと呼ばれるものを使用しない限り)。

マイクロコードを生成するコードを書くのに何ヶ月も何年も費やすことができ、(CLangやG ++のような)コンパイラの使い方を理解することができます。

+0

これはかなりですが、ユーザーが初めて自分のコードを実行していて、ユーザーが持っている権限があると思っています。もし彼がrootであれば、私はCPU上でipレジスタを変更して、私はいくつかのアセンブリをコード化して、生成部分を除いてすべて処理できるいくつかの長いjmpsを使用する必要があります:( – shervin

+0

"マイクロコード"の代わりに "マシンコード"を意味すると思います。通常はアクセス可能です。 –

関連する問題