Llvm KLEE警告未定义函数
我已经将Llvm KLEE警告未定义函数,llvm,libraries,llvm-gcc,klee,Llvm,Libraries,Llvm Gcc,Klee,我已经将Wireshark编译成LLVM,然后我继续链接一些库,这些库我也编译成LLVM 我链接的库是libwsutil、libz和libpcap。然而,KLEE仍然对libpcap的未定义函数发出警告 我使用以下标志编译了libpcap: CC="llvm-gcc" CFLAGS="-flto -c" AR="llvm-ar" LD="llvm-ld" 这些标志也适用于其他库 原因可能是什么 KLEE: WARNING ONCE: function "capture_loop_dispatc
Wireshark
编译成LLVM
,然后我继续链接一些库,这些库我也编译成LLVM
我链接的库是libwsutil
、libz
和libpcap
。然而,KLEE仍然对libpcap
的未定义函数发出警告
我使用以下标志编译了libpcap:
CC="llvm-gcc" CFLAGS="-flto -c" AR="llvm-ar" LD="llvm-ld"
这些标志也适用于其他库
原因可能是什么
KLEE: WARNING ONCE: function "capture_loop_dispatch" has inline asm
KLEE: WARNING ONCE: function "__user_main" has inline asm
KLEE: WARNING: undefined reference to function: __ctype_b_loc
KLEE: WARNING: undefined reference to function: __xstat64
KLEE: WARNING: undefined reference to function: bpf_image
KLEE: WARNING: undefined reference to function: cap_free
KLEE: WARNING: undefined reference to function: cap_init
KLEE: WARNING: undefined reference to function: cap_set_flag
KLEE: WARNING: undefined reference to function: cap_set_proc
...
...
KLEE: WARNING: undefined reference to function: lseek64
KLEE: WARNING: undefined reference to function: pcap_activate
KLEE: WARNING: undefined reference to function: pcap_breakloop
KLEE: WARNING: undefined reference to function: pcap_can_set_rfmon
KLEE: WARNING: undefined reference to function: pcap_close
KLEE: WARNING: undefined reference to function: pcap_compile
KLEE: WARNING: undefined reference to function: pcap_create
KLEE: WARNING: undefined reference to function: pcap_datalink
KLEE: WARNING: undefined reference to function: pcap_datalink_name_to_val
KLEE: WARNING: undefined reference to function: pcap_datalink_val_to_description
KLEE: WARNING: undefined reference to function: pcap_datalink_val_to_name
KLEE: WARNING: undefined reference to function: pcap_dispatch
KLEE: WARNING: undefined reference to function: pcap_findalldevs
KLEE: WARNING: undefined reference to function: pcap_free_datalinks
KLEE: WARNING: undefined reference to function: pcap_freealldevs
KLEE: WARNING: undefined reference to function: pcap_freecode
KLEE: WARNING: undefined reference to function: pcap_get_selectable_fd
KLEE: WARNING: undefined reference to function: pcap_geterr
KLEE: WARNING: undefined reference to function: pcap_lib_version
KLEE: WARNING: undefined reference to function: pcap_list_datalinks
KLEE: WARNING: undefined reference to function: pcap_lookupnet
KLEE: WARNING: undefined reference to function: pcap_open_live
KLEE: WARNING: undefined reference to function: pcap_set_buffer_size
KLEE: WARNING: undefined reference to function: pcap_set_datalink
KLEE: WARNING: undefined reference to function: pcap_set_promisc
KLEE: WARNING: undefined reference to function: pcap_set_rfmon
KLEE: WARNING: undefined reference to function: pcap_set_snaplen
KLEE: WARNING: undefined reference to function: pcap_set_timeout
KLEE: WARNING: undefined reference to function: pcap_setfilter
KLEE: WARNING: undefined reference to function: pcap_snapshot
KLEE: WARNING: undefined reference to function: pcap_stats
KLEE: WARNING: undefined reference to function: pcap_statustostr
KLEE: WARNING: undefined reference to function: prctl
阅读KLEE在
默认情况下,KLEE在关闭的程序(不使用任何
外部代码(如C库函数)。然而,如果你想
使用KLEE运行您希望启用KLEE POSIX的实际程序
运行时,它构建在uClibc库之上
因此KLEE不能默认使用C库函数,如果您使用带有选项
libc=uclibc
的KLEE,KLEE会将外部函数链接到您的IR代码中,并执行IR代码您是为32位还是64位体系结构编译的?可能丢失的pcap函数的签名使用64位整数,就像丢失的lseek64一样。我正在使用32位机器编译所有内容。这可能是问题的根源。尝试暗示它使用32位变体(-D…
选项?)。您可能需要查看源代码以了解如何做到这一点;搜索像#ifdef…
这样的指令可能是一个好的开始…我查看了源代码,发现了#define lseek64 lseek
,因此我假设有几行代码用于兼容性。删除它们应该可以做到这一点,但对于libpcap
来说似乎不是问题。