首页
社区
课程
招聘
[求助]如何得到某一程序中某一DLL的基址
发表于: 2007-7-2 16:04 4640

[求助]如何得到某一程序中某一DLL的基址

2007-7-2 16:04
4640
某程序B.exe带一个C.dll,现在我想在A.exe中写代码得到C.dll的基址,用汇编该怎么实现?

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 560
活跃值: (359)
能力值: ( LV13,RANK:1370 )
在线值:
发帖
回帖
粉丝
2
invoke GetPidFromProcName, CTEXT("B.exe")    ;得到B.exe的基址  
invoke OpenProcess , PROCESS_ALL_ACCESS , TRUE , eax  ;打开B.exe进程
invoke GetShell32Base, Pid,CTEXT("C.dll")  ;得到B.exe下的C.dll的基址
mov    modBaseAddr,eax

GetPidFromProcName proc lpProcName:DWORD
LOCAL stProcess : PROCESSENTRY32
LOCAL hSnapshot
LOCAL dwProcessID

mov dwProcessID, 0
invoke RtlZeroMemory, addr stProcess, sizeof stProcess
mov stProcess.dwSize, sizeof stProcess
invoke CreateToolhelp32Snapshot, TH32CS_SNAPPROCESS, 0
mov hSnapshot, eax
invoke Process32First, hSnapshot, addr stProcess
.while eax
invoke lstrcmpi, lpProcName, addr stProcess.szExeFile
.if eax==0
mov eax, stProcess.th32ProcessID
mov dwProcessID, eax
.break
.endif
invoke Process32Next, hSnapshot, addr stProcess
.endw
invoke CloseHandle, hSnapshot
mov eax, dwProcessID
ret
GetPidFromProcName endp

GetShell32Base proc uses ebx esi edi remoteproid:dword ,modname:dword
            LOCAL hSnapshot:dword
            LOCAL modinfo:MODULEENTRY32

        mov     modinfo.dwSize,sizeof MODULEENTRY32
        invoke CreateToolhelp32Snapshot,TH32CS_SNAPMODULE,remoteproid
        mov     hSnapshot,eax
        invoke Module32First,hSnapshot,addr modinfo
        .while eax
        lea     ecx,modinfo.szModule
        invoke lstrcmpi,modname,ecx
        .if     eax == 0
                mov eax,modinfo.modBaseAddr
                ret
        .endif
        invoke Module32Next,hSnapshot,addr modinfo
        .endw      
        invoke CloseHandle,hSnapshot
        ret
GetShell32Base   endp
2007-7-3 07:50
0
雪    币: 216
活跃值: (12)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
3
楼上的比较厉害呵呵。
2007-7-4 15:03
0
游客
登录 | 注册 方可回帖
返回
//