比如我想要找到execve
在内核中的实现代码。我在源码中搜索sys_execve
,在代码中只能找到头文件声明,系统调用注册的相关代码,找不到函数体。其他系统调用也都有这个问题。请问该如何寻找呢?
我已经在StackOverflow 的问题里找到答案了
Syscall function names, which are always sys_something, are generated by funny preprocessor macros (SYSCALL_DEFINEn where n is the number of arguments).
As you can see (very close to do_sys_open):
SYSCALL_DEFINE3(open, const char __user *, filename, int, flags, umode_t, mode)
{
long ret;
....
This is the code of open syscall.
1
whatot 2015-08-28 14:29:25 +08:00 1
搜索 do_execve 看看,我也是 google 到的。
linux-4.1 fs/exec.c:1704 SYSCALL_DEFINE3 (execve, const char __user *, filename, const char __user *const __user *, argv, const char __user *const __user *, envp ) { return do_execve (getname (filename ), argv, envp ); } |
2
lynx 2015-08-28 14:51:48 +08:00
google: execve site:lxr.free-electrons.com/source
|
3
liwei 2015-08-28 15:09:35 +08:00
make ARCH=x86 -j2 tags cscope
vim -t sys_execve |
4
oska874 2015-08-28 17:31:03 +08:00
arm 的我知道: arch/arm/kernel/call.S 里面有系统调用列表,然后你就可以在内核根目录 ctags -R ,在 vim 里面 tags <func_name> 了。
|