PTR_MANGLE是glibc中的一个内部功能,建立在宏上.它不是由编译器以任何方式自动化的.您可以在应用程序中复制相同的内容,但您还必须手动执行此操作; 它的工作原理如下:
uintptr_t xor_key; // needs to be initialized with random "key" before use
#define PTR_MANGLE(p) (1 ? (void *)((uintptr_t)(p) ^ xor_key) : p)
Run Code Online (Sandbox Code Playgroud)
这可能与glibc实现完全不同; 我很长一段时间没有看过它,只是写下了我的头脑.看似无用的条件运算符是强制生成的表达式与原始指针具有相同的类型,因此可以直接使用它.
注意,操作是它自己的反转,因此PTR_MANGLE可以用于"加密"和"解密".