标签: mach-o

使用Objective-C元数据生成类依赖图

这个人想出了一个非常简洁的工具来生成类依赖图 - 但是,它依赖于解析你的源代码并寻找#import指令.

这很整洁,但我有很多问题.其中最重要的是它不考虑导入的导入,也不考虑前缀标题,也不考虑导入所引用的文件中的类是否实际被使用.

我想做更类似的事情class-dump并检查存储在Mach-O文件中的Objective-C元数据,以生成类依赖关系的内存中表示.

我不想从头开始做这个,所以我想知道:

  • 它已经完成了吗?
  • 是否有一个开源库,它将为我提供提取此信息所需的基础工具(一个库,它检查Mach-O文件并创建包含在其中的Objective-C信息的外观 - 这样我可以迭代所有类,它们的方法,属性,ivars等,并扫描对其他类的引用)我认为class-dump的源代码是一个很好的起点.
  • 如果你有这方面的经验,我正在努力实现可行性吗?
  • 我需要克服哪些障碍?

mach-o objective-c objective-c-runtime

6
推荐指数
1
解决办法
1400
查看次数

iPhone Mach-O二进制文件,字符串存储,__TEXT/__ DATA

我试图从iPhone Mach-O二进制文件中读取常量(或初始化)字符串.据我所知,3个相关的segment.sections是_ TEXT._cstring _ TEXT._ustring和_ DATA._cfstring.但是,即使我知道字符串信息存储在我提取的这三个数据块中,我也无法理解它,它看起来像垃圾 - 我看不到任何可识别的字符串.任何人都可以对此有所了解,并让我知道需要采取哪些步骤来读取字符串数据?

