首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在LLVM LLI解释器上禁用内存异常

在LLVM LLI解释器上禁用内存异常
EN

Stack Overflow用户
提问于 2019-11-12 15:05:50
回答 1查看 56关注 0票数 0

有没有办法在运行lli解释器时禁用异常?我想禁止下面的程序崩溃,这样我就可以做内存分析了--它当前在一个free- after -free错误后中止:

我正在使用的程序是:

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int *ptr;
    int *ptr2;
    int z = 10;
    int n = 5;

    ptr = (int*)malloc(n * sizeof(int));
    // ptr2 = (int*)malloc(z * sizeof(int));

    free(ptr);
    free(ptr);

    return 0;
}

然后我将其转换为LLVM IR,然后使用lli进行解释:

代码语言:javascript
复制
$ /usr/local/opt/llvm/bin/lli example_opt.ll > out.txt
lli(23782,0x7fff9934a380) malloc: *** error for object 0x7f9bee411780: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
Stack dump:
0.  Program arguments: /usr/local/opt/llvm/bin/lli example_opt.ll 
0  lli                      0x0000000103a76be8 llvm::sys::PrintStackTrace(llvm::raw_ostream&) + 37
1  lli                      0x0000000103a76fe6 SignalHandler(int) + 200
2  libsystem_platform.dylib 0x00007fff60c13f5a _sigtramp + 26
3  libsystem_c.dylib        0x00007fff6099290f __sfvwrite + 407
4  libsystem_c.dylib        0x00007fff609b11ae abort + 127
5  libsystem_malloc.dylib   0x00007fff60aaf8a6 free + 521
6  libsystem_malloc.dylib   0x0000000104c4e080 free + 18446603343269325283
7  lli                      0x000000010378708d llvm::MCJIT::runFunction(llvm::Function*, llvm::ArrayRef<llvm::GenericValue>) + 861
8  lli                      0x00000001037114e7 llvm::ExecutionEngine::runFunctionAsMain(llvm::Function*, std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > const&, char const* const*) + 1159
9  lli                      0x0000000103407a29 main + 8473
10 libdyld.dylib            0x00007fff60905015 start + 1
11 libdyld.dylib            0x0000000000000002 start + 18446603338896093166
Abort trap: 6
EN

回答 1

Stack Overflow用户

发布于 2019-11-14 16:36:17

lli工具使用实时编译作为执行LLVM代码的默认方法。在您的示例中也是如此-请参见调用堆栈中的llvm::MCJIT::runFunction()

第一步是使用解释器模式。

代码语言:javascript
复制
lli -force-interpreter example_opt.ll
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58813605

复制
相关文章

相似问题

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