下面的一段程序,在Windows 2K 下执行,
hMod = 0x77e60000 c = 0x77e801d5
在windows XP下执行
hMod = 0x77e40000 c = 0x0c032b33, 显然不对啊,应该是0x77XXXXXX才对啊.
究竟有什么不对或是不同吗?
#include "Windows.h"int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
  // TODO: Place code here. HMODULE hMod = GetModuleHandle("Kernel32");
PROC c = (PROC)GetProcAddress(hMod,"LoadLibraryA");
return 0;
}

解决方案 »

  1.   

    这不奇怪啊,系统不同了,API函数有变化,内存布局有变化。
      

  2.   

    我在不同系统执行的结果
    w98 bff70000 bff77750  
    w2k 77e60000 77e801d5
    w2kadvs 77e60000 77e668fb
    winxp  77e40000 77e5d961
    win2003 77e10000 77e1850d
      

  3.   

    内存布局确实和操作系统有很大的关心,虽然都是windows。
      

  4.   

    这是你自己的问题
    正如 keiy 所说
    nt内核的系统大概都映射到7xxxxxxx
    98内核都映射到6xxxxxxx
    由于kernel32.dll是系统dll
    所以对于每个操作系统的地址是固定的
    如同funlove所使用的技术hMod 是一个DLL加载后的起始地址
    c一定在hMod地址的后方