【发布时间】:2019-07-03 08:04:10
【问题描述】:
我正在创建一个内核模块来拦截 unlink 命令并复制要取消链接的文件。现在,我拦截了 unlink 命令并尝试打印文件的路径,但它不能正常工作。
我有一个接收 char *path 参数的方法,我使用 printk 显示路径,但这会打印一些罕见的字符串,例如 "\xe07l\xd3\xf"
asmlinkage int hacked_sys_unlink(const char *pathname)
{
printk("RM_CATCHED: unlink( \"%s\" )\n", pathname);
return original_sys_unlink(pathname);
}
当我取消链接某个文件并使用 dmesg 命令时,我得到了这个:
[ 1531.847856] RM_CATCHED: unlink( "`g\xcfYMV" )
[ 1531.848071] RM_CATCHED: unlink( "\xe07l\xd3\xf" )
[ 1534.851623] RM_CATCHED: unlink( "\xe07l\xd3\xf" )
[ 1534.852091] RM_CATCHED: unlink( "" )
[ 1541.861962] RM_CATCHED: unlink( "" )
我怎样才能得到像/path/to/file.txt这样的文件的真实路径?
【问题讨论】:
-
我猜你需要以与original unlink system call相同的方式获取文件名
标签: c filenames kernel-module printk