【发布时间】:2013-06-07 00:53:44
【问题描述】:
我一直在尝试在 Os X 上用 C++ 读取/写入另一个进程的内存。
我遇到的问题是我得到了一个指针(例如 server.dylib+0x123AB),但我似乎找不到在 c++ 中动态获取 server.dylib 的内存地址/基地址的方法。是否有任何方法可以推荐尝试找到它。这可能是我的技能水平,但我发现尝试在 OsX 上修改内存是一项艰巨的任务(周围的文档很少)。
任何建议将不胜感激。
【问题讨论】:
我一直在尝试在 Os X 上用 C++ 读取/写入另一个进程的内存。
我遇到的问题是我得到了一个指针(例如 server.dylib+0x123AB),但我似乎找不到在 c++ 中动态获取 server.dylib 的内存地址/基地址的方法。是否有任何方法可以推荐尝试找到它。这可能是我的技能水平,但我发现尝试在 OsX 上修改内存是一项艰巨的任务(周围的文档很少)。
任何建议将不胜感激。
【问题讨论】:
梅林的回答有些不准确。 ASLR 并不是要阻止您在运行时获取地址 - 它是为了阻止您依赖 FIXED 地址(即代码注入时)。如果你已经可以执行代码,你肯定可以获取地址(哎呀,GDB可以,为什么不能呢?)
DYLD 公开了一个非常丰富的 API(和 dyld_images.h),它使您能够轻松地从进程内部或外部获取加载到进程地址空间中的所有图像的列表。您还可以获得 "slide" ,这是使用的 ASLR 偏移量。然而,这是假设您已经在该机器上运行代码 - 即注入代码时它不会工作。
【讨论】:
OSX 安全性的一部分是一种称为 ASLR(地址空间布局随机化)的技术。这可确保将图像加载到进程地址空间的随机区域中,以防止恶意软件利用。它存在于内核和用户空间进程中。
您可以阅读有关它的更多信息 ASLR here
如果你搜索 google,你将能够找到更多与 OSX 相关的信息,例如this article
如果如您所说,您只是在试验,使用 gdb 运行目标进程,您将能够在加载 dylib 后找出内存地址,然后您可以在测试中使用它程序。
【讨论】: