さまざまな情報を取得するためにマッチョファイルを解析するためのライブラリ。
ファイルの読み取りに加えて、 _dyld_get_image_headerによるメモリ内の画像の解析もサポートされています。
メモリから読むには、 MachOImage構造を使用します。
_dyld_get_image_headerによって取得されたMACH-Oヘッダーポインターを使用して初期化できます。
guard let mh = _dyld_get_image_header ( 0 ) else { return }
let machO = MachOImage ( ptr : mh )または、名前を使用して初期化することもできます。
// /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation
guard let machO = MachOImage ( name : " Foundation " ) else { return }ファイルから読むには、 MachOFile構造を使用してください。
ファイルから読むことは次のとおりです。脂肪ファイルと単一のマッチョファイルのケースがあるため、条件付き分岐プロセスが必要です。
let path = " Path to MachO file "
let url = URL ( string : path )
let file = try MachOKit . loadFromFile ( url : url )
switch file {
case . machO ( let machOFile ) : // single MachO file
print ( machOFile )
case . fat ( let fatFile ) : // Fat file
let machOFiles = try fatFile . machOFiles ( )
print ( machOFiles )
}MachOImageとMachOFile両方は、本質的に同じプロパティと方法を使用できます。使用可能な方法は、次のファイルでMachORepresentableプロトコルとして定義されています。
MachorePresentable
dyld_shared_cacheの読み込みもサポートされています。
使用可能な方法は、次のファイルでDyldCacheRepresentableプロトコルとして定義されています。
dyldcacherepresentable
let path = " /System/Volumes/Preboot/Cryptexes/OS/System/Library/dyld/dyld_shared_cache_arm64e "
let url = URL ( fileURLWithPath : path )
let cache = try ! DyldCache ( url : url ) dyld_shared_cacheに含まれるマッチョ情報を抽出することもできます。抽出されたマッチョは、 MachOFileのタイプです。単一のマッチョファイルから読むと同様に、さまざまな分析が可能です。
let machOs = cache . machOFiles ( )
for machO in machOs {
print (
String ( machO . headerStartOffsetInCache , radix : 16 ) ,
machO . imagePath ,
machO . header . ncmds
)
}
// 5c000 /usr/lib/libobjc.A.dylib 22
// 98000 /usr/lib/dyld 15
// 131000 /usr/lib/system/libsystem_blocks.dylib 24
// ...Appleプラットフォームでは、Dyldキャッシュがメモリに展開されます。
var size = 0
guard let ptr = _dyld_get_shared_cache_range ( & size ) else {
return
}
let cache = try ! DyldCacheLoaded ( ptr : ptr ) dyld_shared_cacheに含まれるマッチョ情報を抽出することもできます。抽出されたマッチョは、 MachOImageのタイプです。単一のマッチョ画像から読むのと同様に、さまざまな分析が可能です。
let machOs = cache . machOImages ( )
for machO in machOs {
print (
String ( Int ( bitPattern : machO . ptr ) , radix : 16 ) ,
machO . path! ,
machO . header . ncmds
)
}
// 193438000 /usr/lib/libobjc.A.dylib 24
// 193489000 /usr/lib/dyld 15
// 193513000 /usr/lib/system/libsystem_blocks.dylib 24
// ...さまざまな用途がありますが、ほとんどがテストディレクトリに出力を印刷する基本的な例を示しています。
次のファイルにはサンプルコードが含まれています。 MACHOPRINTESTS
次のファイルにはサンプルコードが含まれています。 MACHOFILEPRINTESTS
次のファイルにはサンプルコードが含まれています。 dyldcacheprinttests
次のファイルにはサンプルコードが含まれています。 dyldcacheloadedprinttests
MachokitはMITライセンスの下でリリースされます。ライセンスを参照してください