WEB开发网
开发学院软件开发Python 以Python为例讨论高级编程语言程序的wire format与... 阅读

以Python为例讨论高级编程语言程序的wire format与校验

 2010-09-22 11:26:23 来源:WEB开发网   
核心提示: 1、间接跳转 本地代码一般允许操纵跳转目标的能力,例如任意计算一个地址作为函数指针然后通过call指令跳转过去,以Python为例讨论高级编程语言程序的wire format与校验(3),由于跳转目标要等到运行时才能计算出来,静态方法不能保证准确分析出所有代码的位置,在控制流方面,即使是有

1、间接跳转

本地代码一般允许操纵跳转目标的能力,例如任意计算一个地址作为函数指针然后通过call指令跳转过去。由于跳转目标要等到运行时才能计算出来,静态方法不能保证准确分析出所有代码的位置。

2、代码段中夹杂数据

有时候编译器为了能更高效的访问到一些编译时常量,会把常量及使用到它的代码放在一起。最典型的例子就是C的switch语句的编译,紧挨着switch的代码之后会存有对应的跳转表。

3、可变长度指令集

常见于CISC指令集,根据指令使用频率的高低(和历史原因)而将指令设计为不等长的,以期提高代码密度(和保持向后兼容性)。

4、为对齐而填充数据

机器在访问以字长对齐的数据时效率通常较高,例如以4字节为单位;而cache line则可能在更大的单位上访问对齐的数据,例如以64字节为单位。编译器可能考虑这些因素,为了将跳转目标放在对齐边界上而使用空指令去填充空间(padding)。

因为代码发现有困难,使用静态分析工具去准确分析本地代码并判断其安全性并不现实。分析本地代码可以使用更动态的手段,例如靠动态基本块(dynamic basic block)来跟踪程序代码。

用户在使用封装本地代码的wire format时,必须自行判断其可靠性,确认自己“信任”程序才去执行它。

以源码为wire format

高级编程语言一般在语法和语义上有明确的、相对严格的规定,有一定的类型系统,对控制流也有所要求。在类型系统方面,如果语言有较强的类型系统(与静态/动态无关),则程序无法以任意方式去解释/转换数据,而必须遵循较严的规则。在控制流方面,即使是有goto语句的语言(如C#),控制流也可能受限制。例如下面的C#代码片段不合法:

上一页  1 2 3 4 5 6 7 8  下一页

Tags:Python 讨论 高级

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接