如何获取另一程序加载的DLL的起始地址

如何获取另一程序加载的DLL的起始地址,第1张

bexe的PID会取吗?会取就把下面的函数放在公共模块中使用

Public Function GetProcModuleHandle(PID As Long, Module As String) As Long

Dim pl As moduleENTRY32

Dim hSnapshot As Long

hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPmodule, PID)

If hSnapshot Then

pldwSize = Len(pl)

ModuleCount = 0

If (module32First(hSnapshot, pl)) Then

Do

If InStr(1, plszModule, Module, vbTextCompare) > 0 Then

GetProcModuleHandle = plhModule

Exit Function

End If

Loop Until (module32Next(hSnapshot, pl) < 1)

End If

CloseHandle (hSnapshot)

End If

End Function

HMODULE hModule = GetModuleHandle(_T("bdll")); // 获取bdll句柄

MODULEINFO mi;

GetModuleInformation(NULL, hModule, &mi, sizeof(MODULEINFO)); // 获取bdll信息

// milpBaseOfDll就是bdll的加载起始地址

在IDA反汇编窗口中记下函数开始内存地址,结束内存地址,然后转到“Hex -View”窗口记下二进制文件偏移量,最后使用WinHex打开二进制文件,找打对应位置,可以复制出来十六进制数据。

SuspendThread、GetThreadContext

ContextEip是当前执行的指令地址

要找函数起始地址的话,栈回溯一层,分析返回地址[ebp+4h]之上的一条call指令

以上只针对一般情况

网上有说法,X64 linux上,32位executable的text段起始地址是0x08048000,64位executable的text段起始地址是00400000。在一台机器上试验,确实如此:

但是换了一台机器,完全不是这个样子了:

可执行程序每次启动时,都被加载到随机位置上,这种现象叫PIE。PIE会使mtrace、addr2line这样的工具无效。

与linux发行版本、编译器版本都有关。例如:

gcc ac -fpie -pie

效果如下:

gcc ac -no-pie

效果如下:

第二章 进程管理

一. 选择题

1. B

2. C

3. C

4. C

5. D

6. ⑴A ⑵D ⑶B ⑷C

7. ⑴⑵⑶AD ⑷C

8. C

9. C

10. B

11. C

12. A

13. C

14. C

15. B

16. A

17. C

18. B

19. B

20. B

21. A

22. C

23. C

24. BC

二、填空题

1.并发 进程

2.运行态 就绪态 阻塞态

3.PCB

4程序 数据集合 PCB

5.就绪 进程调度程序

6.直接制约 间接制约

7.进程创建 进程终止 进程阻塞 进程唤醒

8.相应资源 pv *** 作

9.进入阻塞队列

10.S>0 阻塞 就绪

11.互斥 P(mutex) V(mutex)

12.n-1

13.共享存储器 管道文件 消息传递

14.链接方式 索引方式。

CS存储代码段的起始地址的高16位地址(Code Segment),IP为指令指针寄存器,存放当前代码的偏移地址,也就是当前代码的地址与CS的差值,也是十六位,所以当前地址为:1000H 10H + 2000H = 12000H。

以上就是关于如何获取另一程序加载的DLL的起始地址全部的内容,包括:如何获取另一程序加载的DLL的起始地址、C++如何找出当前进程中指定模块(DLL)的内存地址、ida 如何辨别程序起始处等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/10138952.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存