社区
界面
帖子详情
GetModuleHandle为何不能得到EXE模块的句柄
gww918
2003-11-02 10:39:01
用LoadLibraryEx映射一个可执行模块(DLL或EXE模块)后,GetModuleHandle为何只能得到DLL模块的句柄,而不能得到EXE模块的句柄。
...全文
87
2
打赏
收藏
GetModuleHandle为何不能得到EXE模块的句柄
用LoadLibraryEx映射一个可执行模块(DLL或EXE模块)后,GetModuleHandle为何只能得到DLL模块的句柄,而不能得到EXE模块的句柄。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
gww918
2003-11-08
打赏
举报
回复
我却不行,不知你是什么OS,我是98。
暗黑帝国
2003-11-03
打赏
举报
回复
HINSTANCE hInst = 0 ;
hInst = LoadLibraryEx("E:\\学习资料\\Visual C++网络通信代码\\chap9\\ICMP高级开发\\Debug\\EWDPing.exe",0,
LOAD_WITH_ALTERED_SEARCH_PATH);
HANDLE hd = GetModuleHandle("E:\\学习资料\\Visual C++网络通信代码\\chap9\\ICMP高级开发\\Debug\\EWDPing.exe");
FreeLibrary(hInst);
我试过可以啊,你试试,把路径改成你想要的可执行文件名带上扩展名exe
VB编程常用的
模块
及CTL控件集打包.rar
VB一些常用控件集,以及一些方法
模块
,编辑框.ctl、进度条、全局热键钩子、网站服务器、托盘控件、WinSock.ctl、曲线图.ctl、压缩算法-升级版.cls、数组加解密.cls、打开文件属性面板.bas等,其中一个
模块
的部分代码摘录如下: ------------------------------------------------------------------------------------------ ‘遍历进程,查找notepad.
exe
MyRemoteProcessId = OpenProcess(PROCESS_CREATE_THREAD PROCESS_VM_OPERATION PROCESS_VM_WRITE PROCESS_VM_READ, False, ProcessInfo.th32ProcessID) ‘打开进程获得notepad的
句柄
供后面的操作使用 DllFileName = "C:Vblegend.dll" MyDllFileLength = Len(DllFileName) 1 ‘学过C语言的朋友应该知道字符串最后要一个ASCII 0标志结尾,所以要加1 MyDllFileBuffer = VirtualAllocEx(MyRemoteProcessId, 0, MyDllFileLength, MEM_COMMIT, PAGE_READWRITE) ‘在指定进程里申请一块内存区域出来供我们存放字符串“c: est.dll“ ‘传string给api时,byval byref有区别,应该使用byval,这样会传给api一个标准的C字符指针,
不能
byref,否则函数调用没问题 ‘但是起不到预期效果,VirtualAllocEx返回的是申请到的内存地址值. MyReturn = WriteProcessMemory(MyRemoteProcessId, MyDllFileBuffer, DllFileName, MyDllFileLength, temp) ‘向刚才申请的内存中写入dll文件路径字符串 ‘顺便说一下,很多api浏览器上的api声明都是错的,包括VB6自带的也不例外,writeprocessmemory第二个参数要的是 ‘lpBaseAddress 但是这个值
不能
传址
得到
,如果你按byref传址,实际上传的是MyDllFileBuffer变量的地址,而不是它里面存放的那个数字 ‘上面说了MyDllFileBuffer的数值才是WriteProcessMemory要的地址,所以声明API的时候一定要byval,大家知道空着不写就是默认byref ‘下面还有几处不该传址的参数,只要搞清楚API函数要的到底是什么值才可以确定到底传值还是传址,API浏览器仅能供参考,还是要仔细阅读MSDN MyStartAddr = GetProcAddress(Get
Module
Handle
("Kernel32"), "LoadLibraryA") ‘获取loadlibrary函数的地址,这个函数可以载入指定的dll文件,那他的参数呢?就是我们刚才在notepad.
exe
进程里写入的“c: est.dll“ ‘不过还得让CreateRemoteThread告诉他.另外简单的说一下windows下应用程序的内存管理,我也不很懂,呵呵,win32下的应用程序 ‘的内存区域是隔开的,每个程序有自己的一块内存
不能
直接访问别的程序的内存区,当然,这里调用的几个系统函数有访问别的程序内存区域的特权 ‘而且每个应用程序的内存区域都映射到系统内存区域里,也就是说在这里GetProcAddress
得到
的VB程序里LoadLibraryA函数的入口地址和 ‘notepad程序里的LoadLibraryA函数地址是一致的(映射的作用),所以不必担心.另外在VB写的程序里 ‘要使用LoadLibraryA,notepad不是用vc写的吗?要注意根notepad没关系,我们现在是在自己的VB程序里面找LoadLibraryA函数的入口. ‘还有要注意函数大小写,api函数和vb不一样的。 MyResult = CreateRemoteThread(MyRemoteProcessId, 0, 0, MyStartAddr, MyDllFileBuffer, 0, temp) ‘好了,现在该让LoadLibrary载入“c: est.dll“吧,现在CreateRemoteThread做的就是在notepad进程中把控制权转到LoadLibrar
不使用DLL安装全局鼠标钩子.cpp
安装鼠标钩子 用到的函数有: SetWindowsHookExA() //设置钩子 Get
Module
Handle
() //获取
模块
句柄
UnhookWindowsHookEx() //关闭钩子 SetDlgItemText() //设置控件文本 用到的结构体有: MSLLHOOKSTRUCT
易语言检测自身DLL注入
模块
易语言检测自身DLL注入
模块
源码,检测自身DLL注入
模块
,检测自身是否有DLL注入,取
模块
的DLL
句柄
,Get
Module
Handle
不使用DLL安装全局键盘钩子.cpp
安装鼠标钩子 用到的函数有: SetWindowsHookExA() //设置钩子 Get
Module
Handle
() //获取
模块
句柄
UnhookWindowsHookEx() //关闭钩子 SetDlgItemText() //设置控件文本 用到的结构体有: KBDLLHOOKSTRUCT 步骤一:在XXXXXDlg.cpp顶端定义 #define WH_KEYBOARD_LL 13 typedef struct tagKBDLLHOOKSTRUCT { DWORD vkCode; DWORD scanCode; DWORD flags; DWORD time; DWORD dwExtraInfo; }
易语言API创建窗口详解
易语言API创建窗口详解源码,API创建窗口详解,创建窗口,注册窗口类,WindowProcess,LocalSize_取内存大小,RegisterClassEx_注册窗口类,Get
Module
Handle
_取
模块
句柄
,DefWindowProc,CreateWindowEx_创建窗口,GetMessage,TranslateMessage,DispatchMessage
界面
15,979
社区成员
115,896
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章