当前位置: 技术问答>linux和unix
在内核的某个函数中,如何能知道是哪个用户空间的函数调用了它,以及这个用户空间函数所在的文件?
来源: 互联网 发布时间:2017-02-11
本文导语: 比如现在程序执行到了位于内核中的/fs/read_write.c文件的lseek的实现函数中,我想在内核的lseek的实现函数中获取当前到底是用户空间的哪个函数调用了我,这个是否有办法可以实现? 即,我在用户空间编写了一个程序...
比如现在程序执行到了位于内核中的/fs/read_write.c文件的lseek的实现函数中,我想在内核的lseek的实现函数中获取当前到底是用户空间的哪个函数调用了我,这个是否有办法可以实现?
即,我在用户空间编写了一个程序,里面用到了lseek函数,那么这个函数最终肯定会到内核中去调用lseek系统调用。那么我能不能在内核中知道如下的信息:/XXX/libc.so.6中的lseek函数经过若干层调用,最终调用到了内核中的lseek的系统调用实现?
即,我在用户空间编写了一个程序,里面用到了lseek函数,那么这个函数最终肯定会到内核中去调用lseek系统调用。那么我能不能在内核中知道如下的信息:/XXX/libc.so.6中的lseek函数经过若干层调用,最终调用到了内核中的lseek的系统调用实现?
|
查询调了哪些系统函数可以用strace
你这个估计不行。
否则应用程序可以很轻松地被逆向破解。
你这个估计不行。
否则应用程序可以很轻松地被逆向破解。
|
进入系统调用时,保存起来的寄存器中应该有用户的执行地址的。那个,不过在内核拿到用户地址应该也没多大用。
正确的应该在用户态调用 ptrace hook你指定的函数,然后调用用户级的backtrace函数应该就可以了。
gdb好像可以写个脚本来实现这个功能的?
正确的应该在用户态调用 ptrace hook你指定的函数,然后调用用户级的backtrace函数应该就可以了。
gdb好像可以写个脚本来实现这个功能的?
|
如果你可以进入到内核,这个应该很容易知道的。