gpt4 book ai didi

c++ - 为什么当klee执行Objectfile时sleep()函数不能工作?

转载 作者:行者123 更新时间:2023-11-30 17:37:58 25 4
gpt4 key购买 nike

昨天我在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

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

最佳答案

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

关于c++ - 为什么当klee执行Objectfile时sleep()函数不能工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22240052/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com