2010-11-27 7 views
1

私はネイティブwin32コンパイル済みのexeファイル内のいくつかの文字列を置き換える良い方法を探しています。例えば、私は私のコードに次き:C++ Win32実行ファイル内の文字列を置換する

const char *updateSite = "http://www.place.com" 
const char *updateURL = "/software/release/updater.php" 

私はexeファイル内の他の任意の長さの文字列でこれらの文字列を変更する必要があります。私は他の場所でこのタイプの設定を保存することができたことに気付きましたが、exeファイルに保存することは私のアプリの移植性要件を満たしています。私はこれを行うための最善の方法に関する助言やアドバイスを感謝します。

ありがとうございます!

更新:それはアドレス(例えば、グローバル変数のリストがある卓上グローバル再配置であるPEファイルで MSF:Util:Exe

+4

これは、信頼性の高い場合でも可能ですが、非常にお勧めです。なぜこれが最善の方法であるかを明確にするために、移植性の要件を投稿できますか? –

+3

ハードコードされた文字列ではなく埋め込みリソース文字列テーブルから文字列を使用するようにコードを変更することはできますか? – MerickOWA

+0

スティーブ - 私は単一のファイル解決策を取ろうとしています。ご意見ありがとうございます。私はこれがややハッキーなことだと感じました。 – Josh

答えて

4

本当に1つのファイルが必要な場合は、EXE自体を回り込まずに、古いzipにトリックを追加してconfigsを配置します。

は、次のようになります。

> BINARY DATA 
> ZIP FILE DATA 
> 32bit unsigned int which's value is the size of the appended zip file 

長所:

  • あなたは原料の多くを置くことができますexeファイル自体
  • と混乱しない
  • を維持/拡張が容易にそこに

コントラスト:

  • あなたはそれを圧縮したくない場合は、ちょうどあなた自身のいくつかの単純な非圧縮アーカイブの事を書き

libにいくつかの圧縮をリンクする必要があります。

0

:私はこれを行うようだMetasploitのプロジェクトのいくつかのコードを見つけましたPEローダーによって変更されなければならない文字列のような実行時に格納されなければならない定数)。この特定の変数がどのエントリか分かっていれば、アドレスを取得して手動で変更することができます。しかし、これは完全に駄目になるでしょうし、あなたの好きなコンパイラとPEフォーマットの詳細な知識が必要です。 XMLやLuaなどのポータブルなものを使うのは簡単です。これらはまさにこの種の目的のために発明されたものです。

編集:

なぜconst char **を使用しないのですか?これは通常の実行時変数である何か間違っていますか?

0

IMOは、文字列テーブルリソースにその文字列を格納するのに最適な場所です。それはあなたの.EXEファイルに組み込まれているので、移植性は損なわれません。

Use the visual studio editorその値を変更します。

値をロードするために、LoadString WinAPI、またはそれ以上のコードを使用します(コードではCString::LoadString)。

また、再コンパイルせずに、コンパイル済みの.EXEの文字列を変更できるサードパーティのソフトウェアもあります。

関連する問題