0

在 gcc 上运行地址清理程序时如何获取行号?

我有一个简单的程序来测试地址过滤器(缓冲区溢出):

#include<stdio.h>


int main(void)
{
    int A[10] = {0};
    A[10] = 1;

}

运行地址清理程序 (gcc) 时:

gcc b_oflow.c -fsanitize=address -g 
==7961==ERROR: AddressSanitizer: stack-buffer-overflow on address 0x7fff90e56898 at pc 0x564401bc42be bp 0x7fff90e56840 sp 0x7fff90e56838
WRITE of size 4 at 0x7fff90e56898 thread T0
    #0 0x564401bc42bd in main (/home/victor/Documents/code/C/lisp/src/a.out+0x12bd)
    #1 0x7fbeb1a7009a in __libc_start_main ../csu/libc-start.c:308
    #2 0x564401bc40b9 in _start (/home/victor/Documents/code/C/lisp/src/a.out+0x10b9)

Address 0x7fff90e56898 is located in stack of thread T0 at offset 72 in frame
    #0 0x564401bc4184 in main (/home/victor/Documents/code/C/lisp/src/a.out+0x1184)

我怎样才能输出行号?我尝试了以下问题的答案: 如何使用 clang 的 -fsanitize=address 在调试输出中获取行号? 以及 如何使用 clang 的 -fsanitize=address 在调试输出中获取行号? 但不知道该怎么做,我想打印运行可执行文件时发生溢出的行。

4

0 回答 0