У вас есть хотя бы одна ошибка в коде по ссылке Godbolt, которую вы разместили.Эти операторы приводят к переполнению буфера (окружающий код и условия if () удалены.)
char buffer[2048];
length = syscall_read(fd, buffer, sizeof(buffer));
buffer[length] = 0;
buffer[length] = 0;
обращается за пределы массива, если sys_read
возвращает 2048. Как говорится на справочной странице, read()
пытается прочитать до count
байтов , а не count-1
.Это может привести к повреждению вашего стека, если массив был размещен прямо под чем-то важным.
Вы должны оставить место для терминатора 0, если вы хотите использовать его как строку C неявной длины вместо явной длиныбуфер + размер с write
или memcpy
или любым другим.Помните, что данные файла могут содержать 0
байт.
Как обычно, используйте отладчик и убедитесь, что ваш код работает как с обычными системными вызовами, так и с встроенными упаковщиками.