问题标签 [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 回答
1595 浏览

objective-c - 如何解析私有 Objective-C 特定的 Mach-O 部分

在 Mach-O 二进制文件的 DATA 段中,有一些特定于 Objective-C 的部分(在Mach-O 文件格式的第 7 页提到)

引用PiOS 论文

__objc_classlist 部分包含所有类的列表,其实现存在于分析的二进制文件中(即,开发人员实现或静态链接器包含的所有类)

另一方面,__objc_classref 部分包含对应用程序使用的所有类的引用。这些类的实现不需要包含在二进制文件本身中,但可以由运行时框架(相当于动态链接库)提供。

他们提到这些结构的布局可从 Objective C 运行时标头(可在此处获得)中获得。

__objc_classref和部分的实际结构是__objc_classlist什么?

提前致谢。

0 投票
1 回答
315 浏览

ios - 获取对本地符号的引用(即使其成为外部符号)

我有一个静态库,其中一个对象定义了一个符号:

我需要从我的 C 代码中访问该函数。显然,我没有库的源代码,所以我只能使用手头的存档文件。

这进一步受到 iOS 链接器的限制。

多一点上下文。该库是Objective-C++,所讨论的函数是纯C。我没有原始标题,但我已经恢复了函数签名。

0 投票
3 回答
16004 浏览

xcode - Apple Mach-O 链接器警告不会消失

几天来,我的项目中出现了这个 Apple Mach-O 链接器警告。它比什么都烦人,但我担心它可能会以某种方式影响我的应用程序的性能(我在 Xcode 上遇到过很多奇怪的问题,我现在不会怀疑任何事情)。警告说:

警告:找不到选项“-L/Volumes/ZBarSDK/ZBarSDK”的目录

我不知道是什么原因造成的,也不知道如何解决。我的应用程序中有一个名为 ZBarSDK 的文件夹,但添加另一个 ZBarSDK 并不能解决问题!我尝试在我的计算机上搜索一个 Volumes 文件夹,但没有成功,要么它不存在,要么 Apple 将它隐藏得很好。请让我知道我能做些什么来解决这个问题

0 投票
1 回答
1159 浏览

c++ - XCode Mach-O 链接器错误

从 XCode 4.3 + llvm 3.1 升级到 XCode 4.5 GM 后,我开始收到以下链接器错误。我已验证定义“_InvokeBridge”的静态库已正确链接。

知道什么可能导致错误吗?此外,是否有一般调查 Mach-o 链接器错误的提示?

非常感谢,A

0 投票
1 回答
2388 浏览

ios - -lsqlite3 导致 Apple Mach-O 链接器错误

我安装了 Facebook SDK 并遵循他们的教程之一,以便为我的应用程序提供一些非常基本的 FB 功能。该应用程序和 FB 集成似乎工作得很好,所以我认为我在本教程中做得不错。当我尝试存档项目以便我可以在 TestFlight 上进行构建时,由于 15 个链接器错误,我得到了一个失败,看起来像下面的文本(我从应用程序日志中复制了它)。它似乎与 lsqlite3.0 有关,FB tute 说将其添加到“其他链接”下的构建设置中。我不太确定该怎么做才能解决。我能得到一些建议吗?那将是超级棒的,谢谢!以下是错误:

架构 armv7 的未定义符号:“_sqlite3_reset”,引用自:FacebookSDK 中的 _initializeStatement(FBCacheIndex.o) “_sqlite3_prepare_v2”,引用自:FacebookSDK 中的_initializeStatement(FBCacheIndex.o) “_sqlite3_open_v2”,引用自:___36-[FBCacheIndex initWithCacheFolder:] FacebookSDK(FBCacheIndex.o) 中的_block_invoke_0 "_sqlite3_bind_text",引用自:FacebookSDK(FBCacheIndex.o) 中的-[FBCacheIndex _updateEntryInDatabaseForKey:entry:] -FacebookSDK(FBCacheIndex.o) 中的[FBCacheIndex _writeEntryInDatabase:] -[FBCacheIndex _readEntryFromDatabase:] FacebookSDK(FBCacheIndex.o) -[FBCacheIndex _removeEntryFromDatabaseForKey:] in FacebookSDK(FBCacheIndex.o) "_sqlite3_step",引用自:-[FBCacheIndex _updateEntryInDatabaseForKey:entry:] 在 FacebookSDK(FBCacheIndex.o) -[FBCacheIndex _writeEntryInDatabase:] 在 FacebookSDK(FBCacheIndex.o) -[FBCacheIndex _readEntryFromDatabase:] 在 FacebookSDK(FBCacheIndex.o) -[FBCacheIndex _fetchCurrentDiskUsage] 在 FacebookSDK(FBCacheIndex .o) -[FBCacheIndex _removeEntryFromDatabaseForKey:] 在 FacebookSDK(FBCacheIndex.o) -[FBCacheIndex _dropTrimmingTable] 在 FacebookSDK(FBCacheIndex.o) -[FBCacheIndex _trimDatabase] 在 FacebookSDK(FBCacheIndex.o) ... "_sqlite3_bind_double",引用自: -FacebookSDK(FBCacheIndex.o) 中的[FBCacheIndex _updateEntryInDatabaseForKey:entry:] -FacebookSDK(FBCacheIndex.o) 中的[FBCacheIndex _writeEntryInDatabase:] "_sqlite3_bind_int",引用自:-FacebookSDK(FBCacheIndex.o) 中的[FBCacheIndex _updateEntryInDatabaseForKey:entry:] -FacebookSDK(FBCacheIndex.o) 中的[FBCacheIndex _writeEntryInDatabase:] -FacebookSDK(FBCacheIndex.o) 中的[FBCacheIndex _trimDatabase] “_sqlite3_finalize”,引用自:FacebookSDK 中的_releaseStatement (FBCacheIndex.o) "_sqlite3_column_text",引用自:-[FBCacheIndex _readEntryFromDatabase:] in FacebookSDK(FBCacheIndex.o) -[FBCacheIndex _trimDatabase] in FacebookSDK(FBCacheIndex.o) "_sqlite3_exec",引用自:___36-[FBCacheIndex initWithCacheFolder: ]_block_invoke_0 in FacebookSDK(FBCacheIndex.o) "_sqlite3_errmsg",引用自:FacebookSDK(FBCacheIndex.o) 中的_releaseStatement -[FBCacheIndex _updateEntryInDatabaseForKey:entry:] 在 FacebookSDK(FBCacheIndex.o) 中的 _initializeStatement 在 FacebookSDK(FBCacheIndex.o) -[FBCacheIndex _writeEntryInDatabase:] 在 FacebookSDK(FBCacheIndex.o) -[FBCacheIndex _readEntryFromDatabase:] 在 FacebookSDK(FBCacheIndex.o) -[FBCacheIndex _fetchCurrentDiskUsage] 在 FacebookSDK( FBCacheIndex.o) -[FBCacheIndex _removeEntryFromDatabaseForKey:] in FacebookSDK(FBCacheIndex.o) ... "_sqlite3_column_int",引用自: -[FBCacheIndex _readEntryFromDatabase:] in FacebookSDK(FBCacheIndex.o) -[FBCacheIndex _fetchCurrentDiskUsage] 在 FacebookSDK(FBCacheIndex. o) -[FBCacheIndex _trimDatabase] in FacebookSDK(FBCacheIndex.o) "_sqlite3_close",引用自:___23-[FBCacheIndex dealloc]_block_invoke_0 in FacebookSDK(FBCacheIndex.o) "_sqlite3_column_double",引用自:-[FBCacheIndex _readEntryFromDatabase:] in FacebookSDK(FBCacheIndex.o) ld:未找到架构 armv7 clang 的符号:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)

