
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 如何辨别程序起始处等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)