- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对如何在结构上正确使用\valid 注释有一些疑问。
struct someStruct{
int size1;
int size2;
char *str1;
char *str2;
}
/*@
predicate validStruct(struct someStruct *p) =
\valid(p) &&
\valid(p->str1+(0..((p->size1)-1))) &&
\valid(p->str2+(0..((p->size2)-1)));
@*/
/*@
predicate validStruct(struct someStruct *p) =
// 16 bytes: 2 int * 4 bytes + 2 pointers* 4 bytes.
// Although may depend on implementation and system arch
\valid(p+(0..15) &&
\valid(p->str1+(0..((p->size1)-1))) &&
\valid(p->str2+(0..((p->size2)-1)));
@*/
\valid(p)
(其中
p
是指向结构的指针)确保它指向的结构的内存安全,而第二个我必须手动指定范围(考虑到内存字段的大小)
\valid(some_string+(0..strlen(some_string)))
用于确保这些特定内存位置的内存安全。
struct _IO_file {
int _IO_fileno; /* Underlying file descriptor */
_Bool _IO_eof; /* End of file flag */
_Bool _IO_error; /* Error flag */
};
typedef struct _IO_file FILE;
struct _IO_file_pvt {
struct _IO_file pub; /* Data exported to inlines */
struct _IO_file_pvt *prev, *next;
char *buf; /* Buffer */
char *data; /* Location of input data in buffer */
unsigned int ibytes; /* Input data bytes in buffer */
unsigned int obytes; /* Output data bytes in buffer */
unsigned int bufsiz; /* Total size of buffer */
enum _IO_bufmode bufmode; /* Type of buffering */
};
/*@
predicate valid_FILE(FILE *f) =
\valid(f) && f->_IO_fileno >= 0;
predicate valid_IO_file_pvt(struct _IO_file_pvt *f) =
\valid(f)
// buffer offset
&& f->buf == (char *)f + ((sizeof(*f) + 4*sizeof(void *) - 1)
& ~(4*sizeof(void *) - 1))
// 16K
&& f->bufsiz == 16384
&& 0 <= f->ibytes <= f->bufsiz
&& 0 <= f->obytes <= f->bufsiz
&& valid_FILE(&(f->pub))
&& (f->next != \null ==> \valid(f->next))
&& (f->prev != \null ==> \valid(f->prev))
// 16384 + 32 (ungetc_slop)
&& \valid(f->buf+(0..(f->bufsiz+32-1)))
// data points to address in valid buffer region
&& f->buf <= f->data < (f->buf + f->bufsiz + 32)
;
@*/
最佳答案
解决方案 1 显然是好的,因为它抽象了编译器和 Frama-C 中的 Cil 选择的内存布局。
解决方案 2 实际上是不正确的。您的范围 p+(0..15)
必须在 struct someStruct
类型的对象上使用指针算术来理解,而您实际上是在请求 p
指向一个区域,其中 16 * sizeof(struct someStruct)
字节有效。
对于标准内存布局,解决方案 2 的正确重构应该是
\valid(((char*)p)+(0..15))
\valid(p) <==> \valid(((char*)p)+(0..sizeof(*p))
(char*)p
变得多余,因为字符串已经是指向 char 的指针。因此,写作
valid(p+(0..strlen(p))
要求
p
指向内存的地方
strlen(p)+1
字节是有效的——但只是因为
p
有类型
char*
, 和
sizeof(char)=1
.
关于c - Frama-C/WP/ACSL 在结构上正确使用\valid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15710715/
我正在尝试在我正在处理的博客上使用类别帖子 (WP-CPL) 插件来按类别过滤“最近的帖子”。基本上,当有人点击博客上的类别名称时,我希望它显示该类别的帖子。这将通过 Life Is Simple 模
我的形象 我只想为某些用户隐藏特定页面。 function remove_menus(){ // get current login user's role $roles = wp_g
我的形象 我只想为某些用户隐藏特定页面。 function remove_menus(){ // get current login user's role $roles = wp_g
我为我的 wp 网站创建了一个简单的脚本,我正在尝试从 2 个表的 wp 数据库中获取正确的数据,这是代码, 当我显示“user_ref_id”列的结果重复多次时,这是代码 global $wpdb;
我安装了一个名为 Hide My WP 的插件来更改网站结构,但考虑到我使用的是自定义主题,它破坏了一些功能。所以我手动从plugins文件夹中删除了插件,但是从那以后我就无法访问/wp-admin/
我试图从头开始创建 WXR 文件(WordPress eXtended Rss)。 我的代码基于 XML/ wordpress生成的WXR文件并像这样开始: 我是这样开始的: $newxml =
我想将所有页面重定向到 http://www.expample2.com除了 wp-admin 和 wp-json。 例如,用户能够登录 http://www.example1.com/wp-admi
我使用 MAMP 在本地构建了一个快速的 WordPress 网站,然后将其 checkin SVN 存储库。然后我将其检查到我的开发服务器上。 除了运行 search and replace too
在搜索端点的 WP REST API (wp json) 中: https://www.example.com/wp-json/wp/v2/search?search=searchPhrase&_em
我正在使用这个 NGINX 规则来强制 WordPress 网站的尾部斜杠: rewrite ^([^.]*[^/])$ $1/ permanent; 但是这个规则给 Gutenberg 和 wp-j
在搜索端点的 WP REST API (wp json) 中: https://www.example.com/wp-json/wp/v2/search?search=searchPhrase&_em
我正在使用这个 NGINX 规则来强制 WordPress 网站的尾部斜杠: rewrite ^([^.]*[^/])$ $1/ permanent; 但是这个规则给 Gutenberg 和 wp-j
我想限制所有用户访问 WordPress 网站登录。 例如:假设我有 WordPress 网站域 example1.com,我想限制所有用户使用 example1.com/wp- 访问管理员登录adm
尝试实现这里讨论的技术, http://z9.io/2013/10/21/shiny-new-dynamic-content-wp-super-cache/ 进入使用 Genesis 框架的站点。我想
我试图在位于我的 WP 主题文件夹内的 PHP 文件中调用自定义 AJAX 函数,但是我无法让它检索输出。我认为问题在于将 WP 查询链接到主 WP 文件? $.ajax({ url: "../../
我正在编写一个 perl 脚本,用于将 Wordpress 安装从一个地方迁移到另一个地方。在这项工作中,我需要使用 wp-cli 调用从 wp-config 文件中获取 wordpress 数据库名
我最近更改了我的 WordPress 网站上的目录。我导出了数据库,搜索并替换了旧 URL 为新 URL,然后重新导入。该网站的前端工作正常,但任何页面的后端都需要近 15 秒才能加载。 从funct
我使用下面的代码通过类似的单词标签获取帖子但不起作用 $query = " SELECT * FROM $wpdb->posts , $wpdb->terms
我已经通过 DirectAdmin 在我的服务器上安装了 SSL 证书。这似乎运作良好。 我已将 wp_*_options 表中的 url 更改为 https://mydomain.nl 等。突然我的
我正在建立一个网站,使用 wordpress+buddypress(最新版本)。 在这个网站中,我有自己的自定义登录|注册|重置密码表单,我不想将它们链接到后端 wp-forms。 我已经阻止了所有用
我是一名优秀的程序员,十分优秀!