在共享库(.so)和命令之间进行区分

时间:2014-03-28 16:27:01

标签: exec shared-libraries strstr

我试图判断他们给我的参数是一个共享库还是一个命令,我命令用该特定命令加载库或exec。

现在我要做的是:

if(strstr(argv[1],".so")!=NULL){
  //Load library etc...
}
else
  exec(argv[1],&argv[1],NULL);
  perror("exec");
  exit(1);

但这似乎是错误的,因为如果论证是" ./ lib.so"它尝试exec(./ lib.so)。

提前谢谢。

1 个答案:

答案 0 :(得分:0)

您的else分支仅包含exec命令。 perrorexit是无条件的,无论如何都会被执行。除此之外,字符串检查正常工作(除非您有自定义(和不正确)strstr实现)。

正确的版本是

else {
  exec(argv[1],&argv[1],NULL);
  perror("exec");
  exit(1);
}