LD_PRELOAD malloc到shm_open

问题描述 投票:0回答:1

我试图用malloc拦截LD_PRELOAD电话。我想通过将malloc更改为shm_open后跟mmap将所有内存分配移动到共享内存。我该怎么做?

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

malloc shared-memory dynamic-linking ld-preload librt
1个回答
0
投票

我该怎么做?

一般来说,你不能。

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

使用任何更高级别的东西,比如shm_open,很快就会遇到麻烦。即使shm_open今天没有使用librtdlopen,也没有什么可以阻止它明天这样做(并打破你精心构造的卡片屋)。

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

© www.soinside.com 2019 - 2024. All rights reserved.