您是否假设二进制文件中的每个字节对都是一条指令?那将是一个糟糕的假设。当您遵循入口点的芯片规则并遵循可能的代码路径时,这些不可能的指令会出现吗?固定或可变长度指令集,各种架构(arm、mips、x86 等),您会在二进制文件中找到不是指令的数据,这就是它的工作原理。反汇编一个全尺寸的arm程序(固定长度的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
比我看到模拟器和其他文档更糟糕的是,电脑从 0x200 开始,你的二进制文件没有任何数据。
好的,所以我刚才敲了一个chip8模拟器,到目前为止你的程序没有遇到任何未定义的问题。它正在等待击键和其他我尚未手动解码的东西。
将尝试使用反汇编程序。
编辑2:
所以我敲了一个反汇编程序,它没有到达那些地址,它结束于
034E : 0x7402 add v4,0x02
0350 : 0xD341 drw v3,v4,1
0352 : 0x00EE ret
你可以自己敲出一个,遵循所有的代码路径,希望你得到相同的结果。
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
There are a number of instructions that load i with an address in that space at and after 0x354, so I would assume what you find there is data used by the program, not instructions. and the largest one is 0x362. of the data described by your hexdump the largest address is 0x363 but it is a zero and/or intentional padding or would have to look at the code with respect to the use of 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