Luc*_*are 1 executable hex mach-o
我目前正在制作一个高级的 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???
谢谢
MH_MAGIC_64并且MH_CIGAM_64没有附加一些绝对的字节序,它们的含义是相对于主机字节序的。
假设您有一个用于小端架构的二进制 A 及其前四个字节cf fa ed fe,以及一个用于大端架构的二进制 B 及其前四个字节fe ed fa cf。
在小端机器上,二进制 A 将具有MH_MAGIC_64,二进制 B 将具有MH_CIGAM_64,但在大端机器上,二进制 B 将具有MH_MAGIC_64,A 将具有MH_CIGAM_64。
因此,本质上,您使用本机主机字节顺序读取魔法,如果它匹配MH_CIGAM_64,那么您将必须交换从该二进制文件读取的所有整数。
| 归档时间: |
|
| 查看次数: |
1290 次 |
| 最近记录: |