更に個別パターンごとに指示を仰ぐととてつもなく時間がかかるので、基本だけ書きます。昔かじったことを思い出して書いているだけですので間違っていたら指摘してください。プロセッサの話は割愛します。エンディアンの話も割愛します。私はZ80時代の人間ですので8ビット超えるとオーバーフローします。そのため質問には答えられないと思います。分かる人が答えてあげてください。
数字の羅列では人間が理解できないので、それを分かるようにするための言語がアセンブラです。アセンブラでプログラムを作るのが正規のやり方だとすると、逆に数字の羅列を分かりやすくアセンブラで表示することを逆アセンブルするといいます。
EPC (Exception Program Counter)は、そこに示されたアドレスでクラッシュしていることを表しています。
そのアドレスの前後で何が起こっているのかを解析するために逆アセンブル(Disassemble)をして表示させます。
そのためのコマンド(命令)が
disasm
です。
neur0nさんがコメントしている
disasm 0x0883D65C 30 とタイプする
のは、0x0883D65Cから30行分逆アセンブルした結果を表示させてみてくれという意味です。
0x0883D65C というアドレスはどこから来ているのかと言うと、
EPC 0x0883D6AC
となっているEPCで表示されたアドレスから前に0x50分前にあるアドレスにあたります。
50というのは16進数です。10進数だと80です。
0x0883D6AC - 0x50= 0x0883D65C
逆アセンブルして気が付くと思いますが、一番左に表示されているアドレスは4バイトずつ増えています。これは4バイトづつで1つの命令になっているからです。
先ほど0x50分だけ前と言いましたが、0x50は10進数で言うと80バイトです。逆アセンブルすると1つの命令が4バイトで構成されて1行に表示されているわけですから
80 ÷ 4 = 20行分逆アセンブル結果が表示されていることになります。
さて、先ほど
disasm 0x0883D65C 30
のコマンドの時に30行分逆アセンブルと言いました。0x0883D65CというアドレスはEPCのアドレスから20行分前でしたから、EPCのアドレスから更に10行分余分に表示するということになります。
つまり、EPCで表示されたアドレスの前後で何が起こっているのかを表示させて状況を確認するためにdisasmコマンドを利用するのです。
実際何が表示されているのかと言うと、前部分には何が起こってレジスタに例えば「aaaa」と入れたものが「61616161」と入っているのかが出てきます。(必ずしも前20行にあるとは限りませんが)
後ろ部分には、その結果何が起こるのかが出てきます。
何が出てくるとexploitなのかと言うと、neur0nさんのコメントを借りると
lw $t0 0($a0)
・
・
jr $t0
となっていて、$a0がコントロール可能ならば、それはExploitになりえます。
簡単に言うと、
jr(ジャンプコマンドの一つ)の後に出てくる部分をユーザーがコントロールできれば任意の場所にジャンプさせることが出来るので、ユーザーが自分で書き換えが出来るセーブデータ部分にコードを仕込んでおき、そのコードが書かれているアドレスにジャンプさせることが自由に出来れば自作コードを実行することが出来る
ということです。
exploitかどうかの判断としては、ジャンプ命令や、分岐命令で任意のアドレスへ飛ばすことができるのかを考えてください。下にジャンプ/分岐命令の例を挙げておきます。意味はフル英文から読み取ってください。書いてあるそのまんまです。分岐は条件を満たさないといけないので使える可能性はあまり無いと思います。
ジャンプ命令
j :Jump
jal :Jump And Link
jr :Jump Register
jalr :Jump And Link Register
分岐命令
beq :Branch on Equal
bne :Branch on Not Equal
blez :Branch on Less than or Equal to Zero
bgtz :Branch on Greater Than Zero
bltz :Branch on Less Than Zero
bgez :Branch on Greater than or Equal to Zero
bltzal :Branch on Less Than Zero And Link
bgezal :Branch on Greater than or Equal to Zero And Link
「aaaa」の数を増やす減らすは、挙動を変えてみるために行っています。1バイト変えるだけでもEPCの値が変わる可能性がありますし、クラッシュアドレスが変われば全く別ものになります。
が、これ以上やってたらあと100年くらいかかるんじゃないかと思うくらいEPCの値が変わらない場合にはそのゲームはさっさと諦めるか、全く異なるアドレスへの文字入力を狙ってみた方が良いでしょう。
exploitは$raをコントロールできるものである、という表面的な定義だけで理解していると、$raがコントロールできないexploit探しのような時に応用がきかず全く理解できなくなります。
基本さえ理解していればなんとなく分かるものです。また、この話が理解できていれば「これはexploitですか?」という質問はする必要がなくなります。