バイナリのすべてのバイトペアが命令であると仮定していますか? それは悪い仮定です。エントリ ポイントのチップ ルールに従い、可能なコード パスに従うと、これらの不可能な命令が表示されますか? 固定長または可変長の命令セット、さまざまなアーキテクチャ (arm、mips、x86 など) では、命令ではないバイナリ内のデータが見つかります。フル サイズのアーム プログラム (固定長 32 ビット命令) を逆アセンブルすると、未定義の命令が見つかります。それらは命令ではないためです。それらはデータであり、アドレスは遠くに到達する必要があり、ASCII 文字列などです。ゼロから最後まで移動できる固定長です。逆アセンブルします (固定長であり、そこにサム コードがないと仮定します) が、不正なビット パターンを許可/無視する必要があります。それがあなたが打っているものであれば、ここでも同じです。常に完璧であるとは限りませんが、それらのいくつかを排除するには、可能な実行パスをたどる必要があります (可変長命令セットではほとんどの場合、これを行う必要があります)。
これらに到達するためにエミュレートし、正しくエミュレートしている場合は、実行パスに従っています。そして、私たちはおそらくあなたを助けることができません. エンディアンは正しいですか、バイトペアを正しく解釈していますか? おそらくあなたはしばらくの間幸運だったので、未定義にヒットしましたか?
編集:
0x300s の内容を説明していないため、これはバイナリで得たすべてのことです
0000: 6A00
mov r10,0x00
0002: 6B04
mov r11,0x04
0004: 6C01
mov r12,0x01
0006: 6D00
mov r13,0x00
0008: 6E02
mov r14,0x02
000A: 2326
call 326
0326: 0000
UNDEFINED
さらに悪いことに、エミュレーターや他のドキュメントでは、PC は 0x200 から始まると書かれていますが、バイナリにはデータがありません。
さて、私はたった今 chip8 シミュレーターを叩き出しましたが、これまでのところあなたのプログラムは未定義にヒットしていません。キーストロークや、まだ手動でデコードしていないその他のものを待っています。
代わりに逆アセンブラを試します。
EDIT2:
だから私はdisassebmlerを叩きました、そしてそれはそれらのアドレスにヒットしませんでした、それはで終わります
034E : 0x7402 add v4,0x02
0350 : 0xD341 drw v3,v4,1
0352 : 0x00EE ret
自分で 1 つ試してみて、すべてのコード パスをたどっても、うまくいけば同じ結果が得られます。
0xBnnn 命令は、実行時にデータに依存するため、つまずく可能性がある唯一の命令だと思います。そのため、(実際に発生する可能性のあるすべての組み合わせで) エミュレートして、どこに移動できるかを確認する必要があります。基本的に、遭遇した場合は、着陸可能な場所をある程度手で調べて、そこから移動する必要があります。
このコードではそれが見つかりませんでした。
私の分解、それがあなたのものとどのように比較されるかを見てください:
0200 : 0x6A00 ld v10,0x00
0202 : 0x6B04 ld v11,0x04
0204 : 0x6C01 ld v12,0x01
0206 : 0x6D00 ld v13,0x00
0208 : 0x6E02 ld v14,0x02
020A : 0x2326 call 326
020C : 0x2320 call 320
020E : 0x6030 ld v0,0x30
0210 : 0x6101 ld v1,0x01
0212 : 0xF015 ld dt,v0
0214 : 0xF007 ld v0,dt
0216 : 0xF118 ld st,v1
0218 : 0x3000 se v0,0x00
021A : 0x1214 jp 214
021C : 0x2242 call 242
021E : 0x2320 call 320
0220 : 0x7D01 add v13,0x01
0222 : 0x2320 call 320
0224 : 0x6008 ld v0,0x08
0226 : 0xE0A1 sknp v0
0228 : 0x230A call 30A
022A : 0x4A00 sne v10,0x00
022C : 0x123E jp 23E
022E : 0xA362 ld i,362
0230 : 0xD891 drw v8,v9,1
0232 : 0x7901 add v9,0x01
0234 : 0xD891 drw v8,v9,1
0236 : 0x4F01 sne v15,0x01
0238 : 0x12F4 jp 2F4
023A : 0x4918 sne v9,0x18
023C : 0x12E4 jp 2E4
023E : 0x22B2 call 2B2
0240 : 0x121E jp 21E
0242 : 0x4C01 sne v12,0x01
0244 : 0x226C call 26C
0246 : 0x4C02 sne v12,0x02
0248 : 0x227A call 27A
024A : 0x4C03 sne v12,0x03
024C : 0x2288 call 288
024E : 0x4C04 sne v12,0x04
0250 : 0x2296 call 296
0252 : 0x4C05 sne v12,0x05
0254 : 0x22A4 call 2A4
0256 : 0xA359 ld i,359
0258 : 0xD672 drw v6,v7,2
025A : 0x4400 sne v4,0x00
025C : 0x00EE ret
025E : 0xA357 ld i,357
0260 : 0xD452 drw v4,v5,2
0262 : 0x4200 sne v2,0x00
0264 : 0x00EE ret
0266 : 0xA35B ld i,35B
0268 : 0xD232 drw v2,v3,2
026A : 0x00EE ret
026C : 0x6628 ld v6,0x28
026E : 0x6709 ld v7,0x09
0270 : 0x6400 ld v4,0x00
0272 : 0x6500 ld v5,0x00
0274 : 0x6200 ld v2,0x00
0276 : 0x6300 ld v3,0x00
0278 : 0x00EE ret
027A : 0x6628 ld v6,0x28
027C : 0x670E ld v7,0x0E
027E : 0x6428 ld v4,0x28
0280 : 0x6514 ld v5,0x14
0282 : 0x6200 ld v2,0x00
0284 : 0x6300 ld v3,0x00
0286 : 0x00EE ret
0288 : 0x6628 ld v6,0x28
028A : 0x6707 ld v7,0x07
028C : 0x6428 ld v4,0x28
028E : 0x650C ld v5,0x0C
0290 : 0x6216 ld v2,0x16
0292 : 0x6311 ld v3,0x11
0294 : 0x00EE ret
0296 : 0x6628 ld v6,0x28
0298 : 0x6707 ld v7,0x07
029A : 0x6428 ld v4,0x28
029C : 0x650E ld v5,0x0E
029E : 0x6216 ld v2,0x16
02A0 : 0x6314 ld v3,0x14
02A2 : 0x00EE ret
02A4 : 0x6628 ld v6,0x28
02A6 : 0x6705 ld v7,0x05
02A8 : 0x6428 ld v4,0x28
02AA : 0x6510 ld v5,0x10
02AC : 0x6216 ld v2,0x16
02AE : 0x630B ld v3,0x0B
02B0 : 0x00EE ret
02B2 : 0xA359 ld i,359
02B4 : 0xD672 drw v6,v7,2
02B6 : 0x76FE add v6,0xFE
02B8 : 0xD672 drw v6,v7,2
02BA : 0x4400 sne v4,0x00
02BC : 0x00EE ret
02BE : 0xA357 ld i,357
02C0 : 0xD452 drw v4,v5,2
02C2 : 0x7402 add v4,0x02
02C4 : 0x4444 sne v4,0x44
02C6 : 0x74C0 add v4,0xC0
02C8 : 0xD452 drw v4,v5,2
02CA : 0x4200 sne v2,0x00
02CC : 0x00EE ret
02CE : 0xA35B ld i,35B
02D0 : 0xD232 drw v2,v3,2
02D2 : 0x7202 add v2,0x02
02D4 : 0x4C04 sne v12,0x04
02D6 : 0x7202 add v2,0x02
02D8 : 0x4C05 sne v12,0x05
02DA : 0x7202 add v2,0x02
02DC : 0x4244 sne v2,0x44
02DE : 0x72C0 add v2,0xC0
02E0 : 0xD232 drw v2,v3,2
02E2 : 0x00EE ret
02E4 : 0x7C01 add v12,0x01
02E6 : 0x6D00 ld v13,0x00
02E8 : 0x6E02 ld v14,0x02
02EA : 0x00E0 cls
02EC : 0x4C06 sne v12,0x06
02EE : 0x6C01 ld v12,0x01
02F0 : 0x6A00 ld v10,0x00
02F2 : 0x120A jp 20A
02F4 : 0x6006 ld v0,0x06
02F6 : 0xF018 ld st,v0
02F8 : 0x7BFF add v11,0xFF
02FA : 0x4B00 sne v11,0x00
02FC : 0x1308 jp 308
02FE : 0x6D00 ld v13,0x00
0300 : 0x6E02 ld v14,0x02
0302 : 0x00E0 cls
0304 : 0x6A00 ld v10,0x00
0306 : 0x120A jp 20A
0308 : 0x1308 jp 308
030A : 0x4A01 sne v10,0x01
030C : 0x00EE ret
030E : 0x6002 ld v0,0x02
0310 : 0xF018 ld st,v0
0312 : 0x6A01 ld v10,0x01
0314 : 0x88D0 ld v8,v13
0316 : 0x7801 add v8,0x01
0318 : 0x89E0 ld v9,v14
031A : 0x7901 add v9,0x01
031C : 0xD891 drw v8,v9,1
031E : 0x00EE ret
0320 : 0xA354 ld i,354
0322 : 0xDDE2 drw v13,v14,2
0324 : 0x00EE ret
0326 : 0x6419 ld v4,0x19
0328 : 0x6300 ld v3,0x00
032A : 0xA356 ld i,356
032C : 0xD341 drw v3,v4,1
032E : 0x7308 add v3,0x08
0330 : 0x3340 se v3,0x40
0332 : 0x132C jp 32C
0334 : 0x631E ld v3,0x1E
0336 : 0x641B ld v4,0x1B
0338 : 0xFC29 ld f,v12
033A : 0xD345 drw v3,v4,5
033C : 0x4B04 sne v11,0x04
033E : 0xA35F ld i,35F
0340 : 0x4B03 sne v11,0x03
0342 : 0xA360 ld i,360
0344 : 0x4B02 sne v11,0x02
0346 : 0xA361 ld i,361
0348 : 0x4B01 sne v11,0x01
034A : 0xA362 ld i,362
034C : 0x6301 ld v3,0x01
034E : 0x7402 add v4,0x02
0350 : 0xD341 drw v3,v4,1
0352 : 0x00EE ret
その空間の 0x354 以降のアドレスで i をロードする命令がいくつかあるので、そこにあるのは命令ではなく、プログラムによって使用されるデータであると想定します。最大のものは 0x362 です。あなたのhexdumpによって記述されたデータの最大アドレスは0x363ですが、それはゼロおよび/または意図的なパディングであるか、iの使用に関してコードを調べる必要があります.
022E : 0xA362 ld i,362
0256 : 0xA359 ld i,359
025E : 0xA357 ld i,357
0266 : 0xA35B ld i,35B
02B2 : 0xA359 ld i,359
02BE : 0xA357 ld i,357
02CE : 0xA35B ld i,35B
0320 : 0xA354 ld i,354
032A : 0xA356 ld i,356
033E : 0xA35F ld i,35F
0342 : 0xA360 ld i,360
0346 : 0xA361 ld i,361
034A : 0xA362 ld i,362