我们在写注册机的时候,经常会从汇编语言翻译到c语言代码。
我们先看看一个比较短和简单的函数
反编译如下: (热键F5):
可以看到产生的c代码比较合理,但是不完美。看上去有点乱,这是应为反编译不能执行类型恢复。显然,a1参数是指向一个结构体的指针。让我们增加一些数据类型看看发生什么。我们打开Structure windows(Shift-F9),增加一个结构体。
我们切换到pseudocode window指定a1的类型。我们把光标放在a1出现的地方,按Y
当我们按回车后,反编译器输出开始变得更容易阅读。
但是,这里还有一些改进。我们把这个结构体重新命名,并且指定它的类型。例如,fileld_6B1看上去像是一个计数器Fileld_6B5显而易见是一个函数指针。我们不需要切换窗口就可以做这些。只有初始化结构定义才需要切换到structure window窗口。这里我们指定函数指针的字段。
最终结果看上去像是这样。
这里没有强制类型转换,看上去比最初的代码好看了更多。