LD_PRELOAD malloc到shm_open

时间:2019-04-11 23:32:30

标签: malloc shared-memory dynamic-linking ld-preload librt

我正在尝试使用malloc截获LD_PRELOAD通话。我想通过将malloc更改为shm_open,然后再更改mmap,将所有内存分配移至共享内存。我该怎么办?

malloc

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

1 个答案:

答案 0 :(得分:0)

  

我该怎么办?

通常不能。

如果您希望插入malloc之类的低级函数,最好的选择是仅使用低级直接系统调用。

使用诸如shm_open之类的更高级别的内容,必定会在不久后遇到麻烦。即使shm_open今天没有使用librtdlopen,也没有任何明天会阻止它使用(并破坏您精心构造的纸牌屋)。

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