我查看了一些代码(来自http://llvm.org/svn/llvm-project/cfe/trunk/lib/CodeGen/CodeGenModule.cpp的 GetAddrOfConstantCFString()),但是再一次,它与我的相关在二进制文件中看到.

就我而言,相关部分的大小是:

__TEXT.__cstring (99 K-bytes)
__TEXT.__ustring (<200 bytes)
__DATA.__cfstring (29 K-bytes)
Run Code Online (Sandbox Code Playgroud)

为了给你一个想法,__ cfstring部分的前32个字节,我将包含实际的字符串,如下所示:

转储_ 数据._cfstring

00  00  00  00  c8  07  00  00  74  02  0d  00  15  00  00  00
00  00  00  00  c8  07  00  00  8c  02  0d  00  01  00  00  00
...
Run Code Online (Sandbox Code Playgroud)

非常感谢你的帮助!

c iphone binary constants mach-o

6
推荐指数
1
解决办法
1079
查看次数

dsym文件的结构是什么?

构建应用程序时生成的 dsym 文件的结构是什么。我知道它包含 DWARF 调试信息,但 dsym 文件是什么。我想阅读其中的 DWARF 信息。

它只是一个仅包含调试部分的 Mach-O 二进制文件吗?如何将其传递给 DWARF 解析工具(例如 )pyelftool,该工具读取 ELF 文件的调试部分中的 DWARF 信息。

我用来objdump -h打印 dsym 文件的各个部分( .dsym 文件是一个包,我只是引用包中的二进制文件)

/Users/luna/Desktop/EarList.app.dSYM/Contents/Resources/DWARF/EarList:     file format mach-o-i386

Sections:
Idx Name          Size      VMA               LMA               File off  Algn
  0 .text         00001738  000026e0  000026e0  00000000  2**4
                  ALLOC, LOAD, CODE
  1 .symbol_stub  00000054  00003e18  00003e18  00000000  2**1
                  ALLOC, LOAD, CODE
  2 __TEXT.__stub_helper 00000098  00003e6c  00003e6c  00000000  2**2
                  ALLOC, LOAD, READONLY, CODE
  3 .const        00000010  00003f08  00003f08  00000000  2**3 …
Run Code Online (Sandbox Code Playgroud)

mach-o dwarf symbolicatecrash dsym pyelftools

6
推荐指数
1
解决办法
3341
查看次数

rpath在库中的传播失败

简短问题:LC_RPATH库中命令的rpath是否传递到后续(和间接)动态加载的库中?

更确切地说:我已libapi.dylib动态链接到libloader.dylib动态加载插件libplugin.dylib.我有:

$ otool -l lib/libapi.dylib
lib/libapi.dylib
        libapi.dylib
        /usr/lib/libSystem.B.dylib
        @rpath/libloader.dylib

$ otool -l lib/libloader.dylib
lib/libloader.dylib
        libloader.dylib
        /usr/lib/libSystem.B.dylib

$ otool -l lib/plugins/libplugin.dylib
lib/plugins/libplugin.dylib:
        libplugin.dylib
        /usr/lib/libSystem.B.dylib
        @rpath/libloader.dylib

$ otool -L lib/libapi.dylib | grep "LC_RPATH" -A2
        cmd LC_RPATH
      cmdsize 32
        path @loader_path/ (offset 12)
Run Code Online (Sandbox Code Playgroud)

既不定义rpath命令libloader.dylib也不libplugin.dylib定义.并且安装名称没有任何@ rpath /或其他路径,尽管load命令中的名称前缀为@rpath /.

客户端现在加载libapi.dylib哪个链接到哪个libloader.dylib.此库动态加载libplugin.dylib链接到的库libloader.dylib.

为什么不能libplugin.dylib加载?它退出,因为它找不到libloader.dylib- 虽然它必须已经加载.为什么rpath @ loader_path/libapi.dylib没有正确地传播libloader.dyliblibplugin.dylib …

macos mach-o rpath dyld

6
推荐指数
0
解决办法
427
查看次数

MacOS:未捆绑/ unix可执行文件的版本信息

对我来说这是一个难题:

  • for Bundles/Frameworks版本位于Info.plist中
  • 对于旧应用程序,它放在资源分叉中

但是今天我发现了一个新的可执行文件(LaunchDaemon),它没有资源分支,没有Info.plist,并且根据Finder中的右窗格有1.0.0.1110版本.问题是版本来自哪里?

macos finder mach-o spotlight info.plist

6
推荐指数
1
解决办法
775
查看次数

架构arm64的重复符号(Xcode错误)

我从项目中删除了对GoogleMobileAdsSDKiOS-7.1的所有引用,并添加了7.4.1.当我在模拟器上运行应用程序时一切正常但在设备上运行时我得到App Mach-O链接器错误.

 duplicate symbol l017 in:
/Users/ib/Desktop/Monster  GoogleAds7.4.1/GoogleMobileAdsSdkiOS- 7.4.1/GoogleMobileAds.framework/GoogleMobileAds(GADAdNetworkJavaScriptAdViewDelegate.o)
/Users/ib/Desktop/Monster GoogleAds7.4.1/GoogleMobileAdsSdkiOS-7.4.1/GoogleMobileAds.framework/GoogleMobileAds(GADRewardBasedVideoAd+Mediation.o)
duplicate symbol l018 in:
/Users/ib/Desktop/Monster GoogleAds7.4.1/GoogleMobileAdsSdkiOS-7.4.1/GoogleMobileAds.framework/GoogleMobileAds(GADMRAIDPicture.o)
/Users/ib/Desktop/Monster GoogleAds7.4.1/GoogleMobileAdsSdkiOS-7.4.1/GoogleMobileAds.framework/GoogleMobileAds(GADRewardBasedVideoAd+Mediation.o)
duplicate symbol l016 in:
/Users/ib/Desktop/Monster GoogleAds7.4.1/GoogleMobileAdsSdkiOS-7.4.1/GoogleMobileAds.framework/GoogleMobileAds(GADBannerAdViewDelegate.o)
/Users/ib/Desktop/Monster GoogleAds7.4.1/GoogleMobileAdsSdkiOS-7.4.1/GoogleMobileAds.framework/GoogleMobileAds(GADAdAppViewController.o)
duplicate symbol l021 in:
/Users/ib/Desktop/Monster GoogleAds7.4.1/GoogleMobileAdsSdkiOS-7.4.1/GoogleMobileAds.framework/GoogleMobileAds(GADLocation.o)
/Users/ib/Desktop/Monster GoogleAds7.4.1/GoogleMobileAdsSdkiOS-7.4.1/GoogleMobileAds.framework/GoogleMobileAds(GADNativeAdAttribution.o)
 duplicate symbol l016 in:
/Users/ib/Desktop/Monster GoogleAds7.4.1/GoogleMobileAdsSdkiOS-7.4.1/GoogleMobileAds.framework/GoogleMobileAds(GADBannerAdViewDelegate.o)
/Users/ib/Desktop/Monster GoogleAds7.4.1/GoogleMobileAdsSdkiOS-7.4.1/GoogleMobileAds.framework/GoogleMobileAds(GADNativeAdImage.o)
 duplicate symbol l005 in:
/Users/ib/Desktop/Monster GoogleAds7.4.1/GoogleMobileAdsSdkiOS-7.4.1/GoogleMobileAds.framework/GoogleMobileAds(GADMWebViewRenderedChecker.o)
/Users/ib/Desktop/Monster GoogleAds7.4.1/GoogleMobileAdsSdkiOS-7.4.1/GoogleMobileAds.framework/GoogleMobileAds(GADAdViewRenderedChecker.o)
 duplicate symbol l006 in:
/Users/ib/Desktop/Monster GoogleAds7.4.1/GoogleMobileAdsSdkiOS-7.4.1/GoogleMobileAds.framework/GoogleMobileAds(GADMWebViewRenderedChecker.o)
/Users/ib/Desktop/Monster GoogleAds7.4.1/GoogleMobileAdsSdkiOS-7.4.1/GoogleMobileAds.framework/GoogleMobileAds(GADAdViewRenderedChecker.o)
 duplicate symbol l012 in:
/Users/ib/Desktop/Monster GoogleAds7.4.1/GoogleMobileAdsSdkiOS-7.4.1/GoogleMobileAds.framework/GoogleMobileAds(GADPinger.o)
/Users/ib/Desktop/Monster GoogleAds7.4.1/GoogleMobileAdsSdkiOS-7.4.1/GoogleMobileAds.framework/GoogleMobileAds(GADCSIReporter.o)
 duplicate symbol l016 in:
/Users/ib/Desktop/Monster GoogleAds7.4.1/GoogleMobileAdsSdkiOS-7.4.1/GoogleMobileAds.framework/GoogleMobileAds(GADBannerAdViewDelegate.o)
/Users/ib/Desktop/Monster GoogleAds7.4.1/GoogleMobileAdsSdkiOS-7.4.1/GoogleMobileAds.framework/GoogleMobileAds(GADAdNetworkJavaScriptAdViewDelegate.o)
 duplicate symbol l021 in:
/Users/ib/Desktop/Monster …
Run Code Online (Sandbox Code Playgroud)

xcode mach-o admob ios arm64

6
推荐指数
2
解决办法
1万
查看次数

C++ 中 32 位和 64 位 Mach-O 二进制/可执行格式的解析器

我正在寻找一个可以解析 32 位和 64 位 Mach-O 二进制格式的 C++ 库。我不需要任何花哨的东西,只需将文件反汇编并将其拆分为多个部分,因此无需反编译、名称拆分等。

我知道我可以打开任何现有的反汇编程序或使用 Apple 的格式规范制作我自己的二进制解析器,但我有点希望不必走那么远,特别是如果其他人为我完成了这项工作。

非常感谢!

c++ macos mach-o

5
推荐指数
2
解决办法
5331
查看次数

Apple Mach-O Librarian(libtool)错误,没有特定错误

我以前不得不处理大量的libtool错误,但我真的不知道如何处理一个没有给我提示的错误.

这是完整的错误:

 Libtool /Users/programmingstation7/Library/Developer/Xcode/DerivedData/RZFramework-fglhxeoyynfgoxgrgpqwrywuaexk/Build/Products/Debug-iphoneos/libRZFramework.a normal armv7
                        cd /Users/programmingstation7/Documents/CleanedFramework
                        setenv IPHONEOS_DEPLOYMENT_TARGET 5.0
                        setenv PATH "/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin:/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"
                        /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/libtool -static -arch_only armv7 -syslibroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk -L/Users/programmingstation7/Library/Developer/Xcode/DerivedData/RZFramework-fglhxeoyynfgoxgrgpqwrywuaexk/Build/Products/Debug-iphoneos -L/Users/programmingstation7/Documents/CleanedFramework/.. -filelist /Users/programmingstation7/Library/Developer/Xcode/DerivedData/RZFramework-fglhxeoyynfgoxgrgpqwrywuaexk/Build/Intermediates/RZFramework.build/Debug-iphoneos/RZFramework.build/Objects-normal/armv7/RZFramework.LinkFileList -lxml2 -ObjC -all_load -framework CoreData /Users/programmingstation7/Library/Developer/Xcode/DerivedData/RZFramework-fglhxeoyynfgoxgrgpqwrywuaexk/Build/Products/Debug-iphoneos/libarc.a /Users/programmingstation7/Library/Developer/Xcode/DerivedData/RZFramework-fglhxeoyynfgoxgrgpqwrywuaexk/Build/Products/Debug-iphoneos/libEISRenderHelpful.a -framework CFNetwork -framework MobileCoreServices -framework Security /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/usr/lib/libxml2.dylib /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/usr/lib/libz.dylib -framework CoreLocation -framework CoreText -framework UIKit -framework Foundation -framework CoreGraphics -framework MediaPlayer -framework QuartzCore -framework AVFoundation -framework OpenGLES -framework MapKit -framework MessageUI -framework SystemConfiguration -framework EventKit -framework EventKitUI -o /Users/programmingstation7/Library/Developer/Xcode/DerivedData/RZFramework-fglhxeoyynfgoxgrgpqwrywuaexk/Build/Products/Debug-iphoneos/libRZFramework.a

                        Command /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/libtool failed with exit code 1
Run Code Online (Sandbox Code Playgroud)

我正在使用链接器标志-lxml2 -ObjC -all_load

有关导致无异常libtool失败的原因的任何想法? …

xcode linker mach-o

5
推荐指数
1
解决办法
6162
查看次数

使用位码更改 LC_ID_DYLIB 重新编译

我正在从启用位码的 iOS 源代码构建一个动态框架(使用cmakexcodebuild)。我使用lipoinstall_name_tool制作一个胖二进制文件并 update LC_ID_DYLIB,以便正确加载二进制文件。当我归档应用程序时,框架已正确签名并与应用程序一起打包。这是以下的输出file

MyFramework: Mach-O universal binary with 3 architectures: [arm_v7: Mach-O dynamically linked shared library arm_v7] [arm_v7s] [arm64]
MyFramework (for architecture armv7):   Mach-O dynamically linked shared library arm_v7
MyFramework (for architecture armv7s):  Mach-O dynamically linked shared library arm_v7s
MyFramework (for architecture arm64):   Mach-O 64-bit dynamically linked shared library arm64
Run Code Online (Sandbox Code Playgroud)

查看otool -l输出LC_ID_DYLIB显示:

Load command 4
          cmd LC_ID_DYLIB
      cmdsize 64
         name @rpath/MyFramework.framework/MyFramework (offset 24) …
Run Code Online (Sandbox Code Playgroud)

frameworks mach-o dylib otool ios

5
推荐指数
1
解决办法
999
查看次数

在osx上查找变量的虚拟内存地址

考虑 mono/domain.c 中的以下代码:

static MonoDomain *mono_root_domain = NULL;
   ...
MonoDomain* mono_get_root_domain (void)
{
        return mono_root_domain;
}
Run Code Online (Sandbox Code Playgroud)

我的任务是在运行时从另一个进程读取 mono_root_domain 指针指向的结构数据。(从这个其他进程附加、读取、定位dylib等已经解决)

查看生成的 libmono dylib 我可以找到相应的符号:

_mono_root_domain 符号

该符号指向本地重定位段(__DATA,__bss)中0x2621A8的地址:

本地重定位

它指向0x1A7690的地址(__TEXT,__symbol_stub): 间接断点

目标是 目标

所以0x1A7DF8(__TEXT,__stub_helper): 在此输入图像描述

此时我完全不知道如何检索指向 MonoDomain 结构的实际指针。任何帮助表示赞赏。

c macos mono mach-o dynamic-linking

5
推荐指数
1
解决办法
942
查看次数