- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一个应用程序,试图从另一个进程的内存中读取一些数据。这个另一个进程正在加载目标数据(程序集)应该驻留的 libmono.0.dylib。
使用一些基于 mach-o 的代码,我可以迭代目标进程的已加载 dylib 并获取上面 lib 的 mach header 基地址。从这里我可以找到符号表,它为我提供了返回具有相关数据的结构的函数的地址:
在单声道源代码中它看起来像
MonoDomain* mono_get_root_domain (void) { return mono_root_domain; }
我假设 0x18a934 的地址保存返回的结构是否正确?如果是,这个地址是相对于 dylib header (=header_addr+addr) 还是我还需要添加一些幻灯片,或者直接使用它?当我关注这个地址时,我遇到的所有其他地址是否也是如此?
最佳答案
I am writing an app that tries to read some data from another process's memory
每个进程都有自己的虚拟内存空间,受内核保护。虽然 dylib 可能是共享的,但如果一个函数正在返回一个地址,它将位于调用该函数的进程的虚拟内存映射 (VMMap) 中。
为了将目标进程的内存地址映射到您自己的进程地址空间,您需要目标的任务端口。您过去可以调用 task_for_pid
从进程的 pid 中获取进程的任务,但自从 OS X 10.10 (El Capitan) 和系统完整性保护 (SIP) 的引入以来,这不再可能了。
如果数据驻留在加载的动态库中,只需使用 dlopen 将动态库加载到您自己的进程中即可。并通过调用 dlsym 获取函数的地址.
关于c - 从另一个进程中加载的 dylib 读取数据字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41111135/
我是一名优秀的程序员,十分优秀!