扩展 Mach-O 文件中的部分

2023-12-07

我正在尝试从 Dyld_shared_cache 中提取库,并且需要修复外部引用。

例如,中的指针__DATA.__objc_selrefs部分通常指向 mach-o 文件外部的数据,为了解决这个问题,我必须从 dyld 复制相应的 c 字符串并将其附加到__TEXT.__objc_methname部分。

虽然根据我对 Mach-O 文件格式的理解,这个扩展名__TEXT.__objc_methname会移动它后面的所有部分,并迫使我修复引用它们的所有偏移量和指针。有没有一种方法可以在不破坏很多东西的情况下将数据添加到一个部分?

Thanks!


感谢@Kamil.S 关于添加新加载命令和部分的想法。

向节添加更多数据的一种方法是创建重复的段和节并将其插入到 __LINKEDIT 段之前。

  • Slide the __LINKEDIT segment so we have space to add the new section.
    1. 定义滑动量,这个必须是页面对齐的,所以我选择0x4000。
    2. add the slide amount to the relevant load commands, this includes but is not limited to:
      • __LINKEDIT 段(废话)
      • dyld_info_命令
      • 符号表命令
      • dysymtab_命令
      • linkedit_数据_命令
    3. 物理移动文件中的 __LINKEDIT。
  • duplicate the section and change the following1
    • size,应该是新数据的长度。
    • addr,应该在空闲空间中。
    • 偏移量,应该在可用空间中。
  • duplicate the segment and change the following1
    • fileoff,应该是可用空间的开始。
    • vmaddr,应该是可用空间的开始。
    • 文件大小,任何东西,只要它比你的数据大。
    • vmsize,必须与文件大小相同。
    • 昆虫,进行更改以反映您添加的部分数量。
    • cmdsize,更改以反映段命令及其节命令的大小。
  • 在 __LINKEDIT 段之前插入重复的段和节
  • update the mach_header
    • ncmds
    • cmd 的大小
  • 将额外数据物理写入文件中。

  1. 您可以选择更改 segname 和 sectname 字段,但这不是必需的。谢谢卡米尔!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

