問題
解いてみた
asm1(0xcd)のときにリターンは何かという問題です。
似たような問題が以前もありました。
picoCTF 2018 assembly-0 - Points: 150
まずはダウンロードしてみます。
問題のとおり、アセンブラでした。
まず前提として以下は忘れないように。
- 引数はebp+0x8に入っている
- 戻り値は関数が終わったときのeax
順に追っていきましょう。
9行目の
cmp DWORD PTR [ebp+0x8],0xde
で0xcdと0xdeを比較しています。
もちろん異なりまして0xcd<0xdeです。
10行目の
jg part_a
は「>」のときにジャンプする命令なので、今回はジャンプしません。
次に11行目の
cmp DWORD PTR [ebp+0x8],0x8
は0xcdと0x8の比較です。
もちろん0xcdと0x8は異なります。
12行目の
jne part_b
は等しくなければジャンプなので22行目にジャンプします。
23行目の
mov eax,DWORD PTR [ebp+0x8]
でeaxに0xcdが代入されます。
24行目の
sub eax,0x3
はeax-0x3をeaxに代入します。
0xcd-0x3は0xcaなのでeaxが0xcaになります。
25行目の
jmp part_d
でジャンプ。
part_dはretがあるので関数の終了。
あれ?これで終わり?
他のところはダミーでしょうか?
とりあえず現状のeaxの値は0xcaなのでこれを入れてみると正解でしたー。