首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在lli (LLVM)中使用我的地址杀菌剂?

如何在lli (LLVM)中使用我的地址杀菌剂?
EN

Stack Overflow用户
提问于 2019-01-12 05:25:07
回答 1查看 449关注 0票数 1

我想运行一个带有地址清除器参数的bitcode,但是我有一个问题,如果我运行它,就会发生分段错误。

代码语言:javascript
复制
$cat sample.c
#include <stdlib.h>
void *p;
int main() {
  p = malloc(7);
  return 0;
}

$clang -emit-llvm -fsanitize=address -c -g sample.c

$lli sample.bc
Stack dump:
0.  Program arguments: lli sample.bc
0  lli                      0x000000010c112d9c llvm::sys::PrintStackTrace(llvm::raw_ostream&) + 37
1  lli                      0x000000010c11319e SignalHandler(int) + 192
2  libsystem_platform.dylib 0x00007fff603e2b3d _sigtramp + 29
3  libsystem_platform.dylib 000000000000000000 _sigtramp + 2680280288
4  lli                      0x000000010be3ff74 llvm::ExecutionEngine::runStaticConstructorsDestructors(llvm::Module&, bool) + 310
5  lli                      0x000000010beac842 llvm::MCJIT::runStaticConstructorsDestructors(bool) + 388
6  lli                      0x000000010bb715c6 main + 8866
7  libdyld.dylib            0x00007fff601f7ed9 start + 1
Segmentation fault: 11
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-13 11:24:24

净化代码需要特殊的运行时支持,这是在Asan运行时库中实现的。默认情况下,lli不加载这个库(因为用户通常不需要它),所以您需要通过LD_PRELOAD=libasan.so.VER显式地请求它。注:libasan.so是GCC的惯例,对于Clang来说,您可能需要一些类似libclang_rt.asan.XXX的东西。您可以通过以下方法确定完整的库路径

代码语言:javascript
复制
GCC_ASAN_PRELOAD=$(gcc -print-file-name=libasan.so)
CLANG_ASAN_PRELOAD=$(clang -print-file-name=libclang_rt.asan-x86_64.so)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54157018

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档