gpt4 book ai didi

c - 从另一个进程中加载​​的 dylib 读取数据字段

转载 作者:行者123 更新时间:2023-12-01 01:25:48 26 4
gpt4 key购买 nike

我正在编写一个应用程序,试图从另一个进程的内存中读取一些数据。这个另一个进程正在加载目标数据(程序集)应该驻留的 libmono.0.dylib。

使用一些基于 mach-o 的代码,我可以迭代目标进程的已加载 dylib 并获取上面 lib 的 mach header 基地址。从这里我可以找到符号表,它为我提供了返回具有相关数据的结构的函数的地址:

_mono_get_root_domain symbol

在单声道源代码中它看起来像

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com