繁体   English   中英

如何在Os X上的C ++中获取模块的基址

[英]How to get a base address of a module in C++ on Os X

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

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

任何意见,将不胜感激。

梅林的答案有些不准确。 ASLR并不意味着阻止你获得在运行时的地址 - 它的意思,以防止你依靠固定地址(即当代码注入)。 如果你已经可以执行代码,你绝对可以得到地址(赫克,GDB呢,你为什么不能?)

dyld的暴露了非常丰富的API(和dyld_images.h),使您能够轻松地获得无论是从过程中或在它之外加载到进程的地址空间中的所有图像的列表。 您还可以得到“滑”,这是ASLR使用的偏移。 这一点,但是,假设你已经在这台机器上运行的代码 - 即注入代码的时候,它不会工作。

OSX安全的一部分是被称为ASLR(地址空间布局随机化)的技术。 这保证了图像加载到进程的地址空间随机领域,试图防止恶意软件利用。 它存在于内核和用户空间进程两者。

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

如果你搜索谷歌,你就可以找到相关的OSX,更多的信息,比如这篇文章

如果像你说的,你只是实验,运行使用gdb目标过程中,你就可以找出dylib的内存地址,它已经被加载后,您可以在随后的测试程序中使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM