为什么一般exe文件不需要进行重定向而dll文件需要?
windows中不是同时有运行很多个进程吗?怎么能保证每个进程都加载到相同的基址比如:0X00400000呢?

解决方案 »

  1.   

    exe载入系统,进行执行的时候,系统能判别出exe是32位还是64位。
    但32位的exe只能加载32位的dll,64位exe只能加载64位的dll,因为数据宽度不同,导致系统执行时发生混乱。
    因此,exe作为第一载入的,无需关心32位还是64位,但在exe载入系统后,就决定了整个执行流程是32位的还是64位的,并且32位和64位的dll名字一般是一样的,所以在加载dll的时候,就需要重定向到不同目录去获取。windows采用的是虚拟地址空间的技术,程序中一般都是在虚拟地址空间操作。在真正执行时,windows会将虚拟地址映射到真是物理地址。
      

  2.   

    那为什么dll中的0x00123又是一样的?
      

  3.   

    虚拟地址而已,可以重定位的
    为了统一,exe 都是 0X00400000
    因为每个进程的地址空间是隔离的,同一地址,不代表统一内存。
      

  4.   

    加载exe的时候,系统创建一个独立的4gb地址空间,这时候用户空间(前2gb)是私有的,里面什么数据都没有,所以想放哪就放哪,跟其他进程毫无关系