摘要: 除了将本地代码进行反汇编这一方法外,通过其他方式也可以获取汇编语言的源代码。大部分C语言编译器,都可以把利用C语言编写的源代码转换成汇编语言的源代码,而不是本地代码。利用该功能,就可以对C语言的源代码和汇编语言的源代码进行比较研究。笔者在学生时代的报告中,使用的便是该功能。Borland C++ 中 阅读全文
posted @ 2023-02-13 21:48 原魏薯片 阅读(124) 评论(0) 推荐(0)
摘要: 通过调查本地代码的内容,可以了解程序最终是以何种形式来运行的。但是,如果直接打开本地代码来看的话,只能看到数值的罗列。如果直接使用这些数值来编写程序的话,还真是不太容易理解。因而就产生了这样一种想法,那就是在各本地代码中,附带上表示其功能的英语单词缩写。例如,在加法运算的本地代码中加上add(add 阅读全文
posted @ 2023-02-13 21:40 原魏薯片 阅读(34) 评论(0) 推荐(0)
摘要: Windows操作系统的主要特征如下所示。 (1)32位操作系统(也有64位版本) (2)通过API函数集来提供系统调用 (3)提供采用了图形用户界面的用户界面 (4)通过WYSIWYG实现打印输出 (5)提供多任务功能 (6)提供网络功能及数据库功能 (7)通过即插即用实现设备驱动的自动设定 阅读全文
posted @ 2023-02-13 21:23 原魏薯片 阅读(43) 评论(0) 推荐(0)
摘要: 通过使用操作系统提供的系统调用,程序员就没必要编写直接控 制硬件的程序了。而且,通过使用高级编程语言,有时甚至也无需考虑系统调用的存在。这是因为操作系统和高级编程语言能够使硬件抽象化。这是个非常了不起的处理。 下面就让我们来看一下硬件抽象化的具体实例。代码清单 9-2 是用 C语言编写的往文件中写人 阅读全文
posted @ 2023-02-13 21:11 原魏薯片 阅读(33) 评论(0) 推荐(0)
摘要: 操作系统的硬件控制功能,通常是通过一些小的函数集合体的形式来提供的。这些函数及调用函数的行为统称为系统调用(systemcall),也就是应用对操作系统(svstem)的功能进行调用(call)的意思。在前面的程序中用到了 time()及 printf()等函数,这些函数内部也都使用了系统调用。这里 阅读全文
posted @ 2023-02-13 20:48 原魏薯片 阅读(27) 评论(0) 推荐(0)
摘要: 代码清单9-1表示的是,在Windows操作系统下,用C语言制作一个具有表示当前时间时间功能的应用。time()是用来取得当前日期和时间的函数,print()是用来在显示器上显示字符串的函数。程序的运行结果如图9-4所示。 运行代码清单9-1的应用时,硬件的受控过程如下所示。 (1)通过time_t 阅读全文
posted @ 2023-02-13 20:30 原魏薯片 阅读(26) 评论(0) 推荐(0)
摘要: 在计算机尚不存在操作系统的年代,完全没有任何程序,因此程序员就需要编写出处理相关的所有程序。用机器语言编写程序,然后再使用开关将程序输入,这一过程非常麻烦。于是,有人开发出了仅具有加载和运行功能的监控程序,这就是操作系统的原型。通过事先启动监控程序,程序员就可以根据需要将各种程序加载到内存中运行。虽 阅读全文
posted @ 2023-02-13 19:59 原魏薯片 阅读(27) 评论(0) 推荐(0)
摘要: Q:编译器和解释器有什么不同? A:编译器是在运行前对所有源代码进行解释处理的。而解释器则是在运行时对源代码的内容一行一行地进行解释处理的。 Q:“分割编译”指的是什么? A:将整个程序分为多个源代码来编写,然后分别进行编译,最后链接成一个 EXE 文件。这样每个源代码都相对变短,便于程序管理。Q 阅读全文
posted @ 2023-02-13 18:49 原魏薯片 阅读(21) 评论(0) 推荐(0)
摘要: EXE 文件的内容分为再配置信息、变量组和函数组,这一点想必大家都清楚了吧。不过,当程序加载到内存后,除此之外还会额外生成两个组,那就是栈和堆。栈是用来存储函数内部临时使用的变量(局部变量“),以及函数调用时所用的参数的内存区域。堆是用来存储程序运行时的任意数据及对象的内存领域(图 8-10)。 E 阅读全文
posted @ 2023-02-13 18:38 原魏薯片 阅读(19) 评论(0) 推荐(0)
摘要: 在程序运行时,虚拟的内存地址会转换成实际的内存地址。链接器会在 EXE 文件的开头,追加转换内存地址所需的必要信息。这个信息称为再配置信息。 EXE 文件的再配置信息,就成为了变量和函数的相对地址。相对地址表示的是相对于基点地址的偏移量,也就是相对距离。实现相对地址,也是需要花费一番心思的。在源代码 阅读全文
posted @ 2023-02-13 18:11 原魏薯片 阅读(26) 评论(0) 推荐(0)
摘要: Windows 以函数的形式为应用提供了各种功能。这些形式的函数称为API(Application Programming Interface,应用程序接口)。 Windows 中,API的目标文件,并不是存储在通常的库文件中,而是存储在名为 DLL(Dynamic Link Library)文件的 阅读全文
posted @ 2023-02-13 16:31 原魏薯片 阅读(25) 评论(0) 推荐(0)
摘要: 链接选项“-Tpe-c-x-aa”是指定生成 Windows 用的 EXE 文件的选项。在这些选项之后,会指定结合的目标文件。而该命令行中就指定了c0w32.obj、Samplel.obj 这两个目标文件,这点相信大家都能看得出来。Samplel.obj是Samplel.c 编译后得到的目标文件。c 阅读全文
posted @ 2023-02-13 16:21 原魏薯片 阅读(33) 评论(0) 推荐(0)
摘要: 编译器转换源代码后,就会生成本地文件。不过,本地文件是无法直接运行的。为了得到可以运行的 EXE 文件,编译之后还需要进行“链接”处理。 Borland C++的编译器是 bcc32.exe 这个命令行工具。在 Windows的命令提示符"中,运行下列命令后,由C语言编写的源文件 Smaplel.c 阅读全文
posted @ 2023-02-13 15:52 原魏薯片 阅读(37) 评论(0) 推荐(0)
摘要: 能够把C语言等高级编程语言编写的源代码转换成本地代码的程序称为编译器。每个编写源代码的编程语言都需要其专用的编译器。将C语言编写的源代码转换成本地代码的编译器称为C编译器。 编译器首先读入代码的内容,然后再把源代码转换成本地代码。编译器中就好像有一个源代码同本地代码的对应表。但实际上,仅仅靠对应表是 阅读全文
posted @ 2023-02-13 15:35 原魏薯片 阅读(34) 评论(0) 推荐(0)
摘要: Windows中EXE文件的程序内容,使用的就是本地代码。 用记事本打开有代码清单8-1的内容转换成本地代码得到的EXE文件(Samplel.exe),页面显示情况如图8-3所示。据此我们应该可以看出,本地代码内容是人类无法理解的。也正是因为如此,才有了用人类容易理解的C语言等编程语言来编写源代码, 阅读全文
posted @ 2023-02-13 15:23 原魏薯片 阅读(22) 评论(0) 推荐(0)
摘要: 首先,看一下代码清单8-1。这是一个用C语言记述的Windows程序。该程序运行后,会把123和456的平均值289.5显示在消息框(图8-1)中。 类似于代码清单8-1这样,用某种编程语言的程序就称为源代码,保存源代码的文件称为源文件。用C语言编写的源文件的扩展名通常是“.c”,因此,这里我们就把 阅读全文
posted @ 2023-02-13 15:08 原魏薯片 阅读(24) 评论(0) 推荐(0)