[英]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.