内部 libc 函数调用是否必须通过 .plt



一个链接到 libc.so 的程序通过plt调用libc函数,假设setenv((。在setenv((内部,它调用malloc((,至少根据musl libc。

setenv((->malloc(( 调用是否总是必须通过 plt 并得到?RIP 相对寻址不是更好吗,因为即使启用了 ASLR,您也只会移动整个 VMA?

setenv((->malloc(( 调用是否总是必须通过 plt 并得到?

不必这样做,但许多libc实现允许最终用户替换他/她自己的malloc实现(例如TCMalloc或jemalloc(,并且直接从setenv调用malloc会严重限制这一点。

RIP 相对寻址不是更好吗

你需要小心"工作得更好"的实际含义,以及你评估它的轴。

IP 相对调用(即直接调用(会更快、更高效,但它根本不适用于符号插入。

附言至少GLIBC对用户提供的mmap没有类似的规定,因此直接进行mmap调用。这实际上给那些想要通过插入mmapmunmap来准确解释过程中使用的所有内存的人带来了问题。

最新更新