1

プログラムから使用したいファイルの一部のビットを変更するコマンドライン実行可能ファイルがあります。このツールを使用して独自の実行可能ファイルを作成し、1つの実行可能ファイルのみを配布することは可能ですか?

[編集]明確化:

コマンドラインツールは、オフセットといくつかのビットを取得し、特定のファイルのこのオフセットのビットを変更します。したがって、特定のビットを特定の値に変更するアプリケーション用のパッチャーを作成したいので、バッチファイルのようなものを作成してそれを実行しますが、それを実行する実行可能ファイルを作成します。つまり、ツールをに埋め込みます。特定の値でそれを呼び出すラッパープログラム。

(Windows)c \ c ++、asmでラッパーをコーディングできますが、.netは使用できません。

4

8 に答える 8

7

ラッパーを作成するよりも、このプログラムの独自の実装をロールする方が簡単です。些細なことのように聞こえます。ファイルを開き、正しい場所を探し、ビットを書き込み、ファイルを閉じるだけで完了です。

于 2008-09-25T00:13:10.077 に答える
5

最も簡単な方法は、この exe を自分のファイルに組み込み、ディスクに書き込んで実行することです。

于 2008-09-24T23:47:32.743 に答える
3

実行可能ファイルをバイナリ ストリーム リソースとして実行可能ファイルに追加できます。必要な場合は、それを一時フォルダーに抽出し、一時ファイルを使用して新しいプロセスを作成できます。

これを行うために必要な正確なコードは、.Net コードと C++ コードのどちらを作成しているかによって異なります。

于 2008-09-24T23:48:47.577 に答える
3

簡単な答え: いいえ。

短い答え: インストーラーまたは実行可能な自己解凍アーカイブでない限り、そうではありません。

より長い推測的な答え: ファイル システムが代替データ ストリームをサポートしている場合、ユーティリティを含むストリームをプログラムに追加することができます。その後、プログラムは独自の代替データ ストリームにアクセスし、必要なときにユーティリティを抽出できます。あはは。

于 2008-09-24T23:48:59.073 に答える
3

1 つの実行可能ファイルをもう 1 つの実行可能ファイルの末尾に追加し、一時フォルダーに展開するコードを記述できます。

以前に同様のことを行ったことがありますが、構成ファイルといくつかのビットマップを Windows の EXE に追加しました。私が行った方法は、最初にEXEの最後に自分のものを追加し、その後、2番目のexeのオフセットになるデータのファイルオフセットを含む小さな構造体を書くことでした。

アプリを実行するときは、ファイルの末尾から構造体のサイズを引いたところまでシークし、ファイル オフセットを抽出して 2 番目の exe を一時フォルダーにコピーしてから起動します。

OK、リクエストに応じてもう少し詳しく説明します。これは、結合された EXE を作成するための擬似コードです。これは、メインの EXE をコンパイルした後に実行する小さなユーティリティです。

Open destination file
Open main exe as a binary file
Copy main exe to destination file
offset = size of main exe
Open 2nd exe as a binary file
Copy 2nd exe to the output file
Write the offset to the output file

では、抽出手順です。これは、メインの EXE に入ります。

Find the location of our own EXE file (GetModuleFileName() under Windows)
Open the file in binary mode
Seek to the end minus sizeof(offset) (typically 4 bytes)
Read the offset value
Seek to the offset position
Open a temporary file in binary mode
Read bytes from the main EXE and write to the temporary file
Launch the temporary file
于 2008-09-24T23:51:10.660 に答える
1

あなたの目的のためにこれを行う最も簡単な方法は、おそらく自己解凍型の実行可能パッケージを使用することだと思います。たとえば、exe(およびその他の必要なファイル)をパッケージ化し、ユーザーが自己解凍型の実行可能ファイルを解凍したときにexeまたはバッチファイルなどを呼び出すように構成できるPaquetBuilderなどのツールを使用します。

于 2008-09-25T00:20:13.430 に答える
1

exe が再配置可能 (本質的なリンカー フラグ /fixed:no) にビルドされている場合、実際に LoadLibrary を実行し、ベース アドレスを取得し、呼び出しチェーンを設定して呼び出し (ジャンプ) することができます。努力する価値はありません。また、この方法でビルドされる exe はほとんどないため、コードを再ビルドする必要があり、その時点でこの演習には参加しません。

だから...いいえ。

私は、C/C++/asm で書くことを気にしない開発者にもっと興味をそそられますが、「.net ではありません」-しかし、明らかに fopen/fseek/fwrite によって妨げられています-それはあなたが説明するすべてのプログラムについてのように聞こえるからですやっています。

于 2008-09-25T00:59:40.323 に答える
1

これもAutoItのFileInstall機能を使えば可能だと思います。このためには、AutoIt をセットアップし、FileInstall 関数を使用してスクリプトを作成して who exe を含め、関数 RunWaitを使用してそれらを実行する必要があります。exeにコンパイルすれば完了です。

于 2008-09-25T05:43:15.913 に答える