首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当klee执行Objectfile时,为什么sleep()函数不能工作?

当klee执行Objectfile时,为什么sleep()函数不能工作?
EN

Stack Overflow用户
提问于 2014-03-07 10:03:19
回答 1查看 123关注 0票数 0

昨天我问了一个关于stackoverflow的问题,但是我没有清楚地描述它,所以我改变了提问的方式,也许可以把问题说清楚。首先,我修改了klee提供的示例get_sign.c,将unistd.h包含在程序中,并调用函数sleep()使线程暂停,如下所示

代码语言:javascript
复制
/*
 * First KLEE tutorial: testing a small function
 */
#include <unistd.h>

int get_sign(int x) {
  if (x == 0)
     return 0;

  if (x < 0)
     return -1;
  else 
     return 1;
} 

int main() {
  int a;
  klee_make_symbolic(&a, sizeof(a), "a");
  sleep(10);
  return get_sign(a);
} 

我使用"llvm-gcc“编译get_sign.c,然后使用klee get_sign.o执行目标文件,线程没有暂停,这意味着sleep()不工作。所以我在执行get_sign.o时添加了一个参数,像这样的klee --libc=uclibc get_sign.o,不幸的是,线程仍然没有挂起,而且,klee报告了一个错误,

代码语言:javascript
复制
KLEE: ERROR: /home/lab/work/klee-uclibc/libc/signal/sigaction.c:58: failed external call: __syscall_rt_sigaction

KLEE: NOTE: now ignoring this error at this location

我能做些什么来解决这个问题?谢谢!

EN

回答 1

Stack Overflow用户

发布于 2014-03-07 11:29:31

看起来klee使用了可以使sleep比预期更早返回的信号,如http://www.delorie.com/gnu/docs/glibc/libc_445.html中所示。此参考还提供了绕过限制的方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22240052

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档