0

Cでは、「常に」同じ結果を返す関数がある場合、次のことができます。

(gdb) p foo()

しかし、この関数が常にランダムな結果を返す場合、変数を使用せずにその値を出力する方法。その他の詳細として、関数のデバッグ情報がない場合は、削除されたライブラリからのものです。

(gdb) p myRandom()使用できません。アプリケーションで使用される値とは異なる結果になります。

「なぜランダム関数を使用し、その結果を使用しないのか」と質問するかもしれません。リターンは、その関数が行うことの単なる余分なものであるとしましょう。

4

1 に答える 1

2

(gdb)p myRandom()
は使用できません。アプリケーションで使用される値とは異なる結果になります。

おそらく、アプリケーションが呼び出した特定の場所でアプリケーションに返された値を調べたいと思いますmyRandom()

の直後の命令にブレークポイントを設定してからCALL、値が返されるレジスタを調べる必要があります。たとえば、でi*86、値はeaxレジスタに返されるので、を実行しますprint $eax

または、ブレークポイントを設定してmyRandom()からfinishコマンドを実行し(これを行うためにデバッグ情報は必要ありません)、リターンレジスタを調べます。

于 2012-12-05T15:05:37.403 に答える