LG前期ROMでの任意コード実行法が割れていないようなので簡潔に纏めます。
任意コード実行バグ自体の原理としてはEm,FRで行ったものと全く同じですので細かい解説は省きます。
アセンブリやメモリ構造を理解しており、Emでの任意コード実行環境が整っている方向けです。
Emの0x2B5CやFRの0x38C9のような都合の良いバグ技が存在しなかったので幾つか候補となる技を挙げています。
それぞれ参照されるメモリアドレスが異なっている為、使用する技に合わせて各自でプログラムを調整するようにお願いします。
バグ技持ちの個体調達はEmで行うことを推奨します。
GBA同士の交換ではバグ技持ちが扱えないのでGC(Co,XD)経由で送ってください。
使用できるバグ技
0x2348
威力:37
命中:37
PP:37
参照メモリアドレス:0x02030400
効果は『ねむる』と同一。
HPが満タンの場合は失敗する。
0x21BE
威力:153
命中:153
PP:17
参照メモリアドレス:0x020300C0
効果は自分に対し『あくび』を使用するというもの。
使用後は基本的にすぐに戦闘離脱するのでほぼノーデメリット?
この記事の最後に紹介している任意コード実行ではこのバグ技を使用しています。
0x0259
威力:---
命中:96
PP:1
参照メモリアドレス:0x02030400
効果は通常攻撃。
PPが非常に少ない。ごく稀に外れる。
0x20F9
威力:153
命中:153
PP:153
参照メモリアドレス:0x02030087
効果は『テレポート』と同一。
任意コード実行と戦闘離脱を同時に行ってくれるが、参照アドレスが4の倍数ではないのでスクリプトが記述しづらい。
実行するコードの例
0x21BE用たんじょうのしまワープ
技成功後にテレポートを使用するとたんじょうのしまにワープします。
.thumb /*元のコード*/ ldr r0, =0x03005048 /*動的RAM制御ポインタ*/ ldr r0, [r0] ldr r1, =0x00003802 /*マップ指定*/ str r1, [r0, #0x1c] pop {r4-r7, pc} /**/ /*===========================*/ /**/ /*ボックス名埋め込み用*/ /*Box1*/ box1: ldr r0, var2 ldr r0, [r0] ldr r1, var1 b box3 /*Box3*/ box3: str r1, [r0, #0x1C] pop {r4-r6} pop {r7, pc} /*Box5*/ var1: .word 0x00003802 /*Box7*/ var2: .word 0x03005048 box7: b box1
ボックス内編集内容
ジャンプスクリプト部
13 07 16 03 02 (12/23 NN:てきにうい)
13 01 16 03 02 (12/23 TN:てあにうい)
13 D5 15 03 02 (12/24 NN:てaなうい)
任意コード実行スクリプト部
03 35 16 03 02 80 00 08 (Box2:うゅにういィ く)
03 ED 15 03 02 80 00 08 (Box4: うyなういィ く)
03 A9 15 03 02 80 00 08 (Box6:う8なういィ く)
任意コード部
0D 48 00 68 07 49 04 E0 (box1:すぶ ネきべえl)
C1 61 70 BC 80 BD (box3:GチミBィC)
02 38 00 00 (box5:いぎ )
51 51 48 50 00 03 E0 E7 (box7:アアぶっ うls)
ボックス5の名前を書き換えることでワープ先を変更できます。
以下はその例になります。
[い ]:へそのいわ
[あえ ]:サント・アンヌごう桟橋
[あぜ ]:サファリゾーン
[あっ ]:殿堂入り部屋
[うゃ ]:8ばんななしま
[うゅ ]:9ばんななしま