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

2024-02-03

我有一个 16 位 MPU,其大小与 x86_16 不同size_t, ptrdiff_t等等。任何人都可以给我有关如何在 Frama-C 中为我的 MPU 自定义机器依赖性的详细信息和明确说明吗?


目前无法直接从命令行执行此操作:您必须编写一个小的 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

然后,您将能够以这种方式启动 Frama-C 以使用新的 machdep:

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

如果您想让新的 machdep 永久可用,您可以将其设为 Frama-C 插件。为此,您需要一个Makefile的形式如下:

FRAMAC_SHARE:=$(shell frama-c -打印共享路径)

PLUGIN_NAME=Custom_machdep
PLUGIN_CMO=my_machdep

include $(FRAMAC_SHARE)/Makefile.dynamic

my_machdep必须是你的名字.ml文件。请务必选择不同的名称PLUGIN_NAME。然后,创建一个空的Custom_machdep.mli file (touch Custom_machdep.mli应该可以解决问题)。然后,make && make install应该编译并安装插件,以便 Frama-C 自动加载。您可以通过启动来验证这一点frama-c -machdep help应该输出my_machdep在已知的马赫德普名单中。

UPDATE如果您使用 Frama-C 标准库中的一些标头,您还必须更新$(frama-c -print-share-path)/libc/__fc_machdep.h为了定义适当的宏(与limits.h and stdint.h大多)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Frama-C 中自定义机器依赖? 的相关文章

随机推荐

  • 用插值颜色填充阿基米德螺线之间的区域 - Matplotlib

    我想绘制如图所示的各种螺旋 一个螺旋在其他螺旋内部 假设我有三个螺旋 S1 S2 和 S3 我想填充连续螺旋之间的区域 即 S1 和 S2 S2 和 S3 之间的区域 最后是 S3 和 S1 之间的区域 我尝试了多种方法来解决以下两个问题
  • 取消列出数据框中已列出的列

    我有一个包含多个级别的列表 我希望将数据级别转换为数据帧 其中变量 chr 折叠为单个字符串 myList lt list total reach list 4 data list list reach 2 chr list A B C n
  • HTML 5 音频 .play() 在移动设备上的延迟

    我刚刚使用 socket io 构建了一个实时应用程序 其中 主 用户可以在接收设备 桌面浏览器 移动浏览器 上触发声音 该主用户会看到声音文件列表 并且可以在声音文件上单击 播放 音频播放在浏览器上是即时的 然而 在移动设备上 会出现 0
  • 无法在ExtJs中发送参数Ajax

    我在 View Extjs 中有代码 这是代码 var storeTree Ext create Ext data TreeStore proxy type ajax method POST url data newoss get pake
  • 使用或不使用“new”关键字创建 Mongoose 模式?

    我在网上看到的大多数例子都是这样做的 var UserSchema new mongoose Schema name String age String 然而 最近我发现一本书做了上述 但没有 new 关键字 var UserSchema
  • WCF Rest ERR_CONNECTION_RESET 响应不大

    错误代码绝对是可怕的 ERR CONNECTION RESET 有很多原因 我在其他问题上发现的原因与大型 Web 服务调用的 MaxRequestLength 太小有关 不过 我返回的数据只有几 kB 所以这不是问题 这是我的界面代码 W
  • 如何将 prettier 配置添加到 eslint 配置中?

    请注意 我不希望在我的 JS 项目中使用分号 Youtube 视频 https www youtube com watch v KfVPVmORnL4 我尝试在 eslintrc cjs 文件中禁用它 但奇怪的是semi 0无法禁用丢失警告
  • 如何在新进程中运行函数?

    现在我处于进程的线程之一A 我需要创建新流程B在当前线程中 并在进程中运行B功能MyFunc 我该怎么做 我找到了如何从当前进程创建子进程 click http msdn microsoft com en us library window
  • jqgrid - 添加新行并禁用restoreRow功能

    如果我要添加新行并且启用自动编辑新添加的行 那么我想执行验证并通过 ENTER 按钮保存行 但我不想通过 ESC 按钮恢复行 因为我设置了required true按所有字段 如果新添加的行将至少有一个字段为空 则按 ESC 按钮 rest
  • 如何将动态组件放入容器中

    我想创建动态组件并将这些组件的视图插入到容器中 我认为这可以通过以下方式实现视图容器引用 https angular io docs ts latest api core index ViewContainerRef class html
  • TypeError C 是未定义的数据表

    我试图将使用 ajax 获得的一些数据渲染到数据表中 但似乎我丢失了一些东西 因为它显示错误 TypeError c is undefined 我读过这篇文章 数据表类型错误 c 未定义 https stackoverflow com qu
  • 无论如何要将 Owin HTTPS 限制为 TLS 1.2?

    我想将我的 Webapi 锁定为 TLSv1 2 因此不允许使用 TLSv1 1 等 我看到了以下帖子 但它似乎只与 ASP NET Core 相关 有什么方法可以将 ASP NET Core 2 0 HTTPS 限制为 TLS 1 2 h
  • 无法使用 no_std/lang_items 编译 Rust

    我正在尝试建立一个非常类似于的项目dueboot https github com jensnockert dueboot 即嵌入式 ARM 上的 Rust 现在 我只完成了 Rust 代码的编译 但无法编译它 我基本上完全从该项目中复制了
  • IOS企业应用无法安装请稍后再试

    I know this question has been asked a lot on SO however I can ensure that my case is different I am unable to install an
  • 两点碰撞法线

    我正在尝试计算两点的碰撞法线 我需要这个碰撞响应方程来计算新的角速度和线速度 例如 当两个 2d 或 3d 盒子的角相互碰撞时 就会发生这种情况 他们的碰撞正常情况是怎样的 现在 在顶点和面碰撞的情况下 碰撞法线将只是面的法线 它是未定义的
  • 用于文件引用的c# xml代码注释

    xml代码注释中有文件引用的标签吗 该文件是一个sql脚本文件 只是想知道是否有比这样更好的方法
  • 通过 $resource angularjs 获取条件数据

    我正在使用 resource 服务进行增删改查操作 现在我想获取诸如开始日期为今天的约会之类的条件的数据 我正在通过以下方式获取所有数据 vm appointments AppointmentsService query 我的服务代码是 f
  • 过滤包含特定字符串的行

    我必须使用包含字符串的行作为标准来过滤数据框RTB 我在用着dplyr d del lt df gt group by TrackingPixel gt summarise MonthDelivery as integer sum Reve
  • 警告:文本内容不匹配。服务器:“我出去了” 客户端:“我进来了” div

    我在用着universal cookie在 Next js 项目中 这是在控制台中返回警告的简单代码 import React useState from react import Cookies from universal cookie
  • 如何在 Frama-C 中自定义机器依赖?

    我有一个 16 位 MPU 其大小与 x86 16 不同size t ptrdiff t等等 任何人都可以给我有关如何在 Frama C 中为我的 MPU 自定义机器依赖性的详细信息和明确说明吗 目前无法直接从命令行执行此操作 您必须编写一