问题标签 [mach-o]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
928 浏览

ios - IOS 二进制文件中的 LC_DATA_IN_CODE

我有一个 IPA 文件,其主要二进制文件包含一个 0x29 加载命令,该命令在旧版本的 loader.h 中指定为“LC_DATA_IN_CODE”。

但是,当我尝试对文件执行任何操作(包括使用 otool 或 codesign)时,我会收到有关“未知加载命令”的错误消息。

我将与给我 IPA 文件的人交谈,但在此之前我想了解此命令的一些历史记录。它是否不再受支持,如果是,它留下了什么版本?或者它是否被重新添加到最新版本的操作系统中?删除它会伤害任何东西吗?

谢谢。

0 投票
1 回答
838 浏览

operating-system - 在 OS X 上使用注入的 dylib 覆盖 libc 函数

我正在尝试puts()用我自己的实现覆盖一些 libc 函数(例如:)。

我在 dylib 文件中定义了自己的实现,如下所示。

当我将我的二进制文件与 Xcode 中的 dylib 文件链接并构建时,我的覆盖版本被调用。

但是,当我将 dylib 注入到我的二进制文件中时,我看到没有调用覆盖的版本。我已经通过在 dylib 的入口点记录一些内容来验证 dylib 正在加载。

这里有人可以指出我需要做什么才能调用我的覆盖版本吗?

0 投票
1 回答
200 浏览

ios - 如何制作不能被 dead_stripped 的目标文件?

生成没有设置SUBSECTIONS_VIA_SYMBOLS标志的 Mach-O 目标文件的最简单方法是什么,以便链接器(带有-dead_strip)稍后不会尝试将文本部分切割成片段并猜测使用了哪些片段?

我可以使用 llvm/gcc (4.2.1) 的命令行选项来阻止它.subsections_via_symbols首先发出,或者使用命令行工具从现有的目标文件中删除标志。

(根据 Mach-O 规范自己编写这样的工具是一种选择,但如果可能的话,我宁愿不要那么辛苦地重新发明轮子)。

平台: iOS,从 OSX 与 XCode 4.5 交叉编译。


背景:我们正在提供其他公司构建到应用程序中的静态库。当我们的库遇到问题时,它会生成一个崩溃报告,其中包含堆栈跟踪和某些其他关键信息(如果我们幸运的话)我们可以稍后进行分析。通常,部署的应用程序已被剥离调试信息,因此解释堆栈跟踪是一个问题。如果我们自己制作应用程序,我们只需保存剥离之前的 DWARF 调试数据,并使用它来解码传入崩溃报告中的地址。但是我们不能依赖应用程序制造商从他们的链接步骤中向我们提供此类数据。

我们正在做的是让崩溃报告包含所选函数的运行时地址;从中我们可以推断出链接器映射中的地址与崩溃报告中的地址之间的偏移量。我们将整个库逐步链接到单个 .o 中,然后再将其填充到 .a 中;因为它只做一件大事,所以当最终链接应用程序时,从其中删除未使用的功能不会节省太多。不幸的是,库中的一些代码有时没有使用(主要功能的替代 API 入口点,用于解释我们的错误代码的小帮助函数等),如果应用程序开发人员链接到-dead_strip,它扰乱了崩溃报告的地址重建,即最终应用程序中的相对偏移量与我们增量链接操作的链接器映射不同。

我们不能现实地要求所有应用程序开发人员在他们的构建过程中禁用死代码剥离,所以如果我们可以将我们的 .o 标记为“不可死剥离”并让最终的应用程序链接尊重这一点,这似乎是一个更好的前进方式。

0 投票
2 回答
948 浏览

xcode - 设备上的 Cocos2d 2.x ARC 问题

我正在开发一款带有 ARC 的 cocos2d 的游戏。游戏在模拟器中构建和运行良好,但是当我为设备构建时,我Apple Mac-O Linker Errors说我缺少 libcocos2d.a 等库。

当我转到文件丢失的文件夹时,我只看到 jellyfish.app。

我在这类问题上没有太多经验,我不清楚为什么会这样,我检查了如何从 TinyTimGames 和 LearnCocos2D 启动项目,仍然不清楚我做错了什么。

0 投票
1 回答
239 浏览

macos - 在运行时更改 Mac OS 进程中的函数引用

我需要在运行时将 Mac OS 进程中的函数引用更改为我自己的自定义 dylib 中定义的自定义函数。我保持新的函数签名与原来的相同。例如,我需要将“open”函数更改为“myopen”函数。

我尝试处理 __LINKEDIT 段以获取动态符号表和字符串表。我使用了以下指针,1.来自 __LINKEDIT 段的 VMAddrress,2.来自“_dyld_register_func_for_add_image”回调的 mach_header 和 vmaddr_slide,3.来自 symtab_command 的 symoff 和 stroff。

但是我无法获取 __LINKEDIT 段中提到的符号表和字符串表。有人可以对此有所了解吗?提前致谢。

0 投票
1 回答
158 浏览

mach-o - 男子气概标头向后兼容吗?

