VisualStudioでビルドしたexeファイルの内容について質問です。


C++プログラミング1年程度の初心者です。私はVSで空のプロジェクトからopenGLを利用した簡単なゲームプログラムを作っています。
最近ふと疑問に思ったのですが、ビルドと同時に作られるexeファイルの中には、私の情報(VisualStudioの固有情報?)等が入っているのでしょうか?このままネットで配布しても大丈夫なのでしょうか。

そもそも普通そこから情報を引き出すのは難しいだろうとは思うのですが、原理的にそもそも固有の情報が含まれているのか、いないのかが知りたいのです。

コンパイルしているのはあくまでソースコード自体だろうと想像しているのですが、確信がもてません。ご存知の方、解説をお願いいたします…。

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2014/01/22 11:59:54
  • 終了:2014/01/24 00:07:17

ベストアンサー

id:cx20 No.1

cx20回答回数604ベストアンサー獲得回数1072014/01/23 00:14:25

ポイント100pt

一般的な Windows プログラムの場合、EXE に含まれる情報としては

  • PE ヘッダ情報(コンパイル時のタイムスタンプ、リンカバージョンなど)
  • リソース情報(ダイアログリソース、バージョン情報など)
  • デバッグ情報(*.pdb ファイルのパスなど)

などが、あります。

以下は、取得できる情報の例です。

  • PE ヘッダ情報の例

f:id:cx20:20140122233543p:image

  • リソース情報の例

f:id:cx20:20140122234305p:image

  • デバッグ情報の例

f:id:cx20:20140122234306p:image

PE ヘッダ(コンパイル時のタイムスタンプ、リンカバージョンなど)については、特殊なツールを用いれば、変更することが可能ですが、知られて困るような情報はあまり無いかと思います(作成したコンパイラのバージョンが知られるのがまずい等、特殊な事情があれば、話は別ですが。。。)

リソース情報については、プロジェクト内に「*.rc」ファイルが存在しなければ、情報は付与されません。

また、デバッグ情報(のパス情報)についてはプロジェクトの設定で「デバッグ情報の生成」を「いいえ」にすれば、パス情報は出力されません。
f:id:cx20:20140123000543p:image

以下は、参考情報です。

<PE ヘッダに関する情報>
■ EXEファイルの内部構造(PEヘッダ) (1/3):CodeZine
http://codezine.jp/article/detail/412

■ Dependency Walker (depends.exe) Home Page
http://www.dependencywalker.com/

■ PE形式バイナリ変換ツール
http://coexe.web.fc2.com/hackbin.html

<リソース情報に関する情報>
■ Resource Hacker
http://www.angusj.com/resourcehacker/

■ ResEdit - 窓の杜ライブラリ
http://www.forest.impress.co.jp/library/software/resedit/

<デバッグ情報に関する情報>
■ プログラム データベース ファイル (C++)
http://msdn.microsoft.com/ja-jp/library/yd4f8bd1(v=vs.100).aspx

id:cx20

「PE ヘッダ情報の例」は、Visual C++ 付属ツール「dumpbin.exe」の実行結果です。
<使用方法>
dumpbin /HEADERS <filename>

2014/01/23 08:10:14
id:onigiriTurnA

なるほど、実は簡単に情報を抽出できるのですね。丁寧に解説してくださりありがとうございます!大変参考になりました。

2014/01/24 00:06:47

その他の回答(0件)

id:cx20 No.1

cx20回答回数604ベストアンサー獲得回数1072014/01/23 00:14:25ここでベストアンサー

ポイント100pt

一般的な Windows プログラムの場合、EXE に含まれる情報としては

  • PE ヘッダ情報(コンパイル時のタイムスタンプ、リンカバージョンなど)
  • リソース情報(ダイアログリソース、バージョン情報など)
  • デバッグ情報(*.pdb ファイルのパスなど)

などが、あります。

以下は、取得できる情報の例です。

  • PE ヘッダ情報の例

f:id:cx20:20140122233543p:image

  • リソース情報の例

f:id:cx20:20140122234305p:image

  • デバッグ情報の例

f:id:cx20:20140122234306p:image

PE ヘッダ(コンパイル時のタイムスタンプ、リンカバージョンなど)については、特殊なツールを用いれば、変更することが可能ですが、知られて困るような情報はあまり無いかと思います(作成したコンパイラのバージョンが知られるのがまずい等、特殊な事情があれば、話は別ですが。。。)

リソース情報については、プロジェクト内に「*.rc」ファイルが存在しなければ、情報は付与されません。

また、デバッグ情報(のパス情報)についてはプロジェクトの設定で「デバッグ情報の生成」を「いいえ」にすれば、パス情報は出力されません。
f:id:cx20:20140123000543p:image

以下は、参考情報です。

<PE ヘッダに関する情報>
■ EXEファイルの内部構造(PEヘッダ) (1/3):CodeZine
http://codezine.jp/article/detail/412

■ Dependency Walker (depends.exe) Home Page
http://www.dependencywalker.com/

■ PE形式バイナリ変換ツール
http://coexe.web.fc2.com/hackbin.html

<リソース情報に関する情報>
■ Resource Hacker
http://www.angusj.com/resourcehacker/

■ ResEdit - 窓の杜ライブラリ
http://www.forest.impress.co.jp/library/software/resedit/

<デバッグ情報に関する情報>
■ プログラム データベース ファイル (C++)
http://msdn.microsoft.com/ja-jp/library/yd4f8bd1(v=vs.100).aspx

id:cx20

「PE ヘッダ情報の例」は、Visual C++ 付属ツール「dumpbin.exe」の実行結果です。
<使用方法>
dumpbin /HEADERS <filename>

2014/01/23 08:10:14
id:onigiriTurnA

なるほど、実は簡単に情報を抽出できるのですね。丁寧に解説してくださりありがとうございます!大変参考になりました。

2014/01/24 00:06:47
id:onigiriTurnA

なるほど、実は簡単に情報を抽出できるのですね。丁寧に解説してくださりありがとうございます!大変参考になりました。

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません