我目前正在制作一个高级的 Mach-O 可执行反汇编器,并且对可执行标头的 Magic 和 Cigam 部分感到困惑。我了解它们的工作原理以及它们如何确定可执行文件的字节顺序以及是否为 32/64 位,但我坚持的一件事是:哪种十六进制顺序代表 Magic 和 Cigam:
这是通用标头的原始十六进制(直接来自 hexdump):
cffaedfe- 这是一个 64 位标头,但它是 Magic 还是 Cigam。
我对此感到困惑的原因是因为像 cigam 这样的所有排序都需要以相反的方向翻转每 4 个字节,并且我是否以字节序读取字节???我查看了马赫标题,发现了这些东西:
MH_MAGIC_64 = 0xfeedfacf
MH_CIGAM_64 = 0xcffaedfe(MH_MAGIC 已交换)
但 0xcffaedfe 是否意味着从 mach-o 文件中的直接十六进制进行匹配,这意味着它的 CIGAM 或者我以 Endian 读取它并cffaedfe变成feedfacf变得神奇???
请告诉我:
(直接来自文件 hexdump)cffaedfe - 这是 Magic 还是 Cigam???
谢谢
我想使用"otool"或"objdump"打印在 iOS 二进制文件中找到的所有 Objective-C 类的名称。我在 macOS 上的未加密的 iOS 二进制文件上执行此操作。
我尝试过的:
otool -oV /path to executable/ | grep name | awk '{print $3}'
Run Code Online (Sandbox Code Playgroud)
但我不知道如何只解析 Objective-C 类名。
nm /path to executable/ | grep _OBJC_CLASS_
Run Code Online (Sandbox Code Playgroud)
你们能帮我用 cmd/脚本来打印 iOS 二进制文件中所有 Objective-C 类的名称吗?
特别是,我正在OS X上读取Intel 32的Mach-O二进制文件格式.在FAT头之后,在第一个存档的偏移之前有一大堆填充.所有这些填充的重点是什么?
更具体地说,FAT标头和第一个存档(特别是mach_header)之间有超过4000字节的填充.为什么包括所有这些额外的字节?!OS X是否喜欢为所有通用二进制文件添加4 KB?
我有一些汇编代码,我真的不明白.我的想法是没有意义.不幸的是,我无法提供更多的指导信息.C的输出是什么?
0x1000: iretd
0x1001: cli
0x1002: in eax, dx
0x1003: inc byte ptr [rdi]
0x1005: add byte ptr [rax], al
0x1007: add dword ptr [rbx], eax
0x1009: add byte ptr [rax], al
0x100b: add byte ptr [rdx], 0
0x100e: add byte ptr [rax], al
Run Code Online (Sandbox Code Playgroud)
谢谢
mach-o ×4
assembly ×1
binary ×1
c ×1
executable ×1
hex ×1
machine-code ×1
objdump ×1
objective-c ×1
otool ×1
universal ×1
x86-64 ×1