随笔分类 -  第十章:通过汇编语言了解程序的实际结构

摘要:代码清单10-12中用到了三种跳转指令,分别是比较结果小时跳转的jle (jump on less or equal)、大时跳转的jge (jump on greater orequal)、不管结果怎样都无条件跳转的jmp。在这些跳转指令之前还有用来比较的cmp指令,比较结果被保存在了标志寄存器中。 阅读全文
posted @ 2023-02-08 09:42 濒临物种仙女 阅读(14) 评论(0) 推荐(0) 编辑
摘要:接下来,让我们继续解析汇编语言的源代码,看一下for循环及if条件分支等C语言程序的流程控制是如何实现的。代码清单10-8是将局部变量i作为循环计数器 连续进行10次循环的C语言源代码。在for语句中,调用了不做任何处理的MySub函数。这里我们把代码清单10-8转换成汇编语言,然后仅把相当于for 阅读全文
posted @ 2023-02-08 09:40 濒临物种仙女 阅读(15) 评论(0) 推荐(0) 编辑
摘要:函数内部利用的栈,在函数处理完毕后会恢复到初始状态,因此局部变量的值也就被销毁了,而寄存器也可能会被用于其他目的。因此,局部变量只是在函数处理运行期间临时存储在寄存器和栈上。在代码清单10-6中定义了10个局部变量。这是为了表示存储局部变量的不仅仅是栈,还有寄存器。为确保cl~c10所需的领域,寄存 阅读全文
posted @ 2023-02-08 09:36 濒临物种仙女 阅读(19) 评论(0) 推荐(0) 编辑
摘要:在C语言中,在函数外部定义的变量称为全局变量,在函数内部定义的变量称为局部变量。全局变量可以参阅源代码的任意部分,而局部变量只能在定义该变量的函数内进行参阅。 阅读全文
posted @ 2023-02-08 09:34 濒临物种仙女 阅读(13) 评论(0) 推荐(0) 编辑
摘要:接下来,让我们透过执行AddNum函数的源代码部分,来看一下参数的接收、返回值的返回等机制(代码清单10-5)。 ebp寄存器的值在(1)中入栈,在(5)中出栈。这主要是为了把函数中用到的ebp寄存器的内容,恢复到函数调用前的状态。在进入函数处理之前,无法确定ebp寄存器用到了什么地方,但由于函数内 阅读全文
posted @ 2023-02-08 09:30 濒临物种仙女 阅读(19) 评论(0) 推荐(0) 编辑
摘要:上面这个图是函数调用的汇编语言代码: (1)、(2)、(7)、(8)的处理适用于C语言中所有的函数,我们会在后面展示AddNum函数处理内容时进行说明。这里希望大家先关注一下(3)~(6)部分,这对了解函数调用的机制至关重要。 (3)和(4)表示的是将传递给AddNum函数的参数通过push入栈。在 阅读全文
posted @ 2023-02-08 09:28 濒临物种仙女 阅读(18) 评论(0) 推荐(0) 编辑
摘要:程序运行时,会在内存上申请分配一个称为栈的数据空间。栈(stack)有“干草堆积如山”的意思。就如该名称所表示的那样,数据在存储时是从内存的下层(大的地址编号)逐渐往上层(小的地址编号)累积,读出时则是按照从上往下的顺利进行(图10-3)的。 栈是存储临时数据的区域,它的特点是通过push指令和po 阅读全文
posted @ 2023-02-08 09:23 濒临物种仙女 阅读(100) 评论(0) 推荐(0) 编辑
摘要:指令中最常使用的是对寄存器和内存进行数据存储的mov指令。mov指令的两个操作数,分别用来指定数据的存储地和读出源。操作数中可以指定寄存器、常数、标签(附加在地址前),以及用方括号(【】)围起来的这些内容。如果指定了没有用方括号围起来的内容,就表示对该值进行处理;如果指定了用方括号围起来的内容,方括 阅读全文
posted @ 2023-02-08 09:20 濒临物种仙女 阅读(164) 评论(0) 推荐(0) 编辑
摘要:在汇编语言中,1行表示对CPU的一个指令。汇编语言指令的语法结构是操作码+操作数(也存在只有操作码没有操作数的指令)。操作码表示的是指令动作,操作数表示的是指令对象。操作码和操作数罗列在一起的语法,就是一个英文的指令文本。操作码是动词,操作数相当于宾语。例如,用汇编语言来分析“Give me mon 阅读全文
posted @ 2023-02-08 09:12 濒临物种仙女 阅读(228) 评论(0) 推荐(0) 编辑
摘要:汇编语言的源代码,是由转换成本地代码的指令(后面讲述的操作码)和针对汇编器的伪指令构成的。伪指令负责把程序的构造及汇编的方法指示给汇编器(转换程序)。不过伪指令本身是无法汇编转换成本地代码的。这里我们把代码清单10-2中用到的伪指令部分摘出,如代码清单10-3所示。 由伪指令 segment和end 阅读全文
posted @ 2023-02-07 15:34 濒临物种仙女 阅读(13) 评论(0) 推荐(0) 编辑
摘要:除了将本地代码进行反汇编这一方法外,通过其他方式也可以获取汇编语言的源代码。大部分C语言编译器,都可以把利用C语言编写的源代码转换成汇编语言的源代码,而不是本地代码。利用该功能,就可以对C语言的源代码和汇编语言的源代码进行比较研究。笔者在学生时代的报告中,使用的便是该功能。Borland C++中, 阅读全文
posted @ 2023-02-07 15:31 濒临物种仙女 阅读(64) 评论(0) 推荐(0) 编辑
摘要:在加法运算的本地代码中加上add(addition的缩写)、在比较运算的本地代码中加上cmp(compare的缩写)等。这些缩写称为助记符,使用助记符的编程语言称为汇编语言。这样,通过查看汇编语言编写的源代码,就可以了解程序的本质了。因为这和查看本地代码的源代码,是同一级别的。不过,即使是用汇编语言 阅读全文
posted @ 2023-02-07 15:24 濒临物种仙女 阅读(22) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示