BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / windows / #61194同步于 2008/4/12
Windows机器人发帖

Re: [求助]关于动态链接和动态加载的问题

UnitTest
2008/4/12镜像同步0 回复
【 在 gada 的大作中提到: 】 : 动态链接 : 1,exe通过系统调用来启动动态链接器,动态链接器重定位dll的代码和数据到内存的某个位置 : 2,将dll"动态加载"到该指定位置 : ................... 举个例子吧。 首先有个dll,取名叫gada.dll吧,然后有个可执行程序就叫UnitTest.exe吧,UnitTest调用了gada里面的一个函数,假设叫hello。 一般来说,首先双击UnitTest.exe,由系统将其加载到内存,然后开始执行。当执行到调用函数hello的地方时,UnitTest发现它不知道该去哪儿调用hello。这个时候,UnitTest会请求系统开始对gada.dll动态链接。此时,系统首先会去查看gada.dll在前面是否已经被加载到内存里面了。如果没有,系统会去"动态加载“gada.dll。那加载的话,首先得给它在内存里面找个位置来放它啊,这就是上面所说的第一步。确定好位置之后就把相应的数据加载到相应的位置。加载完gada.dll之后,但是UnitTest还是不知道gada.dll中的hello函数放在内存哪个位置啊,这个时候就是所谓的链接开始了。链接这个过程说简单点,就是系统告诉UnitTest.exe听,我把gada这个dll放在内存的某某位置了,如果你需要调用它的hello函数的话,那就去某某位置取出来就行了。好了,UnitTest现在知道该去哪调用hello了,它就可以继续往下执行了。 大概原理就是这样的,但是实际上的实现还是有些出入的,包括不同的进程调用同一个dll系统是如何处理等这些细节。 如果有更多疑问,欢迎到软件开发版灌水:)
订阅后,新回复会通过你的通知中心匿名送达。
0 条回复
暂无回复 · 你可以订阅本帖等待新回复。