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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了内部libc函数调用必须通过.plt相关的知识,希望对你有一定的参考价值。

与libc.so链接的程序通过plt调用libc函数,例如setenv()。在setenv()内部,它至少根据musl libc调用malloc()。

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

答案
setenv()-> malloc()调用是否总是必须经过plt才能获得?
没有[[必须,但是许多libc实现允许最终用户替换他/她自己的malloc实现(例如TCMallocjemalloc),并从malloc调用setenv

直接将严重限制这一点。

RIP相对寻址不会更好地工作

您需要注意“更好的工作”的实际含义,以及评估的方向。
IP相对调用(即直接调用)会更快,更有效,但是对于符号插入完全不起作用。

P.S。至少GLIBC对于用户提供的mmap没有类似的规定,因此直接进行mmap呼叫。这实际上给想要通过插入mmapmunmap来准确说明该过程中使用的所有内存的人带来了问题。

以上是关于内部libc函数调用必须通过.plt的主要内容,如果未能解决你的问题,请参考以下文章

使用ret2plt绕过libc安全区

通过GDB学透PLT与GOT

通过GDB学透PLT与GOT

ctf-wiki之ret2libc

Android 逆向Android 进程注入工具开发 ( 注入代码分析 | 远程调用 目标进程中 libc.so 动态库中的 mmap 函数 一 | mmap 函数简介 )

xctf-pwn level3