1

我一直在尝试在 Os X 上用 C++ 读取/写入另一个进程的内存。

我一直遇到的问题是我得到了一个指针(例如 server.dylib+0x123AB),但我似乎找不到在 c++ 中动态获取 server.dylib 的内存地址/基地址的方法。是否有任何方法可以推荐尝试找到它。这可能是我的技能水平,但我发现尝试在 OsX 上修补内存是一项艰巨的斗争(周围的文档很少)。

任何意见,将不胜感激。

4

2 回答 2

2

梅林的回答有些不准确。ASLR 并不是要阻止您在运行时获取地址 - 它是要阻止您依赖 FIXED 地址(即代码注入时)。如果您已经可以执行代码,那么您肯定可以获取地址(哎呀,GDB 可以,为什么不能呢?)

DYLD 公开了一个非常丰富的 API(和 dyld_images.h),它使您能够轻松地从进程内部或外部获取加载到进程地址空间的所有图像的列表。您还可以获得 "slide" ,这是使用的 ASLR 偏移量。然而,这是假设您已经在该机器上运行代码 - 即注入代码时它不会工作。

于 2013-06-14T13:27:16.597 回答
0

OSX 安全性的一部分是一种称为 ASLR(地址空间布局随机化)的技术。这可确保将图像加载到进程地址空间的随机区域中,以防止恶意软件利用。它存在于内核和用户空间进程中。

你可以在这里阅读更多关于它的 ASLR

如果你搜索谷歌,你将能够找到更多与 OSX 相关的信息,例如这篇文章

如果如您所说,您只是在试验,使用 gdb 运行目标进程,您将能够在加载 dylib 后找出它的内存地址,然后您可以在测试程序中使用它。

于 2013-06-07T08:19:45.520 回答