linux shm.c 中的修改
Modification in shm.c in linux
我想修改 Linux 中的 shm.c
,为此我做了以下操作:
- 已在我的设备上下载 Linux 源。
- 使用我下载的源代码重新编译 linux 内核。
- 经过多次验证,我确认现在运行确实是我的源代码
在我对 shmget()
或 shmat()
函数进行修改后,这些修改确实有效。
我怀疑我正在更改的函数不是实际的 shmget()
或 shmat()
函数,因为它们的名称是 shmget()
并且实现名称是 do_shmget()
等等。
所以我的问题是,当我执行 shmget()
或 shmat()
时,我怎么知道哪个是实际调用的函数,或者实现是否有可能使用名称 do_shmget()
左右?
代码参考:https://github.com/torvalds/linux/blob/master/ipc/shm.c
How can I know that which is the functions that is actually called when I do shmget()
or shmat()
?
用户space使用某些系统调用时调用的内核函数定义为
SYSCALL_DEFINE<N>(<name>, ...)
其中<N>
是系统调用参数的编号,<name>
是系统调用的名称,<name>
之后的参数是系统调用参数的类型和名称。
例如,对于shmget
系统调用,对应的函数定义是(ipc/shm.c):
SYSCALL_DEFINE3(shmget, key_t, key, size_t, size, int, shmflg)
{
return ksys_shmget(key, size, shmflg);
}
如您所见,系统调用函数调用 ksys_shmget()
。
我想修改 Linux 中的 shm.c
,为此我做了以下操作:
- 已在我的设备上下载 Linux 源。
- 使用我下载的源代码重新编译 linux 内核。
- 经过多次验证,我确认现在运行确实是我的源代码
在我对 shmget()
或 shmat()
函数进行修改后,这些修改确实有效。
我怀疑我正在更改的函数不是实际的 shmget()
或 shmat()
函数,因为它们的名称是 shmget()
并且实现名称是 do_shmget()
等等。
所以我的问题是,当我执行 shmget()
或 shmat()
时,我怎么知道哪个是实际调用的函数,或者实现是否有可能使用名称 do_shmget()
左右?
代码参考:https://github.com/torvalds/linux/blob/master/ipc/shm.c
How can I know that which is the functions that is actually called when I do
shmget()
orshmat()
?
用户space使用某些系统调用时调用的内核函数定义为
SYSCALL_DEFINE<N>(<name>, ...)
其中<N>
是系统调用参数的编号,<name>
是系统调用的名称,<name>
之后的参数是系统调用参数的类型和名称。
例如,对于shmget
系统调用,对应的函数定义是(ipc/shm.c):
SYSCALL_DEFINE3(shmget, key_t, key, size_t, size, int, shmflg)
{
return ksys_shmget(key, size, shmflg);
}
如您所见,系统调用函数调用 ksys_shmget()
。