我正在尝试使用malloc
截获LD_PRELOAD
通话。我想通过将malloc
更改为shm_open
,然后再更改mmap
,将所有内存分配移至共享内存。我该怎么办?
malloc
的 LD_PRELOAD工作正常。我可以拦截每个malloc
的电话。但是,在拦截的shm_open
中调用malloc
会失败,因为shm_open
需要链接librt
,而链接到LD_PRELOAD中libdl
所需的dlsym
。有一个递归插入。我考虑过要创建一个包装共享内存分配的静态库。然后从拦截的malloc
中调用它。但是librt
无法动态链接。
答案 0 :(得分:0)
我该怎么办?
通常不能。
如果您希望插入malloc
之类的低级函数,最好的选择是仅使用低级直接系统调用。
使用诸如shm_open
之类的更高级别的内容,必定会在不久后遇到麻烦。即使shm_open
今天没有使用librt
和dlopen
,也没有任何明天会阻止它使用(并破坏您精心构造的纸牌屋)。
除了明显的直接递归问题外,还可能存在“初始化顺序”问题(例如shm_open
可能要求malloc
和librt
已初始化,但不能保证第一个malloc
被调用)。