- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 lli
来解释/JIT 编译位代码文件 a.bc
,该文件使用共享对象 afl-llvm 中定义的函数-rt.so
。当我尝试像这样使用 lli 时
lli -dlopen ./afl-llvm-rt.so a.bc
我得到:
PLEASE submit a bug report to https://bugs.llvm.org/ and include the crash backtrace.
Stack dump:
0. Program arguments: lli -load ./afl-llvm-rt.o a.bc
#0 0x00007fa2a620f833 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/lib/x86_64-linux-gnu/libLLVM-12.so.1+0xa99833)
#1 0x00007fa2a620dbe0 llvm::sys::RunSignalHandlers() (/lib/x86_64-linux-gnu/libLLVM-12.so.1+0xa97be0)
#2 0x00007fa2a620fe65 (/lib/x86_64-linux-gnu/libLLVM-12.so.1+0xa99e65)
#3 0x00007fa2a57683c0 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x153c0)
zsh: segmentation fault (core dumped) lli -load ./afl-llvm-rt.o a.bc
进一步调查 gdb
发现函数地址没有设置:
> gdb lli
(gdb) r -load ./afl-llvm-rt.o a.bc
Starting program: /usr/bin/lli -load ./afl-llvm-rt.o a.bc
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Program received signal SIGSEGV, Segmentation fault.
0x0000000000000000 in ?? ()
(gdb) bt
#0 0x0000000000000000 in ?? ()
#1 0x00007ffff7fca021 in sancov.module_ctor_trace_pc_guard ()
#2 0x00007ffff4f46118 in llvm::MCJIT::runFunction(llvm::Function*, llvm::ArrayRef<llvm::GenericValue>) () from /lib/x86_64-linux-gnu/libLLVM-12.so.1
#3 0x00007ffff4ef9a57 in llvm::ExecutionEngine::runStaticConstructorsDestructors(llvm::Module&, bool) () from /lib/x86_64-linux-gnu/libLLVM-12.so.1
#4 0x00007ffff4f4587f in llvm::MCJIT::runStaticConstructorsDestructors(bool)
() from /lib/x86_64-linux-gnu/libLLVM-12.so.1
#5 0x000000000041391b in main ()
但是,如果我像往常一样编译文件,使用 clang a.bc ./afl-llvm-rt.so
,输出的可执行文件工作正常。
如何使 lli
动态链接 a.bc
与 afl-llvm-rt.so
?
编辑:我将 afl-llvm-rt.so
编译为一个 LLVM IR 文件,然后我使用了 llvm-link a.bc afl-llvm-rt.bc -o result.bc
将它们链接在一起。之后,我尝试了 lli result.bc
,它给出了以下内容:
ocelaiwo@E490:~/Misc/ff> lli result.bc
PLEASE submit a bug report to https://bugs.llvm.org/ and include the crash backtrace.
Stack dump:
0. Program arguments: lli result.bc
#0 0x00007efc8d3d9833 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/lib/x86_64-linux-gnu/libLLVM-12.so.1+0xa99833)
#1 0x00007efc8d3d7be0 llvm::sys::RunSignalHandlers() (/lib/x86_64-linux-gnu/libLLVM-12.so.1+0xa97be0)
#2 0x00007efc8d3d9e65 (/lib/x86_64-linux-gnu/libLLVM-12.so.1+0xa99e65)
#3 0x00007efc8c9323c0 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x153c0)
zsh: segmentation fault (core dumped) lli result.bc
但是如果我 clang result.bc -o result
,result
可执行文件执行得很好。
最佳答案
尝试对 lli 的 --load
选项,如回答 here .使用 glib 库的示例代码:
lli --load=/usr/lib/x86_64-linux-gnu/libglib-2.0.so my-bicode-file.bc
我还发现选项 -force-interpreter
是一个有用的调试提示,例如它可以显示缺少的符号:
LLVM ERROR: Could not resolve external global address: some_external_symbol
然后您可以调查该符号(例如函数)在您系统上的位置。
关于c - LLVM 解释器 (lli) 和共享对象加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63968275/
如何重定向 lli 输出(fprintf、cout)以将其作为变量获取或执行我的回调? 我已经查看了 /tools/lli/lli.cpp 并且据我所知代码由 ExecutionEngine 执行,而
我正在尝试使用 lli 来解释/JIT 编译位代码文件 a.bc,该文件使用共享对象 afl-llvm 中定义的函数-rt.so。当我尝试像这样使用 lli 时 lli -dlopen ./afl-l
我想使用 lli 3.4 计算在任何程序中动态执行的 LLVM 指令的数量。 我查了 this链接,但它没有提供任何与指令计数相关的信息。 最佳答案 在 LLVM 中没有内置的方法来做到这一点,AFA
我将 32 位 ARM 代码移植到 64 位 x86 并遇到以下错误: format '%lli' expects argument of type 'long long int', but argu
我有以下 rust 代码。 $ cat hello.rs fn main() { println!("Hello world!"); } $ rustc hello.rs; ./hello Hel
我正在尝试使用 LLVM/clang 的一个非常简单的示例,但似乎失败了。 我尝试以下操作: clang++ -emit-llvm -c -x c++ -o main.bc -isystem incl
我使用polybench内核。在polybench.c中,代码有一行如下: int ret = posix_memalign (&new, 32, num); 这一行给 lli 解释器带来了问题。
我有一个多文件 C++ 项目,是在 Makefile 的帮助下构建的。 CC和CXX相对于gcc和g++。现在我需要在 llvm (lli) 下尝试这个项目。我已经更换了 CC = gcc CXX =
这个问题已经有答案了: What is the difference between conversion specifiers %i and %d in formatted IO functions
我正在尝试学习一些关于 LLVM IR 的知识,尤其是 rustc 输出的内容。即使是一个非常简单的案例,我也遇到了一些麻烦。 我将以下内容放入源文件 simple.rs: fn main() {
在 ubuntu-14.10_amd64 中,我通过 clang/llvm-3.4 编译了 smplayer-14.9.0.6690。我更改了 src 中的 Makefile,例如: CC=clang
在 Linux(Debian) 上使用 clang++ -S -emit-llvm main.cpp && lli main.ll 运行以下代码 #include int main () { r
如何使用 itext 获取单词在 pdf 中的 llx、lly、urx、ury 位置。这里的要求是在pdf中需要在word上面加上数字签名。这个词不是一个固定的位置,这个词可能出现在第一页或第二页或同
我想在 llvm 的 IR 解释器 lli 中运行 RxCpp 示例。 不幸的是,在 lli 中运行任何 RxCpp 示例都失败了: git clone https://github.com/Reac
我是一名优秀的程序员,十分优秀!