如何在Frama-C中自定义机器依赖?

时间:2017-01-24 08:50:07

标签: frama-c

我有一个16位的MPU与x86_16的大小不同size_tptrdiff_t等等。任何人都可以给我详细说明如何在Frama-C中自定义机器依赖性我的MPU?

1 个答案:

答案 0 :(得分:6)

目前无法直接从命令行执行此操作:您必须编写一个小的OCaml脚本,该脚本将基本上定义一个新的Cil_types.mach(包含有关您的体系结构的必要信息的记录)并注册它通过File.new_machdep。假设您有一个文件my_machdep.ml看起来像这样:

let my_machdep = {
  Cil_types.sizeof_short = 2;
  sizeof_int = 2;
  sizeof_long = 4;
  (* ... See `cil_types.mli` for the complete list of fields to define *)
}

let () = File.new_machdep "my_machdep" my_machdep

然后您可以使用新的machdep启动Frama-C:

frama-c -load-script my_machdep.ml -machdep my_machdep [normal options]

如果你想让新的machdep永久可用,你可以把它变成Frama-C插件。为此,您需要以下Makefile形式:

FRAMAC_SHARE:= $(shell frama -c -print-share-path)

PLUGIN_NAME=Custom_machdep
PLUGIN_CMO=my_machdep

include $(FRAMAC_SHARE)/Makefile.dynamic

my_machdep必须是.ml文件的名称。请务必为PLUGIN_NAME选择其他名称。然后,创建一个空的Custom_machdep.mli文件(touch Custom_machdep.mli应该这样做)。之后,make && make install应该编译并安装插件,以便Frama-C自动加载它。您可以通过启动frama-c -machdep help来验证这一点,my_machdep应该在已知的machdep列表中输出$(frama-c -print-share-path)/libc/__fc_machdep.h

<强>更新 如果您使用Frama-C标准库中的某些标题,则还必须更新limits.h以定义适当的宏(主要与stdint.h和{{1}}相关)。