2016-10-15 23 views
1

私は自分のRaspberry Pi(ASLRが無効)にバッファオーバーフローを生成するために取り組んでいます。 私は、main functionvulnerable function、そして呼び出されるべきではない関数であるevil functionを持つプログラムを持っています。GDB:関数の戻りアドレスが格納されているスタックメモリアドレスを検索しますか?

私のmain関数はある時点で脆弱な関数を呼び出しますが、悪関数は決して呼び出されません。私はそれがバッファオーバーフローを使用していることを確認する必要があります。

私が今までに持っているのは、主な機能の脆弱な機能の戻りアドレスです。悪い機能の開始アドレスで上書きしたいのです。私はこれが正しいアプローチだと思う。

しかし、私はどのようにgdbのメモリを調べて、どのスタックアドレスにリターンアドレスが格納されているかを知ることができませんでした。利用可能な例があります。プログラムの実行中にgdbを通して文字列を入力すると、スタックポインタの周りのメモリを検索し、何らかの形で戻りアドレスが格納されます。これは私にとってはむしろ変わっているようです。なぜなら、彼らの入力は、必然的に求められていたリターンアドレスからちょうどカップルのアドレスを記憶していることを、どうやって知ることができたからです。

gdbを使用してリターンアドレスのスタックを「検索」できるかどうかは私の質問です。

答えて

0

ラズベリーパイはARMマイクロコントローラを実行しているため、ARMアーキテクチャと呼び出し規約について詳しく知っておく必要があります。

ARMレジスタ、特にスタックポインタ(略称SP)とリンクレジスタ(略称LR:関数の戻り先アドレスが格納されています)について詳しくお読みください。良い説明については、例えばquestionを参照してください。

これらのレジスタの値をgdbで目視検査するには、指示info registersを使用します(i rと入力しても機能します)。詳細は、docを参照してください。

関連する問題