如何解决可以执行文件的GLIBC功能的完整列表execv,execve,fexecve,posix_spawn等
我正在编写一个LD_PRELOAD实用程序,该实用程序包装了对exec()类型函数的所有调用。
但是圣牛,有很多。到目前为止,我已经发现:
execv,execvp,execve,execvpe fexecve,execveat, execl,execlp,execle,execlpe, posix_spawn,posix_spawnp
在执行另一个程序的所有lib函数的某处是否有详尽的清单(不仅是这些函数之一的包装)?
作为示例,我刚刚发现IPC :: Open3使用的perl库不在上面的列表中,因此我看不到发生的exec。 (strace可以看到它,但是它声称上面列表中的所有内容都只是“ execve”,实际上并不正确。)
解决方法
至少在我的(Debian GNU / Linux)系统上,execve
系统调用来自Perl
调用execvp
:
#0 0x00007ffff7d35787 in execve () at ../sysdeps/unix/syscall-template.S:120
#1 0x00007ffff7d3603b in __execvpe_common (file=0x5555559ee710 "some",argv=0x5555558e31f0,envp=0x5555558c6980,exec_script=<optimized out>) at execvpe.c:136
#2 0x00005555556bcf50 in Perl_do_aexec5 ()
#3 0x00005555556b14ef in Perl_pp_exec ()
#4 0x0000555555652cf6 in Perl_runops_standard ()
#5 0x00005555555c6a6c in perl_run ()
#6 0x000055555559c472 in main ()
(gdb) fr 2
#2 0x00005555556bcf50 in Perl_do_aexec5 ()
(gdb) x/i $pc-5
0x5555556bcf4b <Perl_do_aexec5+427>: callq 0x55555559b2c0 <execvp@plt>
使用ltrace
还会确认:
ltrace -f --library=libc.so.6 perl foo.pl |& grep execv
[pid 1789012] perl->execvp(0x55cd3c4a4bc0,0x55cd3c3a28e0,0x7fff82e61770,0x7fd4f3317212) = 0xffffffff
...
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。