C 在另一个进程中从加载的动态库读取数据字段
我正在编写一个应用程序,试图从另一个进程的内存中读取一些数据。另一个进程正在加载目标数据(程序集)应该驻留的libmono.0.dylib 使用一些基于mach-o的代码,我可以迭代目标进程的加载动态库,并获得上面库的mach头基地址。从这里,我可以得到符号表,该表给出了返回结构和相关数据的函数的地址: 在mono源代码中,它看起来像C 在另一个进程中从加载的动态库读取数据字段,c,macos,mono,dynamic-linking,mach-o,C,Macos,Mono,Dynamic Linking,Mach O,我正在编写一个应用程序,试图从另一个进程的内存中读取一些数据。另一个进程正在加载目标数据(程序集)应该驻留的libmono.0.dylib 使用一些基于mach-o的代码,我可以迭代目标进程的加载动态库,并获得上面库的mach头基地址。从这里,我可以得到符号表,该表给出了返回结构和相关数据的函数的地址: 在mono源代码中,它看起来像 MonoDomain* mono_get_root_domain (void) { return mono_root_domain; } 我的假设是否正确,0
MonoDomain* mono_get_root_domain (void) { return mono_root_domain; }
我的假设是否正确,0x18a934的地址包含返回的结构?如果是,这个地址是相对于动态库标题(=header\u addr+addr)的,还是我还需要添加一些幻灯片,或者直接使用它?
当我跟随这个地址时,我遇到的每一个其他地址都是一样的吗
我正在编写一个应用程序,试图从另一个进程的内存中读取一些数据
每个进程都有自己的虚拟内存空间,并受到内核的保护。尽管动态库可以共享,但如果函数返回地址,它将位于调用该函数的进程的虚拟内存映射(VMMap)中
为了将目标进程的内存地址映射到您自己的进程地址空间,您需要目标进程的任务端口。您过去可以调用task\u以获取进程的pid任务,但由于OS X 10.10(El Capitan)和系统完整性保护(SIP)的引入,这已不再可能
如果数据驻留在加载的动态库中,只需使用将动态库加载到您自己的进程中,并通过调用获取函数的地址。谢谢您的回答!我已经得到了那个部分,我有加载的头地址和指向符号的指针。正如您在上面看到的,我在反汇编代码的“内部”找到了一个指针,现在如何使用它?如果我读dylib\u base\u address+指针,那么我得到的只是随机的东西。它指向哪个虚拟机区域?