Pull to refresh
97
0
Борис Егоров @JIghtuse

Пользователь

Send message

Статья какая-то сумбурная, больше похожа на отзыв. А вот книга и серия курсов очень нравится, полезные навыки прививает.

Ад какой-то. Кажется, что с каждым годом всё больше подобных трюков применяют некоторые сайты.


Насчёт ссылки в заключении — я делал перевод первой статьи, здесь можно почитать.

Как и Cppcheck:
(error) Buffer is accessed out of bounds.

, как и AddressSanitizer компилятора:

Скрытый текст
=================================================================
==21454==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x60200000effd at pc 0x7f7182fd729b bp 0x7ffe039c1940 sp 0x7ffe039c10e8
WRITE of size 14 at 0x60200000effd thread T0
#0 0x7f7182fd729a (/lib64/libasan.so.3+0x5f29a)
#1 0x4008d1 in main /tmp/c.c:9
#2 0x7f7182bd2400 in __libc_start_main (/lib64/libc.so.6+0x20400)
#3 0x4007d9 in _start (/tmp/a.out+0x4007d9)

0x60200000effd is located 0 bytes to the right of 13-byte region [0x60200000eff0,0x60200000effd)
allocated by thread T0 here:
#0 0x7f718303ee60 in malloc (/lib64/libasan.so.3+0xc6e60)
#1 0x4008b7 in main /tmp/c.c:8
#2 0x7f7182bd2400 in __libc_start_main (/lib64/libc.so.6+0x20400)

SUMMARY: AddressSanitizer: heap-buffer-overflow (/lib64/libasan.so.3+0x5f29a)
Shadow bytes around the buggy address:
0x0c047fff9da0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c047fff9db0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c047fff9dc0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c047fff9dd0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c047fff9de0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
=>0x0c047fff9df0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa 00[05]
0x0c047fff9e00: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c047fff9e10: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c047fff9e20: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c047fff9e30: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c047fff9e40: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
Shadow byte legend (one shadow byte represents 8 application bytes):
Addressable: 00
Partially addressable: 01 02 03 04 05 06 07
Heap left redzone: fa
Heap right redzone: fb
Freed heap region: fd
Stack left redzone: f1
Stack mid redzone: f2
Stack right redzone: f3
Stack partial redzone: f4
Stack after return: f5
Stack use after scope: f8
Global redzone: f9
Global init order: f6
Poisoned by user: f7
Container overflow: fc
Array cookie: ac
Intra object redzone: bb
ASan internal: fe
Left alloca redzone: ca
Right alloca redzone: cb
==21454==ABORTING



Сейчас, к счастью, много инструментов, позволяющих улучшить качество кода.
P.S. А вот cppcheck не поймал, даже если индекс явно 16 влепить.

Возможно баг, или информации анализатору не хватает. Вообще он такое ловит:


(error) Array 's.a[15]' accessed at index 16, which is out of bounds.


Насчёт sanitizers — отличные инструменты. Замедляют программу значительно меньше valgrind, а находят зачастую больше проблем, хотя бы за счёт большего объёма информации о программе. Пересобирать надо, да, но оно того стоит.

Именно так. Собственно, в следующем релизе util-linux tailf уже не будет.

Да-да, как раз хотел кинуть это. Пишут Makefile рекурсивные и потом жалуются на скорость работы make.

Второе издание пишется, 3 главы доступно в MEAP. Это ли не показатель, насколько переводы могут отставать от оригинала.

Выскажусь и за Fedora. Пользуюсь около двух лет, отличный дистрибутив. Свежие пакеты, при этом вполне себе стабильна (несмотря на байки в интернетах). Репозиторий не слишком большой по сравнению с некоторыми, но особенных проблем не испытывал, необходимое собирается без проблем. Хотя из коробки GNOME, кеды юзабельны (пару раз что-то с иконками происходило после обновления, но потом возвращалось на место).

Не так давно переехал на Tumbleweed, очень нравится система. KDE по умолчанию и готовят его отлично.
Про тот же Neon буквально сегодня читал, что опакечивают не слишком удачно — попытка удалить vlc пытается снести полсистемы.

Прикреплю-ка видео по теме <random>, может кто ещё не видел.


What C++ Programmers Need to Know about Header <random>

Уже практически 6 лет стандарту C++11, а повсюду всё тот же rand()… Вот недавно на Coursera встретился, на новом курсе по алгоритмам.

Можно egrep вместо grep писать, результат будет тот же. Во многих дистрибутивах просто в grep -E раскрывается, никаких зависимостей не просит.
А почему именно ps+grep? Мне кажется, добавить один флаг pgrep проще, чем писать конвейер. Да и есть этот pgrep даже в busybox (разве что, флаг -a там отстутствует, иногда не хватает).
О, действительно, из-за этого не работало. Спасибо!
С триальной (истёкшей) лицензией тоже не действует:

./pvs-studio-6.11.20138.1-x86_64/bin/pvs-studio-analyzer  analyze -l PVS-Studio.lic
[100%] Analyzing: /home/user/malloc.c
Your license for PVS-Studio has expired. You may renew your license at http://www.viva64.com/en/renewal/.
Analysis finished in 0:00:00.02

Это от безысходности добавил. Пятью строками выше вызов в точности такой, как вы пишете.
Если Вы используете PVS-Studio for Linux, то сразу переходите ко второму шагу, файл с лицензией вам не понадобится.

Не подскажете, что не так делаю?

$ cat malloc.c
// This is an open source non-commercial project. Dear PVS-Studio, please check it.
// PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com

#include <stdlib.h>

int main(int argc, char **argv)
{
    (void)argv;
    int *i = malloc(argc);
    return i[0];
}

$ ./pvs-studio-6.11.20138.1-x86_64/bin/pvs-studio-analyzer  trace -- gcc malloc.c -o malloc

$ ./pvs-studio-6.11.20138.1-x86_64/bin/pvs-studio-analyzer  analyze
[100%] Analyzing: /home/user/malloc.c
Please request a trial license from our support at support@viva64.com.
Analysis finished in 0:00:00.05

$ ./pvs-studio-6.11.20138.1-x86_64/bin/pvs-studio-analyzer  analyze -l malloc.c
[100%] Analyzing: /home/user/malloc.c
License information is incorrect. Please check your registration data or contact Customer Support at support@viva64.com
Analysis finished in 0:00:00.02

Information

Rating
Does not participate
Location
Россия
Registered
Activity