关于LoadLibrary函数的一个问题

Ph0nix 2005-10-19 02:33:38
前几天看人家写的程序,里面用LoadLibrary()函数加载了一个DLL,返回的是个HMODULE,结果下面他就用byte*强制转换了一下就当地址用了,这样为什么可以啊?
PS.程序能够正常运行
...全文
295 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Ph0nix 2005-10-24
  • 打赏
  • 举报
回复
thnx

呵呵代码是网上找的,那段代码是找个内存中某个机器码的起始地址,代码是我上次在别人的机器上看到的,当时觉得奇怪,所以才来问的。
Ph0nix 2005-10-23
  • 打赏
  • 举报
回复
HMOUDLE实际上就是dll文件加载后的内存地址
----------------------
但是句柄不是不一定是地址么?有的时候它只是个整数。
codearts 2005-10-23
  • 打赏
  • 举报
回复
HINSTANCE LoadLibrary(PCTSTR pszDLLPathName);

HINSTANCE LoadLibraryEx(
PCTSTR pszDLLPathName,
HANDLE hFile,
DWORD dwFlags);
这两个函数均用于找出用户系统上的文件映像(使用上一章中介绍的搜索算法),并设法将D L L的文件映像映射到调用进程的地址空间中。两个函数返回的H I N S TA N C E值用于标识文件映像映射到的虚拟内存地址。如果D L L不能被映射到进程的地址空间,则返回N U L L。


-------------------------
楼主把后面的代码也贴来瞧瞧,让俺开开眼界
寻开心 2005-10-22
  • 打赏
  • 举报
回复
HMOUDLE实际上就是dll文件加载后的内存地址
你用 ultraedit之类的文件打开这个dll文件,看看内容,再对比hInst所对应的内存地址的内容,就会发现他们是一样的。

Ph0nix 2005-10-22
  • 打赏
  • 举报
回复
fiftymetre(小猫你为什么这么憔悴.)

------------------
不是这么用的 返回的HMOUDLE后他是这么用的
char *p=NULL;
HANDLE Hinst;
Hinst=LoadLibrary("IsupGW.dll");
if (HInst ==0) { ::AfxMessageBox("Load vaSS7GWISUP.dll Failed!!!"); exit(1);}
p=(byte*)Hinst //这就是让我不解的地方
然后他用p做基地址p[i]和某个16进制的值比较


fiftymetre 2005-10-20
  • 打赏
  • 举报
回复
LoadLibrary("IsupGW.dll"); if (HInst ==0) { ::AfxMessageBox("Load vaSS7GWISUP.dll Failed!!!");


这样?

估计 是像二楼所说的吧
lxpws 2005-10-20
  • 打赏
  • 举报
回复
调试一下,看看模块的基地址就知道了。
DentistryDoctor 2005-10-20
  • 打赏
  • 举报
回复
可以转换,但没什么意义。
lujun-cc 2005-10-19
  • 打赏
  • 举报
回复
LoadLibrary的功能就是将一个模块映射到进程的地址空间中,只是其返回值以HMOUDLE形式体现,在Windows内部,也许这个HMOUDLE就是所映射到的地址——猜测而已!
Ph0nix 2005-10-19
  • 打赏
  • 举报
回复
自己顶一下

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