3 工作原理
简单地讲,动态链接库技术是一种在程序需要的时候才将有关代码装入内存的技术。有人往往认为:程序中只能是动态地往内存中读入数据进行处理,而不能把指令从文件中读到内存中来执行。事实上是可以的,因为在X86平台的内存中指令和数据是共存的,换句话说一段内存中的内容可以是指令也可以是数据。在这里可以用这个方法揭示DLL的原理。为了便于理解其中意思看看如下代码:
1 int main()
2 { /*0x90是X86汇编指令nop的机器码,0xc3是ret的机器码*/
3 char buf[] = {0x90, 0x90, 0x90, 0x90, 0xc3};
4 typedef void (*PFUNC)();
5 PFUNC pFunc = (PFUNC)( void *)buf;
6 pFunc(); //把内存中的数据当作指令来执行
7 return 0;
8 } /*P4 CPU,Win XP SP2,VC6 以C++文件形式编译运行通过*/
上面的程序不做任何有意义的事情,但是可以从中理解上面的话。数组buf的内容既可以当作数据来处理,也可以当作指令来执行。代码中第6行就是把buf中的内容当作指令来执行的。这里是把指令固定写在buf中的,如果是从文件读取的话就实现了一个简单的DLL。
4 工作过程
介绍一种方法去生成自定义的动态链接库并使用它,将自定义的动态链接库文件定义为.mdll文件(My DLL),用此来模拟动态链接库的工作过程,从而使读者更加清晰地了解动态链接库的思想。
|