【问题标题】:Why the function sleep() can not work when the klee execute the Objectfile?为什么 klee 执行 Objectfile 时函数 sleep() 不能工作?
【发布时间】:2014-03-07 02:03:19
【问题描述】:

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

/*
 * 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执行objectfile,线程不暂停,表示sleep()不起作用。 所以我在执行get_sign.o的时候加了一个参数,像这样klee --libc=uclibc get_sign.o,可惜线程还是没有挂起,而且klee报错,

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

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

【问题讨论】:

    标签: c++ c uclibc klee


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-12
      • 1970-01-01
      • 2017-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-18
      相关资源
      最近更新 更多