有关libc指针加密的问题

jww*_*jww 5 c security libc

glibc并且eglibc有一个PTR_MANGLE,它加密可写内存中的指针(更准确地说,'XOR'而不是'加密').

我没有找到关于该功能的更多阅读.man -k PTR_MANGLE返回没有点击,谷歌正在返回一些肤浅的喋喋不休.Drepper 在Live Journal上的Pointer加密是为数不多的权威文章之一.

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

R..*_*R.. 5

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可以用于"加密"和"解密".