Я пытаюсь запустить файл.
# !/usr/bin/en sh
CAFFEROOT=/root/caffe
export LD_LIBRARY_PATH=$CAFFEROOT/build/lib/:$LD_LIBRARY_PATH
./app --ip 1.1.0.0:8887 --workers 1 --timeout 20
но я получаю это сообщение об ошибке.
root@1b311ba128b3:~/sharedfolder/code# sh run.sh
*** buffer overflow detected ***: ./app terminated
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(+0x7329f)[0x7f58d08bd29f]
/lib/x86_64-linux-gnu/libc.so.6(__fortify_fail+0x5c)[0x7f58d095887c]
/lib/x86_64-linux-gnu/libc.so.6(+0x10d750)[0x7f58d0957750]
./app[0x43dcfb]
./app[0x43e15c]
./app[0x40cdcf]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf5)[0x7f58d086bf45]
./app[0x40d63f]
======= Memory map: ========
00400000-004c7000 r-xp 00000000 08:12 5513936 /root/sharedfolder/code/app
006c6000-006c7000 r--p 000c6000 08:12 5513936 /root/sharedfolder/code/app
006c7000-006c8000 rw-p 000c7000 08:12 5513936 /root/sharedfolder/code/app
006c8000-006c9000 rw-p 00000000 00:00 0
0187d000-018fb000 rw-p 00000000 00:00 0 [heap]
Я не уверен, что это значит? Любые идеи относительно того, как я могу подойти к этому, могут быть полезны. Заранее спасибо
Пожалуйста, покажите соответствующий код. Также см. Как создать минимальный, полный и проверяемый пример.
Файл приложения немного длинноват, позвольте мне попробовать отладить это





GDB был бы моим инструментом goto для этого. Что-то типа
# !/usr/bin/en sh
CAFFEROOT=/root/caffe
export LD_LIBRARY_PATH=$CAFFEROOT/build/lib/:$LD_LIBRARY_PATH gdb ./app --ip 1.1.0.0:8887 --workers 1 --timeout 20
... тогда
run
Вот хороший трюк, чтобы увидеть, как выполняются строки вплоть до segfault:
Запустите gdb, как указано выше, затем:
set logging on
break main
run
while 1
step
end
... тогда след находится в gdb.txt
Спасибо, позволь мне это проверить.
./app terminatedПереполнение буфера происходит в приложении, а не в сценарии. Вам нужно отладить приложение или переписать приложение без segfault. Вы можете использоватьdbg,straceилиvalgrindили аналогичные утилиты для отладки вашего приложения.