切片时将多个参数传递给C文件

时间:2014-10-06 18:48:06

标签: slice frama-c program-slicing

我的源代码中的主要方法a.c接受2个参数:一个是文件名,另一个是整数。我像下面这样运行:

      ./a.out filename1.txt 3

但是当我尝试使用frama-c切片时

       frama-c a.c filename1.txt 3 -slice-......

Framac抛出一个错误,说找不到文件3 ???

当我输入filename1.txt_3并在代码中单独提取它们时,我也尝试了其他选项,但即使这样,frama-c也不喜欢它。它抱怨它无法找到文件filename1.txt_3。

请告诉我在运行Frama C时如何向源发送多个参数

1 个答案:

答案 0 :(得分:1)

如果您的分析程序需要命令行参数,您通常需要编写void函数来构建参数argcargv并将它们传递给main()函数已分析的程序:

int analysis_main(void) {
  char *argv[] = { "myprogram", "filename1.txt", "3", 0 };
  return main(3, argv);
}

请注意,如果目标是拥有" filename1.txt"用作要使用fopen()打开的文件的名称,并使用fread()读取,如果文件的内容与程序的行为相关,则最好为这两个函数提供实现,在调用时返回所需的结果。

相反,如果分析程序的第一件事就是将argv[2]传递给strtol(),您可能希望实际简化程序的那一部分而不是为strtol()提供实现,其分析只会在没有必要的情况下引入复杂性。