3.C程序的机器级表示

3.C程序的机器级表示

强行访问不同数据对象的字节:

对于C语言来说,它支持整型数据、浮点数据等多种采取不同编码方式的数据类型。从机器角度看,他们又是一样的,均表示为一个连续的字节序列。

根据机器的不同,数据使用的字节顺序也有所不同:

l  小端法:最低有效字节存储在所用字节中的最低地址。随着地址的增大,它在存储器中按照最低字节到最高字节的顺序进行存储。绝大部分Intel兼容机都是采用小端法,如Linux的IA32和x86-64机器,Windows的IA32机器

l  大端法:最高有效字节存储在所用字节中的最低地址。随着地址的增大,它在存储器中按照最高字节到最低字节的顺序进行存储。大多数IBM和Sun机器采用大端法,如运行Solaris的Sun Sparc处理器

学习C程序的机器级原因:

l  相比二进制格式的机器级代码,汇编代码可读性更好,它是机器代码的文本表示,给出了程序中的每条指令。理解汇编代码和原始C代码的联系,是理解计算机如何执行程序的关键一步。

l  阅读汇编代码,有助于我们理解编译器的优化能力,并分析代码中的低效率。注:编译器如果使用更高的优化级别优化程序,它可能会使产生的代码严重改变形式,比如快速操作代替慢速操作,递归计算变成迭代计算,对应关系就不太容易理解。

理解汇编代码,有助于我们了解程序运行时行为的信息。我们会了解程序如何将数据存储在不同的存储器区域中,例如我们需要知道一个变量是否在运行时栈中,还是动态分配的堆中,还是全局区域中。知道程序是如何映射到机器上是很重要的;再例如从这些机器表示中我们就能理解存储器访问越界是如何产生的,为什么蠕虫和病毒能够利用这些漏洞信息获得程序的控制权,以及出现了这种问题我们该如何防御它

高级语言的代码隐藏了程序的具体运行过程,而机器通过指令集体系结构和虚拟地址的实现屏蔽了程序的细节。它能在机器上运行实际上是一系列机器代码指令的执行序列。学习程序的机器级表示是连接高级语言与机器指令执行的桥梁。它有助于我们通过研究系统的逆向工程真正了解程序运行时的创建过程

C语言提供了一种模型,可以在存储器中声明和分配各种数据类型的对象,但汇编代码中它只是简单地将存储器看成一个很大的、按字节寻址的序列,不区分有符号数和无符号数,不区分各种类型的指针。下面我们从汇编代码的角度描述C语言各种数据、结构等的表示,主要有以下几类:

l  数据的汇编表示和处理

l  机器级程序如何实现控制结构(if,else,while,switch语句)

l  机器级程序如何维护一个运行时栈来控制过程间数据和控制的传递及存储

l  机器级程序如何表示像数据、结构和联合这样的数据结构

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值