1

変数の値を出力するプログラムがあるとします。その変数を「i」とします。バイナリファイルは '.exe'形式です。 'i'の値を決定する方法と、特定の値が '.exe'形式の変数 'i'の値であることを理解していますか?exeファイルから変数の値を調べる

答えて

4

変数がローカルかグローバルかによって異なります。グローバルならば、適切なツールを使うのは簡単です(私はLinuxを使って以来、特別なものはお勧めできません)。シンボルテーブルでシンボル "i"の位置を見つけるだけで、と表示されます。ここで、 'i'はです。その値に含まれている値を知りたい場合は、の最初のの値を実行時に表示することはできません(プログラムの実行イメージではなく、exeファイルを参照しているためです)。初期化されていない場合は、初期値がわかりません。さもなければ、その初期値が値の場所の横にあるツール(おそらくは16進数で表示されるので、デコードする必要があるでしょう)に表示されます。

変数がローカルの場合、それは別の話です。プログラムのコンパイル時にローカル変数名が失われるため、変数には名前はありません。その関数が実行されている間は、(おそらく)スタック上の位置を占めるだけです。たとえば、最初の変数は、多くの場合、-8(%ebp)にあり、2番目の変数は-12(%ebp)など(-4(%ebp)および0(%ebp)は特別)です。したがって、exeのアセンブリコードを調べている場合は、-8(%ebp)が関数内の最初のローカル変数を参照する可能性があります。繰り返しますが、静的にexeを見ているので、どのような価値があるかを知ることはできません。これは、どのコンパイラが使用されたか、どの最適化レベルに設定されたかによって異なります。

ご迷惑をおかけして申し訳ございません。あなたがアセンブリコードとシンボルテーブルを表示するいくつかの逆コンパイルツールにアクセスしていると仮定しています。

+1

ゲーマー向けの特別なツールがあります。基本的に、他のプロセスのグローバル変数を監視して変更することができます。 – ruslik

+0

@ruslikしかし、通常は特定のゲーム用です。私はあなたがプログラム内の値を検索し、それらを修正することを可能にするいくつかの一般的なプログラムを見てきました:[Cheat-o-matic](http://www.freewarereview.info/2007-01/cheat-o-matic_-manipulate_almost_any_computer_video_game_with_memory_scanning_.html )と[Poke](http://codefromthe70s.org/poke.aspx)がありますが、どちらもWindows用です。 – mgiuca

+0

@mgiucaあなたが言ったことは大丈夫です。しかし、GDBが実行可能ファイルからローカル変数名を取得するのはどうですか? –

関連する問題