这篇博客会简单介绍一下Prolog&Epilog 然后再简单介绍下我对于程序在计算机中到底如何运行的一些理解(因为自己之前也从来没有接触过这些方面的知识,所以如果有讲的不对的地方希望大家能够帮我指正)
1.首先我们认识下什么是Prolog&Epilog 其实就是两段固定的代码, 当编译器对程序进行编译的时候就会生成这两段代码, 然后编译器会在每一个函数的开头塞入Prolog代码,在每一个函数的结尾塞入 Epilog代码。 你可以把Prolog看成是一段程序的前言,把Epilog看成是一段程序的尾言。
2.废话不多说,我们用一段程序来进行理解:
1 #include <stdio.h> 2 int add(int x, int y) 3 { 4 int i = 0; int j = 10; 5 return (x+y); 6 } 7 int main (int argc, char * argv[]) 8 { 9 printf("%d\n", add(5,6)); 10 return 0; 11 }
这里写了一段很简单的C程序,其中在main函数中调用了我们自定义的add()函数,我们会用ollydbg来观察一下程序到底是如何运行的。
在windows平台下我们可以通过 >cl /c add1.c 生成目标文件add1.obj
>link add1.obj 生成可执行文件 add1.exe
3. 当我们运行此程序的时候, OS(操作系统)首先会把这段程序加载到一个虚拟的4G内存当中。 如图所示:
这个地方有一些概念会以后单独写文章再进行阐述,此处我们可以简单理解为: 当但我们对程序进行编译以后,程序是位于磁盘上的, 当我们点击运行程序以后程序会加载到内存当中。
...