位于/usr/lib/mach-o不同 iOS 版本 4、5、6 等的可执行文件的 macho 标头是否向后兼容?如果是这样,我在哪里可以获得它们的特定版本。我尝试在 Apple Darwin 网站上进行搜索,但他们并未将它们作为单独的项目进行维护。

0 投票
1 回答
793 浏览

iphone - Apple Mach-O 链接器 (ID) 错误 _compress 和链接器命令失败,退出代码为 1


我一直在开发一个应用程序,用于将照片图像从 iPhone 上传到网络服务器进行实习,但每次尝试运行该应用程序时,都会出现 Mach-O 链接器错误。我已经尝试了在此站点上找到的所有内容(重新创建应用程序、添加 libz.dylib、添加 QuartzCore.Framework),但错误仍然存​​在。有人知道代码有什么问题吗?

错误


0 投票
1 回答
1951 浏览

c++ - 将 Mach-O 可执行文件与静态库合并?

假设你有

  1. 一个预构建的 iOS 可执行应用程序(用于模拟器或设备)。
  2. 一个预构建的静态存档库静态库,其中包含 c++ 静态初始化程序。

现在应该可以合并两个构建的产品以生成一个新的 iOS 可执行文件,它与旧的一样,除了它现在还与附加的静态库链接,并且在执行时将运行静态库的静态初始化程序。

哪个工具(如果有)可以帮助解决这个合并问题?

编辑:一个可接受的解决方案也是使用 dlopen 动态加载库。这样做的全部目的是为了应用程序测试,所以重新链接的应用程序永远不会看到应用程序商店。

0 投票
1 回答
6165 浏览

ios5 - 重复符号_OBJC_CLASS_$_LoginController

我知道这个问题之前已经被问过很多次了,但是直到现在都没有解决我的问题。我知道当您在项目中获得文件的多个副本时会发生此错误。我试图清理构建,删除编译源中的任何LoginController.m文件,然后构建。很好 - 没有错误。当我在 Complie 资源中添加我的 LoginController.m 文件时,编译器再次给出了同样的错误。

接下来我尝试的是从编译源中删除所有 .m 文件,成功清理和重建,并非常小心地添加每个 .m 文件。再次提出了同样的错误。我没有找到任何重复的文件,那为什么会发生这种情况?

请有人指导我。非常感谢。

编辑: 错误是:

Ld /Users/svp/Library/Developer/Xcode/DerivedData/TryAgain-dhbbyywxclvxfodbunqysmmfefcl/Build/Products/Debug-iphonesimulator/TryAgain.app/TryAgain normal i386 cd /Users/svp/Desktop/TryAgain setenv MACOSX_DEPLOYMENT_TARGET 10.6 setenv PATH "/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin" /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/clang -arch i386 -isysroot /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.0.sdk -L/Users/svp/Library/Developer/Xcode/DerivedData/TryAgain-dhbbyywxclvxfodbunqysmmfefcl/Build/Products/Debug-iphonesimulator -L/Users/svp/Desktop/TryAgain/TryAgain -L/Users/svp/Desktop/TryAgain/../CorePlot_1.0/Binaries/iOS -F/Users/svp/Library/Developer/Xcode/DerivedData/TryAgain-dhbbyywxclvxfodbunqysmmfefcl/Build/Products/Debug-iphonesimulator -filelist /Users/svp/Library/Developer/Xcode/DerivedData/TryAgain-dhbbyywxclvxfodbunqysmmfefcl/Build/Intermediates/TryAgain.build/Debug-iphonesimulator/TryAgain.build/Objects-normal/i386/TryAgain.LinkFileList -mmacosx-version-min=10.6 -Xlinker -objc_abi_version -Xlinker 2 -ObjC -all_load -fobjc-arc -D__IPHONE_OS_VERSION_MIN_REQUIRED=50000 -framework MediaPlayer -lz -framework AVFoundation -framework MobileCoreServices -framework SystemConfiguration -framework CFNetwork -framework QuartzCore -framework UIKit -framework Foundation -framework CoreGraphics -lCorePlot-CocoaTouch -o /Users/svp/Library/Developer/Xcode/DerivedData/TryAgain-dhbbyywxclvxfodbunqysmmfefcl/Build/Products/Debug-iphonesimulator/TryAgain.app/TryAgain

ld: duplicate symbol _OBJC_CLASS_$_LoginController in /Users/svp/Library/Developer/Xcode/DerivedData/TryAgain-dhbbyywxclvxfodbunqysmmfefcl/Build/Intermediates/TryAgain.build/Debug-iphonesimulator/TryAgain.build/Objects-normal/i386/LoginController.o and /Users/svp/Library/Developer/Xcode/DerivedData/TryAgain-dhbbyywxclvxfodbunqysmmfefcl/Build/Intermediates/TryAgain.build/Debug-iphonesimulator/TryAgain.build/Objects-normal/i386/Navigator.o for architecture i386 Command /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/clang failed with exit code 1

0 投票
1 回答
116 浏览

iphone - 在 iPhone 而非 iPhone 模拟器上编译时出错

这是错误消息:

是的,这是一个可怕的 Mach-O 链接器错误。我受不了他们。我的应用程序的早期版本在我的 iPhone 上运行,我只是好奇发生了什么,任何帮助表示赞赏!

  • 迈克尔