Linux提供了execl、execlp、execle、execv、execvp和execve等六个用以执行一个可执行文件的函数(统称为exec函数,其间的差异在于对命令行参数和环境变量参数的传递方式不同)。这些函数的第一个参数都是要被执行的程式的路径,第二个参数则向程式传递了命令行参数,第三个参数则向程式传递环境变量。以上函数的本质都是调用在arch/i386/kernel/process.c文件中实现的系统调用sys_execve来执行一个可执行文件,该函数代码如下: as...
by torresliang - Linux文档专区 - 2010-01-04 09:18:46 阅读(1190) 回复(0)
Linux提供了execl、execlp、execle、execv、execvp和execve等六个用以执行一个可执行文件的函数(统称为exec函数,其间的差异在于对命令行参数和环境变量参数的传递方式不同)。这些函数的第一个参数都是要被执行的程序的路径,第二个参数则向程序传递了命令行参数,第三个参数则向程序传递环境变量。以上函数的本质都是调用在arch/i386/kernel/process.c文件中实现的系统调用sys_execve来执行一个可执行文件,该函数代码如下: ...
内核处理execve系统调用的内核函数是sys_execve, asmlinkage int sys_execve(struct pt_regs regs) { int error; char * filename; filename = getname((char __user *) regs.ebx); error = PTR_ERR(filename); if (IS_ERR(filename)) goto out; error = do_execve(filename, (char __user * __user *) regs.ecx, (char __user * __user *) regs.edx, ®s); if (error == 0) { task_lock(current);...
内核处理execve系统调用的内核函数是sys_execve, asmlinkage int sys_execve(struct pt_regs regs) { int error; char * filename; filename = getname((char __user *) regs.ebx); error = PTR_ERR(filename); if (IS_ERR(filename)) goto out; error = do_execve(filename, (char __user * __user *) regs.ecx, (char __user * __user *) regs.edx, ®s); if (error == 0) { task_lock(current);...
转载,原文出处: http://blog.chinaunix.net/u/548/showart.php?id=386423 关于截获execve等系统调用,很久以来存在一个问题:新函数不能直接调旧函数, 否则导致stack不平衡,出错。 曾经有高人用一串的汇编代码去平衡堆栈, 但对于偶们这些汇编菜鸟来说, 连阅读都很困难。 而且, 好像gcc4.x下不支持 它使用的一种寻址方式了。 这次使用kprobes来直接找do_execve,直接照搬sys_execve的实现代码。 至于LICENSE的问题,谁用谁负...
关于截获execve等系统调用,很久以来存在一个问题:新函数不能直接调旧函数, 否则导致stack不平衡,出错。 曾经有高人用一串的汇编代码去平衡堆栈, 但对于偶们这些汇编菜鸟来说, 连阅读都很困难。 而且, 好像gcc4.x下不支持 它使用的一种寻址方式了。 这次使用kprobes来直接找do_execve,直接照搬sys_execve的实现代码。 至于LICENSE的问题,谁用谁负责,我只是从技术角度上说可以这样做。(我的代码是GPL的) 只截获了open和exe...
关于截获execve等系统调用,很久以来存在一个问题:新函数不能直接调旧函数, 否则导致stack不平衡,出错。 曾经有高人用一串的汇编代码去平衡堆栈, 但对于偶们这些汇编菜鸟来说, 连阅读都很困难。 而且, 好像gcc4.x下不支持 它使用的一种寻址方式了。 这次使用kprobes来直接找do_execve,直接照搬sys_execve的实现代码。 至于LICENSE的问题,谁用谁负责,我只是从技术角度上说可以这样做。(我的代码是GPL的) 只截获了open和...
用execve 调用shell 的 less 命令以后 不能用上下键翻页,而其他的exec函数都好用! 但是用execve调用shell 的 more 命令正常使用。 哪位大虾知道这是怎么回事啊!!
用execve 调用shell 的 less 命令以后 不能用上下键翻页,而其他的exec函数都好用! 但是用execve调用shell 的 more 命令正常使用。 哪位大虾知道这是怎么回事啊!!
通过封装系统调用export出符号表的方法进行系统调用拦截,拦截read,write以及kill这些系统调用都没有问题,但是拦截execve和fork后,系统就hang,进而系统重启。 不知道论坛里各位大虾有遇到这种情况的没,求指点。谢谢。
在linux下,使用LKM截获execve系统调用,编写新的new_execve系统调用时,为什么出现“段错误”呢?就算new_execve函数体内什么都不做,只返回原 来的execve系统调用,也会出现“段错误”。而截获其它的系统调用如open, read等都没问题。不知是不是new_execve函数参数传递有什么不 对的地方,请各位多多帮忙。多谢多谢了。 代码是这样的: …… …… int new_execve(const char *filename,const char *argv[],const ...