8日目 メモリのセグメント化 その4

今日はvanellopeさん(@vane11opeさん)に沢山教えていただきました

ありがとうございます🙌

 

まず、radare2っていうツールがあるらしいです。

apt-get install radare2ってやって

取り敢えずインストールしてみました。

カラフルでとても見やすいです。

操作も楽しい。

 

これで前回できなかったスタックの成長とかを観察していきたいと思います。

 

r2 -d ./a.out

これでデバッガで起動できました。

dcu main

でmain関数まで実行できます

V

ってやるとvisual modeというモードになるらしいです。とりあえず

p

を押します。するとrip周辺の命令が表示されました。hjklで移動できるみたいですね。

ここで訳分からん処理のとこに来てしまったら

戻って、

dr

これでripの値を確認して

<ripの値>

これだけ入力すれば見てる対象のメモリを移動できます(日本語でおk

 

次にripよりちょっと小さいアドレスにtest_functionので0x40055aの直前まで動かしてみます

 f:id:simauma1203:20180117225623j:image

 

こんな風になりました。

ripの位置が移動してるのが一目瞭然ですね。

 

それに合わせてスタックも確認してみます。

ripの直前の4行で引数をrbp-0xNNに渡しているので、rbp-0x34辺りをみてみます。

 

f:id:simauma1203:20180117225525j:image

はい。ちゃんと引数がありました。

よかったあ

 

次に戻り値も確認します。

x64-86ではrbp+0x08にあるらしいので

そのアドレスを見てみます。

因みにrbp+0x08=0x7ffcda7e6188

なので、戻りアドレスは0x004005a8のはずです。

これはtest_func関数を終了した直後の命令のアドレスとちゃんと一致していました。

f:id:simauma1203:20180117225931j:image 

 

f:id:simauma1203:20180117225939j:image 

 

 なんか、うまく行きました。

 操作も適当でよくわからなかったので、慣れていこうと思います。

 

 

 

参考にさせてもらったサイト

ヴァネろぴさんのところ

http://vane11ope.hatenablog.com/entry/2017/12/25/104653