如何在Os X上获得c++模块的基址
How to get a base address of a module in C++ on Os X
我一直在尝试在Os x上用c++读写另一个进程的内存。
我一直有的问题是,我得到一个指针(例如server.dylib+0x123AB),但我似乎找不到一种方法来获得服务器的内存地址/基址。在c++中动态Dylib。有什么方法可以帮我找到它吗?这可能是我的技术水平,但我发现尝试在OsX上修补内存是一场艰苦的斗争(周围的文档很少)。
梅林的回答有些不准确。ASLR不是为了阻止你在运行时获取地址——它是为了防止你依赖固定地址(即代码注入时)。如果你已经可以执行代码,你肯定可以获得地址(见鬼,GDB可以,为什么你不能呢?)
DYLD公开了一个非常丰富的API(和dyld_images.h),它使您能够轻松地从进程内部或外部获取加载到进程地址空间的所有图像的列表。你也可以得到"滑动",这是使用的ASLR偏移量。然而,这是假设你已经在那台机器上运行代码——也就是说,当注入代码时它将无法工作。
OSX安全性的一部分是一种称为ASLR(地址空间布局随机化)的技术。这确保图像被加载到进程地址空间的随机区域,以防止恶意软件的利用。它存在于内核和用户空间进程中。
你可以在这里阅读更多关于ASLR的信息
如果您搜索google,您将能够找到更多与OSX相关的信息,例如这篇文章
如果正如您所说的,您只是在进行试验,那么使用gdb运行目标进程,您将能够在加载dylib之后找到它的内存地址,然后您可以在测试程序中使用它。
相关文章:
- 尝试导入pybind-opencv模块时出现libgtk错误
- 为什么当我解模块化时,这个C++代代码"效率较低"?
- 如果C++对象的类在另一个boost模块中声明,如何使用boost将指向该对象的指针返回到python
- 内联如何影响模块接口中的成员函数
- C++返回 Numpy 数组的 Python 扩展模块
- 当我尝试加载内核模块时,如何修复C++中的这个 malloc() 错误?
- 如何从线程中的不同模块调用函数?
- 如何使用 soong 命名空间来有条件地编译模块
- asn1c 不会从 asn.1 模块中提取八位字节字符串的默认值
- CMake - 模块 + 库混淆
- 特征 LLT 模块给出不正确的结果?
- 枚举进程模块在有效句柄上返回无效句柄
- 在 python 模块中导入子模块时PyImport_Import失败
- 将 PCL 链接到 Cython C++ 模块
- 即使直接从官方示例中复制,也找不到未知类型名称QML_ELEMENT和 QML 模块
- 电源功能模块化操作
- 如何告诉本机节点模块所需的dll存储在哪里?
- 如何为模块化应用程序实现C++插件系统
- C++ Python 模块在 Blender 中崩溃,但在 Python 控制台中不会崩溃
- Arduino 模块化编程与全局和设置