不知道用这个函数可不可以EXE文件中非导出函数的地址??
比如我再MAIN中调用了MESSAGEBOX,生成的EXE为MAIN.EXE,现在这样用 PROC P=::GETPROCADDRESS(::GETMODULEHANDLE("MAIN.EXE"),"MESSAGEBOX");为什么返回的P是空??如果调用KERNEL32.DLL里面就可以得到还有就是参数MESSAGEBOX,这个不只是一个宏吗?为什么可以不传递MESSAGEBOXA,MESSAGEBOXW??

解决方案 »

  1.   

    GetProcAddress只能获取PE文件导出的函数地址,它的第二个参数是字符串,和宏没什么关系的。
      

  2.   

    我的理解,GetProcAddress 的意思是根据 win32 PE 文件的格式,查找里面的 export 表,找到对应的函数偏移位置,然后加上模块的 HANDLE ,返回内存地址。所以,只能查找 dll 的输出函数的位置,不能查找 exe 的调用的函数的位置,那个是在文件的 import 表中的;另外,kernel32.dll 中有的函数,为了系统安全,也不能通过 GetProcAddress 使用函数名称进行查找,只能通过序号进行查找。