0 投票
1 回答
1287 浏览

python - Libsvm python 绑定:mach-o,但架构错误

我正在尝试在我的 mac (OS-X 10.6.8) 上安装 libsvm。Libsvm 可以很好地为 C++ 安装(我可以很好地使用 svm-train、svm-predict 二进制文件)。按照说明,我在 libsvm-3.12/python/ 文件夹中输入 make 并得到以下输出

但是当我尝试通过“import svmutil”在 python 中使用它时,我收到以下错误

我不知道如何解决这个错误。我也尝试使用 g++ 的 -m64 和 -arch x86_64 标志进行编译(在 libsvm 的“制作”过程中),但我继续收到此错误。有人可以告诉我如何解决这个问题吗?

0 投票
2 回答
1238 浏览

dynamic-linking - 更改 Mach-o 二进制文件中的函数引用

我需要将 mach-o 二进制文件中的函数引用更改为我自己的 dylib 中定义的自定义函数。我现在遵循的过程是,

  1. 将对旧函数的引用替换为新函数。例如_fopen使用_mopensed。

  2. 我在MachOView中打开 mach-o 二进制文件以查找我想要更改的实体的地址。然后我使用十六进制编辑器手动更改二进制文件中的信息。

有没有一种方法可以使这个过程自动化,即编写一个程序来读取符号和动态加载信息,然后在可执行文件中更改它们。我正在查看 mach-o 头文件,/usr/include/mach-o但不完全确定如何使用它们来获取此信息。是否存在任何库 - C 或 python 可以帮助做同样的事情?

0 投票
2 回答
2189 浏览

xcode - 更新到 xcode 4.5,现在应用程序构建失败“Apple Mach-O 链接器错误”

嗨,我是应用程序开发的新手,但在升级到 xcode 4.5 之前,我确实有一个应用程序运行良好。该应用程序没有改变,但是当我尝试将同一个应用程序放在我一直使用的同一台 iPad 上时,我现在得到“构建失败”。

我收到的错误显示在这里http://i1342.photobucket.com/albums/o763/designbyria/ScreenShot2012-09-27at162319_zpsfea02141.png(我愚蠢地无法包含图像) - Apple Mach-O Linker Error,确实有谁知道我该如何解决这个问题?我真的不知道发生了什么,重要的是我让这个应用程序尽快运行!

任何和所有的帮助将不胜感激!提前谢谢你……</p>

0 投票
2 回答
1744 浏览

c - 动态查找函数地址

我的目标是在 ARM 平台上的剥离二进制文件中挂钩没有符号的 C 函数。由于这些函数的地址可能会改变(即更新二进制文件),我希望我的插入动态库本身能够找到地址。

此外,在某些时候,这些函数使用一个 C 字符串,它永远不会通过更新而改变。考虑到这一点,以下是查找函数地址的 3 个步骤:

1)找到C字符串本身的地址(通过分析__cstring段内的__TEXT部分。

2) 找到对字符串的引用的地址。

3)从外部参照地址开始,往回走,直到找到一个函数序言。

我可以实施步骤 1)和 3),但我对 2)有点迷茫。究竟什么是外部参照?如何识别与 C-string 对应的那个?不需要代码,只需要一些理论。

谢谢 !

0 投票
4 回答
18136 浏览

ios - iPhone 上的 Go 语言

是否可以用 Go for iPhone 编写代码?我认为需要以下步骤

  1. 将 Go 编译为 ARM Mach-O 二进制文件(我希望 GCCGO 能够做到这一点)

  2. 将 iPhone 应用程序编译为静态库(我认为可以重命名 main() -> main2() 等)

  3. 将 Go 编译为与 iPhone 静态库链接的 Mach-O 二进制文件。Go 将不得不调用 main2。

  4. 制作一些 plist 文件,压缩,签名