Как я могу получить нумерацию строк при запуске дезинфицирующего средства адресов на 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's -fsanitize=address? и Как мне получить номера строк в выводе отладки с помощью clang's -fsanitize=address? но не знаю, что делать сделать, я хотел напечатать строку, в которой произошло переполнение при запуске исполняемого файла.
-g
как к компиляции в объектный файл, так и к процессу компоновки. - person Jonathan Leffler   schedule 26.07.2021-g
я получаю номера строк. Только если я добавлю параметр-g0
(чтобы явно отключить всю отладочную информацию), я не получу его. Опция-g
действительно должна гарантировать, что вы получите номер строки. - person Some programmer dude   schedule 26.07.2021../csu/libc-start.c:308
- Используете ли вы LD_PRELOAD? Или указать пользовательскую конфигурацию с пользовательским запуском? Ваш компилятор должен быть связан сlibc.so.6
. Пожалуйста, опубликуйте выводgcc -v ....
. Попробуйте скомпилировать и запустить в новой свежей оболочке. Пожалуйста, попробуйте скомпилировать сenv -i PATH=$PATH gcc ...
, а затем запустить сenv -i ./a.out
?? - person KamilCuk   schedule 26.07.2021