Size: a a a

2021 July 08

MA

Max Azatian in supapro.cxx
==7215==ERROR: AddressSanitizer: stack-buffer-overflow on address 0x7ffe7f110b88 at pc 0x7f7c6fa061ad bp 0x7ffe7f110b10 sp 0x7ffe7f1102b8
READ of size 84 at 0x7ffe7f110b88 thread T0
   #0 0x7f7c6fa061ac  (/lib/x86_64-linux-gnu/libasan.so.5+0x6a1ac)
   #1 0x55e6b45dd510 in saveFile src/FileOps.c:93
   #2 0x55e6b45dc6e8 in main src/main.c:224
   #3 0x55e6b45dba72 in runTests src/main.c:80
   #4 0x55e6b45dc068 in main src/main.c:142
   #5 0x7f7c6f7d10b2 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x270b2)
   #6 0x55e6b45db2dd in _start (/home/max/Desktop/project/rle+0x22dd)
источник

MA

Max Azatian in supapro.cxx
источник

MA

Max Azatian in supapro.cxx
оно не может прочитать эти 84 байта (почему-то), и не понимаю почему

если без санитайзеров, то все ок сохраняется
источник

AF

Aidar Fattakhov in supapro.cxx
Ты взял указатель на указатель
источник

MA

Max Azatian in supapro.cxx
там где &extraData?
источник

MA

Max Azatian in supapro.cxx
без него вылетает сегфолт, тоже без понятия, чего так
источник

AF

Aidar Fattakhov in supapro.cxx
Ну копай
источник

MA

Max Azatian in supapro.cxx
*extraInfo в load() = *extraData в save(), может это чем-то поможет
источник

AF

Aidar Fattakhov in supapro.cxx
А там нужен указатель на указатель
источник

MA

Max Azatian in supapro.cxx
**?
источник

AF

Aidar Fattakhov in supapro.cxx
void foo(char* extraInfo) {
extraInfo=malloc()
};
источник

AF

Aidar Fattakhov in supapro.cxx
Или ссылка
источник

AF

Aidar Fattakhov in supapro.cxx
void foo(int extraInfo) {
extraInfo=5
};
источник

AF

Aidar Fattakhov in supapro.cxx
int x;
foo(x);
x // хз
источник

MA

Max Azatian in supapro.cxx
а зачем там **, если следующий массив пишется без **\& и все происходит нормально?
источник

AF

Aidar Fattakhov in supapro.cxx
.
источник

AF

Aidar Fattakhov in supapro.cxx
Не в fread
источник

AF

Aidar Fattakhov in supapro.cxx
А в параметре функции
источник

C

CristiCristiano in supapro.cxx
Тут смотрю тебе бредово отвечали на этот вопрос.... Советую чутка изучить ассемблер уделить несколько часов на то чтоб понять как работают функции и остальные вещи. Для начала существуют конвенции вызовов функции (их использует компилятор чтоб понять как вызывать функцию) если функция не inline. В текущее время все X64 вызывают даже вместо cdecl. Ну короче кратко о том как вызывается функция. Для начала о том что такое функция это место в программе в котором находится код который надо читать jmp function например потом внутри jmp exit_function. Но в реале используется call и ret это тоже самое что вот эта мука с jmp только ret выполняет переход по адресу откуда была выполнена инструкция call. Можно самому реализовать это сделав push (адрес места вызова функции) или mov rax, (адрес вызова функции). rax это 1 из регистров и твои значения могут быть либо в стеке либо в регистрах
источник

C

CristiCristiano in supapro.cxx
Не всегда можно точно сказать не смотря дизассемблер в стеке твои данные или в регистрах. Так что можно сказать что некоторые функции или даже программы не используют стек
источник