0

我正在尝试malloc使用LD_PRELOAD. 我想通过更改mallocshm_open后跟将所有内存分配移动到共享内存mmap。我该怎么做?

LD_PRELOADmalloc工作正常。我可以拦截每一个malloc电话。但是,调用shm_open被拦截malloc失败,因为shm_open需要librt链接到LD_PRELOAD 中需要libdl的链接。dlsym有一个递归插入。我想过创建一个包装共享内存分配的静态库。然后从被拦截的地方调用它malloc。但librt不能动态链接。

4

1 回答 1

0

我该怎么做?

一般来说,你不能。

如果你想插入低级函数malloc,最好的办法是只使用低级直接系统调用。

使用任何更高级别的东西,例如shm_open,迟早肯定会遇到麻烦。即使今天shm_open没有使用librtdlopen也没有什么可以阻止它明天这样做(并打破您精心构建的纸牌屋)。

除了明显的直接递归问题外,还可能存在“初始化顺序”问题(例如shm_open,可能需要malloc并且librt已经初始化,在malloc调用第一个时不能保证)。

于 2019-04-13T02:55:43.827 回答