我正在对 USB 控制器进行逆向工程。控制器芯片的名称是“UD6810”,它似乎是另一个芯片的中文克隆(因为很多关于它的结果已通过 DMCA 请求从 Google 中删除)。我找到了一个可以成功刷新固件的程序。
但是,我显然需要先确定指令集,然后才能对其进行修改。我在网上找到的数据表似乎缺少这些关键信息,而且文档通常很难找到。我有二进制代码,因为我既可以在闪烁程序的文件中看到它,又可以在它闪烁芯片时在 USB 流量中捕获它。
如何确定指令集?
我正在对 USB 控制器进行逆向工程。控制器芯片的名称是“UD6810”,它似乎是另一个芯片的中文克隆(因为很多关于它的结果已通过 DMCA 请求从 Google 中删除)。我找到了一个可以成功刷新固件的程序。
但是,我显然需要先确定指令集,然后才能对其进行修改。我在网上找到的数据表似乎缺少这些关键信息,而且文档通常很难找到。我有二进制代码,因为我既可以在闪烁程序的文件中看到它,又可以在它闪烁芯片时在 USB 流量中捕获它。
如何确定指令集?
我不会回答您在标题中提出的问题,而是您实际需要的内容。
它是 8051 衍生品的可能性约为 99%。我不知道一个不使用的中国 USB 控制器。当然,虽然我还没有看到所有这些。
我从 flashboot.ru 为这个控制器下载了一个随机 MPTOOL,它有一些二进制文件。它们确实看起来像 8051 代码:
ROM:1B24 RESET_0: ; CODE XREF: RESETj
ROM:1B24 75 81 7E mov SP, #RAM_7E ; Stack Pointer
ROM:1B27 02 1B 65 ljmp ROM_1B65
ROM:1B2A ; ---------------------------------------------------------------------------
ROM:1B2A
ROM:1B2A ROM_1B2A: ; CODE XREF: RESET_0+48j
ROM:1B2A 02 1D 20 ljmp ROM_1D20
ROM:1B2D ; ---------------------------------------------------------------------------
ROM:1B2D
ROM:1B2D ROM_1B2D: ; CODE XREF: RESET_0+5Fj
ROM:1B2D E4 clr A
ROM:1B2E 93 movc A, @A+DPTR
ROM:1B2F A3 inc DPTR
ROM:1B30 F8 mov R0, A
ROM:1B31
ROM:1B31 ROM_1B31: ; CODE XREF: RESET_0+17j
ROM:1B31 E4 clr A
ROM:1B32 93 movc A, @A+DPTR
ROM:1B33 A3 inc DPTR
ROM:1B34 40 03 jc ROM_1B39
ROM:1B36 F6 mov @R0, A
ROM:1B37 80 01 sjmp ROM_1B3A
(这是Keil C51编译器产生的典型启动)
在 8051 二进制文件中看到的一些常见操作码:
02 xx xx ljmp (absolute)
12 xx xx lcall (absolute)
22 ret
E4 clr A
90 xx xx mov DPTR, xxxx
A3 inc DPTR