内部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
实现(例如TCMalloc或jemalloc),并从malloc
调用setenv
直接将严重限制这一点。
RIP相对寻址不会更好地工作
IP相对调用(即直接调用)会更快,更有效,但是对于符号插入完全不起作用。P.S。至少GLIBC对于用户提供的
mmap
没有类似的规定,因此直接进行mmap
呼叫。这实际上给想要通过插入mmap
和munmap
来准确说明该过程中使用的所有内存的人带来了问题。
以上是关于内部libc函数调用必须通过.plt的主要内容,如果未能解决你的问题,请参考以下文章
Android 逆向Android 进程注入工具开发 ( 注入代码分析 | 远程调用 目标进程中 libc.so 动态库中的 mmap 函数 一 | mmap 函数简介 )