質問

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

[編集] 説明:

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

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

役に立ちましたか?

解決

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

他のヒント

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

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

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

短い答え:いいえ。

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

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

一方の実行可能ファイルをもう一方の実行可能ファイルの末尾に追加し、それを一時フォルダーに解凍するコードを記述することができます。

以前にも同様のことを行ったことがありますが、構成ファイルといくつかのビットマップを 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

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

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

それで...いいえ。

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top