- 尋找內核內存中系統調用表的內存地址sys_call_table ,調換該內存中某個函數地址
- 通過部分系統文件 :more /boot/System.map-4.15.0-66-generic (4.15.0-66-generic是內核版本,可以通過uname -r查看)
asmlinkage long (*real_mkdir)(const char __user *pathname,umode_t mode);
asmlinkage long myself_mkdir(const char __user *pathname, umode_t mode)
{
....
}
write_cr0(read_cr0() & (~0x10000)); //關閉內存保護
real_mkdir = (void *)sys_call_table[__NR_mkdir]; //real_mkdir 原mkdir調用的系統調用函數,提前保存原函數。
sys_call_table[__NR_mkdir] = myself_mkdir; //將自定義的mkdir函數進行賦值給sys_call_table[__NR_mkdir] 。
write_cr0(read_cr0() | 0x10000); //開啓內存保護