изменение с на приведет к переполнению буфера?

#c #gcc #compiler-construction #buffer-overflow

#c #gcc #компилятор-конструкция #переполнение буфера

Вопрос:

Мне нужно собрать несколько старых кодов, которые я получил на своем офисном компьютере, который был gcc 4.4.5 установлен. Я отредактировал код (удалив .h или добавив что-то подобное <cstring> ), чтобы обновить их, чтобы они могли быть скомпилированы gcc 4.4.5 . Однако после кажущейся успешной компиляции двоичный файл выдает переполнение буфера каждый раз, когда я его запускаю. Но код выполняется без ошибок на моем компьютере дома ( gcc 4.1.2 ). Возможно ли, что внесенное мной изменение вызвало эту ошибку? Я не уверен, поскольку я на самом деле не программист.

Комментарии:

1. Возможно, что новый glibc, который вы используете, имеет более агрессивный malloc / free (который используется внутри из new / delete ), который чаще использует освобожденные блоки памяти, и что есть какая-то часть программы, использующая память, которая должна быть свободной. Итак int *a = something; delete a; *a = 0;

Ответ №1:

Гораздо более вероятно, что исходный код каким-то образом содержал ошибки (неопределенное поведение, переполнение буфера и т. Д.), Но Старый компилятор создал (или содержал старую библиотеку) код, который был более терпимым к этим проблемам (a).

Боюсь, вам, вероятно, придется пойти и исправить (или попросить кого-нибудь исправить) основную причину проблемы. Мой вопрос к вам будет: «Если вы не считаете себя программистом, почему вы редактируете код и перестраиваете его?».

Моя мать тоже не программист, но она не занимается разработкой ядра Linux 🙂


(a) Иногда неопределенное поведение действительно работает!На самом деле это самый раздражающий аспект. Гораздо лучше, чтобы он постоянно выходил из строя, чтобы мы исправляли больше проблем, прежде чем обрушивать их на наших бедных клиентов. Но даже когда это работает, это не делает его хорошей идеей.

Комментарии:

1. 1 для My mother's not a coder either but she doesn't go around tinkering in the Linux kernel :-) .. Хороший!