扩展 Mach-O 文件中的部分 的相关文章

  • 何时使用动态库与静态库

    在 C 中创建类库时 可以选择动态 dll so 和静态 lib a 图书馆 它们之间有什么区别 什么时候适合使用哪个 静态库会增加二进制文件中代码的大小 它们总是被加载 并且无论您编译的代码版本是什么 都是将运行的代码版本 动态库单独存储
  • C Linux:全局变量作为单例位于共享库中

    如果共享库 so 被多个进程使用 是否可以将位于共享库 so 中的全局变量用作单例 例如 初始值为 0 进程 1 递增 var 然后 proc2 递增 val 并打印它 到目前为止 我的实验表明 两个进程都保留变量的副本 如果第一个进程递增
  • Angular 6 私有方法

    我们正在从 Angular 5 升级到 Angular 6 我们有一个共享库 但遇到了构建错误 作为一家 Java 商店 我们养成了将组件方法和属性标记为私有的习惯 在 Angular 6 中构建我们的库时 转换并使用新的库 CLI 功能后
  • Linux Mach-O 反汇编器

    是否有任何 Linux 程序可以像 objdump 一样反汇编 OSX 通用 x86 x86 64 fat Mach O 二进制文件 GNU binutils 的 objdump 支持 ELF 和 Windows PE 文件 但不支持 Ma
  • 强制链接与库不同的 SONAME

    如何以与具有冲突 SONAME 的库的两个现有版本兼容的方式链接二进制文件 这两个版本不共享相同的 SONAME 前缀 一个是 libcapi10 so 3 另一个是 libcapi10 so 4 我无法重新编译它们 因为我将它们作为二进制
  • 附带共享库的 GNU/Linux Firefox 插件(用于无需 root 访问权限的安装)

    该应用程序是一个 Firefox 插件 从 HOME mozilla plugins 加载 因此设置 LD LIBRARY PATH 的包装脚本不是一个简单的选择 据我所知 RPATH 不能引用 HOME 只能是绝对路径 Firefox 尝
  • dlclose 上不会调用共享库中全局静态变量的析构函数

    在主程序中 我dlopen and dlclose LoadLibrary and FreeLibrary分别 一个共享库 共享库包含一个实例化的静态变量dlopen 并销毁于dlclose 此行为在 MSVC 2008 和 2013 GC
  • 在构建过程中将静态库链接到共享库?

    我在使用 GCC Linux 构建共享库时遇到问题 目前这个共享库是使用 GCC libtool 选项 shared 创建的 一切都很好 现在必须将两个额外的静态库 a 文件 添加到此共享库中 因为它们提供了共享库所需的一些功能 使用选项
  • 链接具有不兼容依赖项的库

    我正在开发一个需要两个第三方库的 C 项目 libfoo so and libbar so 我的操作系统是Linux libfoo so动态链接到 libpng14 so 14 1 4 8 EDIT 1 libbar so似乎静态链接到 未
  • ldd 输出静态链接到共享库

    我正在尝试创建一个共享库 libddv3djava so 我编译 libddv3djava so 的源代码 如下所示 Programming intellijprojects ddv3dbindingstest src g c Wall W
  • 为什么 CMake 被设计为在安装时删除运行时路径

    我自己构建了我的共享库 例如 我使用一个计算斐波那契数的库 并希望在我的另一个 C 项目中使用它CMake 假设共享库和标头位于 path to my lib 共享库libfib so is in path to my lib lib和标题
  • CMake 库安装最佳实践

    我正在尝试使用 cmake 为共享库安装脚本 当我发现我想使用install 我不确定设置目的地的最佳做法是什么 此评论 https stackoverflow com a 10928305 258418 and various https
  • intellij idea看不到java 9标准类

    我有一个maven使用的项目Java 9 它导入到IntelliJ IDEA 2017 2 3 Community 但由于某种原因它找不到标准的java类 例如String or Float 例如 当我尝试Setup Project JDK
  • 自定义框架未加载 dyld:库未加载:@rpath/Custom.framework/

    我有一个带有多个自定义动态框架的应用程序 这意味着我使用 iOS 8 作为 Xcode 6 2 上的 SDK 我的 Mac 在优胜美地 这些框架有 Swift 源代码和资源 该应用程序是分布式企业应用程序 因此我只需创建一个 IPA 并通过
  • 使用 RPATH 但不使用 RUNPATH?

    这一页 https web archive org web 20120418232524 http labs qt nokia com 2011 10 28 rpath and runpath 说关于图书馆检索的顺序ld so Unless
  • 通过 bash 调用应用程序时忽略 dyld_insert_libraries

    对于我的应用程序 我使用 DYLD INSERT LIBRARIES 来切换库 我运行的是 Mac OS X El Capitan 如果我在 shell 中设置这些环境变量 export PYTHONHOME HOME anaconda e
  • 寻找使用库版本的方法?

    我正在通过库在多个电子表格上部署脚本 但正如您所知 脚本 目前 还无法知道它是否正在运行最新版本 我试图通过为我的代码创建自己的版本控制来找到解决此问题的方法 我有一个 Web 服务返回我的库代码的最新版本号 以便我可以对其进行比较 但 o
  • 编译器 libstdc++ 版本与系统版本

    我试图了解 g 如何选择它链接的 libstdc 版本 以及当库的 系统 版本不同时它意味着什么 我正在使用 gcc g 4 1 2 根据ABI 指南 http gcc gnu org onlinedocs libstdc manual a
  • C++ 将枚举值捕获为异常

    我正在尝试使用external C 库将其异常定义为 enum MY ERRORS ERR NONE 0 ERR T1 ERR T2 然后在代码中抛出异常是这样的 if throw ERR T1 作为 C 编程新手 我会这样做 try ca
  • 如何确保 numpy BLAS 库可用作动态加载库?

    The theano安装文档 http www deeplearning net software theano install html troubleshooting make sure you have a blas library指

