簡體   English   中英

為什么在klee執行Objectfile時函數sleep()無法工作?

[英]Why the function sleep() can not work when the klee execute the Objectfile?

昨天我問了關於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執行目標文件,線程不會暫停,這意味着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

我該怎么做才能解決這個問題? 謝謝!

http://www.delorie.com/gnu/docs/glibc/libc_445.html中所示,似乎klee使用的信號會使sleep比預期的更快返回 該參考資料還提供了解決限制的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM