有关libc指针加密的问题

glibceglibc有一个PTR_MANGLE ,它可以加密可写内存中的指针(更准确地说,’XOR’而不是’encrypt’)。

我没有太多关于这个function的阅读。 man -k PTR_MANGLE没有回复,谷歌正在回复一些肤浅的喋喋不休。 Drepper在Live Journal上的Pointer加密是为数不多的权威文章之一。

有没有深入的文件? 它可以扩展到用户空间进程,还是仅限于运行时库? 如果是,启用该function的编译器开关或选项是什么? 可以在运行时禁用该function吗?

PTR_MANGLE是glibc中的内部function,基于宏构建。 它不是由编译器以任何方式自动化的。 您可以在应用程序中复制相同的内容,但您还必须手动执行此操作; 它的工作原理如下:

 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) 

这可能与glibc实现完全不同; 我很长一段时间没有看过它,只是写下了我的头脑。 看似无用的条件运算符是强制生成的表达式与原始指针具有相同的类型,因此可以直接使用它。

请注意,该操作是它自己的反转,因此PTR_MANGLE可用于“加密”和“解密”。