随机推荐

  • 取消设置数组中的项目破坏了循环数据的逻辑

    我的控制器中有以下逻辑 public function showvlans vlans this gt switches model gt show known vlans this gt uri gt segment 5 this gt
  • UnboundLocalError:分配前引用的局部变量“n” - 我如何识别并删除它?或者在这种情况下进行调试?

    我仍然做了一个正确的 for 循环但我收到以下错误 UnboundLocalError 赋值前引用的局部变量 n 如何修复上述错误 import numpy as np n 0 import math def polygonPerimete
  • Struts 2 jquery 自动完成器与forceValidOption =“假”

    我已经设置了 Struts 2 jquery 自动完成标签forceValidOption假为
  • 如何在spring中重写JndiObjectFactoryBean并在java中设置解密密码

    我在 tomcat 中有一个数据源 它的密码是使用某种算法加密的 我想在与数据库建立连接时解密相同的密码 以下是我的 spring 配置代码
  • 如何使用VBS脚本自动登录

    我对此很陌生 我目前正在办公室从事一个项目 并且我已经有了有关如何在一个窗口中打开多选项卡 IE 的脚本 这是我使用的脚本 Const navOpenInBackgroundTab H1000 site1 http site1 com si
  • 想要在 IE8 上的新选项卡中打开[重复]

    这个问题在这里已经有答案了 可能的重复 在新标签页中打开网址 当我在做的时候window open 我的页面在新窗口中打开 但我希望它在浏览器的新选项卡中打开 怎样才能做到这一点呢 我 99 确定你不能 Redmond 浏览器可能总是有一个
  • android ProgressBar在下载过程中更新

    在我的文件下载应用程序中 有一个 ListView 每一行都包含属性文件和一个用于下载其状态的进度栏 我使用视图持有者模式 但进度栏不更新 Override protected void onProgressUpdate Long valu
  • Selenium 驱动的 ChromeDriver 找不到 Chrome 二进制文件

    我刚刚卸载了 Chrome 因为它表现得很奇怪 现已修复 之后 Python 中的 Selenium 无法识别 Chrome 驱动程序二进制文件 这非常奇怪 因为它应该完全不受影响 并且位于不同的位置和不同的版本从我在桌面上使用的 Chro
  • 如何从 OData Atom feed 反序列化对象?

    我正在尝试解析来自 OData REST 服务的响应 当响应是JSON格式时 很容易使用ReadAsJsonDataContractWCF REST 入门工具包中的方法 然而 如果响应是 Atom feed 事情似乎会更加复杂 这是一个例子
  • 根据余弦相似度值进行聚类

    我从一组 URL 中提取了单词 并计算了每个 URL 内容之间的余弦相似度 而且我还标准化了 0 1 之间的值 使用最小 最大 现在我需要根据余弦相似度值对 URL 进行聚类以查找找出类似的 URL 哪种聚类算法最合适 请建议我一种动态聚类
  • 应用程序安装失败:未知错误 Xcode 7

    我的应用程序在模拟器中运行良好 但当我尝试将其安装在 iPhone 上时 它说 应用程序安装失败 发生未知错误 我打开设备日志并得到以下信息 11 月 12 日 21 17 19 Isaacs iPhone Streaming zip co
  • 简化为派系问题

    子图同构 我们有图 G 1 V 1 E 1 G 2 V 2 E 2 Question 图 G 1 与 G 2 的子图同构吗 即 是否存在 G 2 V V 2 的顶点子集和 G 2 E E 2 边的子集 使得 V V 1 和 E E 1 并且
  • 是否保证新实体的数字自增ID始终大于现有ID?

    是否保证新实体的自动递增ID始终大于现有ID 基本上 我想定期将后台任务中的实体 例如评论 转储到客户创建的大块中 因此 如果现在有 100 个实体 我会将它们存储在 blob 中 并为该 blob 创建辅助实体 例如 class Blob
  • Google Apps 脚本:使用电子表格范围作为参数从菜单调用函数[重复]

    这个问题在这里已经有答案了 我有一个函数 它接受电子表格范围作为参数 然后在给定范围的同一行中添加日期 function autoDate cell var currentDate new Date var currentMonth cur
  • Entity Framework Core 多对多导航问题

    Entity Framework Core 尚未实现多对多关系 如 GitHub 问题中所述 1368 但是 当我按照该问题中的导航示例或类似的答案在 Stack Overflow 上 我的枚举未能产生结果 我的照片和标签之间存在多对多关系
  • 无法比较 SqlBulkCopy 中的列

    这是我的代码 protected void Button1 Click object sender EventArgs e string strFileType System IO Path GetExtension FileUpload1
  • “对齐陷阱”错误意味着什么?

    我的一位朋友在尝试调试开始显示 对齐陷阱 错误的代码时遇到了一个大问题 当特定函数访问全局结构时 就会出现问题 经过在网络上的一些研究 仍然不清楚 对齐陷阱 是什么意思或是什么 有人可以给出一个解释 特别注意通常导致对齐陷阱的原因以及解决问
  • ActionEvent e 是什么意思?

    我正在学习 Java 非常想更深入地了解 ActionEvent e 参数的含义和代表的含义 当我编码时 我不只是想吐出有效的代码 但我不明白 我想在使用概念之前充分理解它们 那么它具体要求什么以及两个部分 ActionEvent 和 e
  • 使用 tidytext 和 broom 但没有找到 LDA_VEM 的 tidier

    tidytext 书中提供了主题模型 tidier 的示例 library tidyverse library tidytext library topicmodels library broom year word counts lt t
  • 扩展 Mach-O 文件中的部分

    我正在尝试从 Dyld shared cache 中提取库 并且需要修复外部引用 例如 中的指针 DATA objc selrefs部分通常指向 mach o 文件外部的数据 为了解决这个问题 我必须从 dyld 复制相应的 c 字符串并将