文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
8.5 语言独立绑定
反编译器为其特定的目标语言产生代码。利用编译器和库的签名来反编译二进制程序,产生目标语言程序——在其中使用在库签名文件中定义的库例程的名字。如果二进制程序原来的编写语言跟反编译器的目标语言是不同的,则不能够用这个语言再编译目标程序,因为它使用的库例程是在别的语言/编译器中定义的。考虑下列反编译的 C 语言代码片断:
WriteString ("Hello Pascal"); CrLf(); |
这两个语句调用 Pascal 语言库例程实现原来 Pascal 语句功能 writeln ("Hello Pascal"); 第一个例程显示字符串而第二个例程执行一个回车换行。换句话说,因为在 Pascal 语言的库中没有 writeln 这个库例程,所以这个调用是以 WriteString 和 CrLf 的调用代替。反编译的代码是正确的,但是由于目标语言是 C 语言,因此,假如 WriteString 和 CrLf 不是 C 语言的库例程,那么这个代码就无法被再编译。
上述问题可以通过在 Pascal 库函数和 C 语言库函数之间建立联系(绑定) 来解决。用这个办法,不生成上面那两个语句,而是使用一个对 printf 的调用,如下:
printf ("Hello Pascal\n"); |
ISO 第 11 工作组 SC22 委员会的目标是为服务设施的语言独立访问建立标准。其工作成果能够被用来为一些语言定义语言独立绑定,比如 C 和 Modula-2。可以把关于库绑定的信息放在一个文件里,而反编译器的代码生成器可以利用它产生使用目标语言库例程的目标代码。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论