uClibc i386的backtrace()替换

uClibc i386的backtrace()替换,c,stack-trace,static-linking,uclibc,C,Stack Trace,Static Linking,Uclibc,我正在使用uClibc为Linux编译一个静态链接的i386二进制文件。用于生成地址堆栈跟踪的回溯库函数不可用。我需要一个替代品 和似乎都从libgcc\u c.so.1加载函数_Unwind\u Backtrace。但是,libgcc\u so.1在我的工具链中不可用,当我尝试直接使用_Unwind\u backtrace时,我只得到一帧的堆栈跟踪(最上面的一帧,来自调用_Unwind\u backtrace的函数) 在静态链接的i386 Linux可执行文件中,我需要一个可工作的backtr

我正在使用uClibc为Linux编译一个静态链接的i386二进制文件。用于生成地址堆栈跟踪的回溯库函数不可用。我需要一个替代品

和似乎都从
libgcc\u c.so.1
加载函数_Unwind\u Backtrace。但是,
libgcc\u so.1
在我的工具链中不可用,当我尝试直接使用_Unwind\u backtrace时,我只得到一帧的堆栈跟踪(最上面的一帧,来自调用_Unwind\u backtrace的函数)

在静态链接的i386 Linux可执行文件中,我需要一个可工作的backtrace或_Unwind_backtrace替换,该文件与uClibc链接,不加载任何.so文件(例如
libgcc_c.so.1
),它可以生成完整的堆栈跟踪(只有指令指针)。哪里有这样的实现

gcc
内置返回地址的参考生成如下代码:

    movl    0(%ebp), %eax
    movl    (%eax), %eax 
    movl    (%eax), %eax 
    movl    (%eax), %eax 
    movl    (%eax), %eax 
    movl    (%eax), %eax 
    movl    (%eax), %eax 
    movl    (%eax), %eax 
    movl    4(%eax), %eax
这只是盲目地沿着框架链走,没有任何边界检查或理智检查。我想使用比这更安全的东西


请注意,即使glibc backtrace(3)在使用gcc-fomit frame指针编译的函数中也不显示帧,我已经决定不需要它。

这有点不太成熟,但它应该与gcc(-compatible compilers)一起工作:@user3477950:Thx。它看起来像是内置的返回地址(I)只是盲目地沿着ebp链走。我已经更新了问题。