2017-09-01 6 views
0

私はいくつかの希望がなくてもしばらく時間を探していました。 基本的に私は変数を保存し、プログラムが終了した後で実行可能ファイルの中から読み込むことが可能かどうか疑問に思っていました。プログラムをシャットダウンした後、変数を内部的に保存して読み書きすることは可能ですか?

私はfstream関数を使って外部ファイルに変数を格納できることは知っていますが、私は内部で.exeのように格納する方法を探しています。

string l; 
cin >> l; 
// function to save it internally..... 

コメントで@drescherjmと@Peterで述べたように

+4

状況によっては可能ですが、OSによっては動作しない可能性があります。現代のウインドウでは、アプリケーションフォルダはUACの隆起なしで書き込み可能でさえありません。また、ウイルス対策ソフトウェアが変更を検出する可能性があります。 – drescherjm

+2

あなたが記述しているのは自己修正実行ファイルです。特定のユーザー設定を保存するためにいくつかのMS-DOSプログラムが覚えています。現代のオペレーティングシステムのほとんどは、設計上(例えば、起動時に実行可能ファイルをロックして変更できないようにしたり、実行ファイルをメモリにロードしたり、メモリを変更不可能にするなど)、そうしないとセキュリティソフトウェアはおそらくそれ。実行可能ファイルを変更しようとするか、コードを実行しようとするのは、マルウェアの多くがそうしているからです。 – Peter

+0

私はこの質問が2つのdownvotesを得た理由を理解していない、それはそれほど悪くない。良いものほど良くはありませんが、それはうまくいくようです。 –

答えて

4

これは良い考えではない理由のヒントです。

  • これは他のファイルを使用するよりも優れています。
    • メモリの大きなブロックに「すべてのデータ」としてアクセスしてファイルに書き込むことはできないため、正しくシリアル化/シリアル化解除する必要があります。そのコードが利用可能になると、実際にはです。は、空のファイルに書き込むより複雑なファイル形式(ELFまたはPE)で動作します。
  • 実際は悪化しています。
    • データを書き込む際にバグがあると、プログラムが実行不能になる可能性があります。
    • 複数のユーザーがそれぞれ独自のデータを持つことはできません。
  • 通常、実行可能ファイルは書き込み可能ではありません。
    • Unixベースのシステムでは、通常、バイナリファイルはシステムディレクトリにインストールされ、通常のユーザーは単純に変更できません。
    • rootとして実行している場合でも、システムパーティションが読み取り専用であることは珍しいことではありません(自分自身の設定には、たとえば読み取り専用として/がマウントされています)。
    • Windowsシステムでは、管理者権限で実行する方が一般的ですが、普遍的ではなく、実行中のプログラムのバイナリファイルがロックされています。
  • これをすべて回避することができても、データの移植性が損なわれます。
    • プログラムとデータのインストールと更新が終了しました。
    • データをバックアップし、後で(おそらく別のシステムで)復元する方法はありません。
  • 実行ファイルを変更している唯一のプログラムはマルウェアです。このため、実行可能プログラムを傍受してプログラムを終了することは、マルウェア対策ソフトウェアの最も基本的な機能の1つです。
    • これらの行に沿って、署名付きバイナリまたはあらゆる種類の信頼システムを実装するシステムでは、変更されたバイナリは署名テストに合格しません。

ので、癖の多くは、あなたのプログラムとユーザーエクスペリエンスの両方の複雑な回避策の多くは(特別な権限を要求する必要が、トリッキーを保存して、バックアップ、非常に可能性の高いデータの損失)。一方、データファイルへの単純な保存は実装が容易であり、ユーザにとって使いやすいものです。

0

o.o事前のおかげでは、そのような練習は何のためのセキュリティソフトウェアの外観なので、アイデアのその本当に明るいありません。 私はあなたの意図をよく認識していないんだけど、あなたのプログラムの中にコルーチンを実装しようとしている場合は、ここで何ができるかです:

  • static変数を作成しstatic int state=0;を言う、そして共同を実装するためにそれを使用プログラム・ライフタイムの規模でのルーチン。
  • ファイル「Sys_Status.dat」を使用して、変数の情報を保存します。
+0

状態や設定データをファイルに保存することをお勧めします。ファイルの目的の1つは、プログラム終了後にデータを格納することです。 –

+0

@ThomasMatthewsそれは私が言ったことです。 –

関連する問題