方法(2)——观察程序,可以有很多不同的形式。一些软件程序(如字处理软件,游戏软件)的功能性内容,通过观察电脑屏幕就可以获知[xxxii]。当然,在这种情况下反向工程观察的并不是目标码[xxxiii],而是代码在计算机上运行之后的外部视觉表现。本案中,工程师每次引导启动计算机的时候,软件程序都会被复制进电脑的内存中。
其他形式的观察方法具有很高的侵入性。操作系统,系统交互程序,及其他的类似于索尼BIOS的程序的内容并不会在其运行过程中直接表现给其用户。观察这些程序运行过程的一种方法就是在模拟的环境中运行这些程序。对索尼BIOS而言,就是在电脑中通过软件建立一个模拟索尼PlayStation的硬件运行环境;然后运行该BIOS程序,同时加载“调试查错软件”(“Debugger”)以便让工程师观察BIOS在电脑中运行时发出的各种同其他程序之间的交互指令信号。这种反向工程的方法需要将索尼的BIOS从PlayStation主机的芯片中拷贝到电脑中。工程师每次引导启动计算机的时候,都会将BIOS程序复制到电脑中,然后电脑会将其复制到内存中。通过这种方式进行的所有复制行为都是“中间性”(intermediate)的,也就是说Connectix公司的最终产品——VGS软件中不包含任何索尼拥有版权的程序材料。
方法(3)和(4)要将目标码反汇编为源代码[xxxiv]。在这种情况下,软件工程师通常会使用一种反汇编程序(“disassembler”)将电脑可读的由“0”和“1”组成的目标码转换成为带有文字和数字符号的高级语言代码。编译后的源代码程序和最初用于生成目标码的源代码程序非常相似,但是缺乏原始程序编写者所加的用于解释程序各部分功能的注释。通过静态方式观察程序指令,亦即方法(3),软件工程师需要对全部或部分程序进行反汇编。在反汇编过程中,需要多次复制有关的程序。通过动态方式观察程序指令,即方法(4),软件工程师会在程序运行过程中,程序每执行一步指令,就用编译器编译程序相应部分。这种方法同样涉及程序的复制,而且复制次数会更多。
3、Connectix对索尼BIOS的反向工程
1998年7月1日,Connectix公司开始研究供Macintosh使用的VGS软件。为开发出PlayStation模拟器,Connectix需要模拟PlayStation的硬件和固件(即索尼BIOS)两个部分。
在硬件模拟软件开发后期,Connectix公司的工程师同样使用索尼的BIOS对硬件模拟软件进行查错与调试。在此过程中,该公司同样多次复制了索尼的BIOS,并且反编译了部分不连续的索尼BIOS。