美文网首页
uuid和MachO

uuid和MachO

作者: 笑破天 | 来源:发表于2022-07-27 21:11 被阅读0次

1、介绍

UUID(Universally Unique Identifier,通用唯一识别码),由32位16进制数字构成,二进制共128位。其目的是让分布式系统中的所有元素都能有唯一的识别信息。如此一来,每个人都可以创建不与其它人冲突的 UUID。

2、组成

UUID共有5部分组成:xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx,表现形式为8-4-4-4-12的32个字符。

如:df623885-68f9-47e0-b13c-bbd9600b6e71

16进制数字M表示UUID版本,当前有5个版本:1,2,3,4,5。这5个版本使用不同算法,利用不同的信息产生UUID,各版本有各自优势,适用于不同情景。具体使用的信息:

version 1, date-time & MAC address,当前时间戳 + MAC地址信息 生成
机器的MAC地址出厂后不能保证完全唯一,且之后 MAC 地址也可手动修改;
MAC 地址的暴露会造成了隐私与安全问题;
若一台机子上的两个进程同时跑,有可能出现重复问题。
version 2, date-time & group/user id
version 3, MD5 hash & namespace
version 4, pseudo-random number,伪随机数信息 生成,最频繁使用
version 5, SHA-1 hash & namespace
16进制数字N的二进制位一至四个最高有效位表示UUID变体(variant),有固定的两位10xx因此只可能取值8, 9, a, b
因为时间戳和随机数的唯一性,版本1和版本4总是生成唯一的标识符。若希望对给定的一个字符串总是能生成相同的 UUID,使用版本3或版本5

3、uuid和MachO

每个image有若干cmd,名为LC_UUID的cmd中保存着image的uuid。详见MachO文件解析,如下为使用示例

    for (int i = 0; i < images; i++) {
        for (unsigned int c = 0; cmd && (c < header->ncmds); c++) {
                if (cmd->cmd == LC_UUID) {
                struct uuid_command *uuidCmd = (struct uuid_command *)cmd;
                uuid = uuidCmd->uuid;
            }
        }
    }

相关文章

网友评论

      本文标题:uuid和MachO

      本文链接:https://www.haomeiwen.com/subject/ilizirtx.html