2009-11-18 6 views
3

я и few thousand other people, получают ошибку бросали в Microsoft Visual C++ Runtime:Как отключить проверку переполнения буфера в Visual C++ Runtime?

alt text http://i46.tinypic.com/2enceus.png

Что в интересах поисковых систем, говорит:

Microsoft Visual C++ Runtime Library 

Buffer overrun detected! 

Program: %s 

A buffer overrun has been detected which has corrupted the program's 
internal state. The program cannot safely continue execution and must 
now be terminated. 

Теперь я понимаю что такое переполнение буфера, и почему это плохо. Учитывая новый акцент Microsoft на «, он просто сломан», дополнительные проверки буфера в MSVCRT может быть приятной штукой.

С другой стороны, мне все равно. Дело не в том, что программа не может продолжаться, а в том, что программа не может безопасно продолжить. Я бы предпочел быть небезопасным, потому что это лучше, чем ничего. Мне нравится жить опасно.

Так может ли кто-нибудь предложить что-нибудь? я думал, что-то вроде:

  • ключа реестра для предотвращения MSVCRT от прекращения исполнения ордеров
  • запуска приложения в Compability с предыдущей версией операционной системы (предыдущего в ОС Windows 7)
  • добавив манифест сборки к исполняемому папки, так что он использует старую версию MSVCRT, тот, который не выполняет эту проверку переполнения
  • номер версии, или место загрузки, копия из MSVCRT, который не имеет переполнения проверки

Я попытался найти сайт поддержки компании, которая написала Microsoft Visual C++ Runtime Library, но они не имеют упоминания о том, какие функции могут переполняться или как отключить проверку переполнения.

ответ

6

Здесь есть опция. Установите его на нет.

Свойства проекта -> Свойства конфигурации -> C/C++ -> Генерация кода -> Проверка безопасности буфера.

alt text http://i49.tinypic.com/f23ask.jpg

Это соответствует параметру /GS (Buffer Security Check) компилятора:

обнаруживает некоторые переполнения буфера, что перезаписать адрес возврата, общий метод использования кода, который не навязывает размер буфера ограничения , Это достигается с помощью , введя проверки безопасности в скомпилированный код .

http://twitpic.com/pxlrx

+0

Мне нужен способ отключить проверку безопасности буфера на уже скомпилированном коде. –

1

Является ли это происходит в вас коде или на самом деле в библиотеке? Если он находится в библиотеке, я знаю, что вы говорите, что хотите просто проигнорировать ошибку, но что бы вы сделали, если это было нарушение доступа, которое разбило процесс?

Вы должны относиться к нему так же, потому что логически это одно и то же. Это просто CRT сбой процесса вместо ОС.

Но, если вы используете сборку отладки библиотеки, вы можете получить более эффективные (?) Результаты с помощью сборки выпуска (возможно, она просто потерпит крах без уведомления диалогового окна).

Если в вашем коде вы можете отключить проверку переполнения с помощью опции/GS-. Но вы действительно должны исправить ошибку.

+0

Внеочередной COM-сервер. то есть не мой собственный код –

+0

Боже, это всегда что-то ... У меня ничего нет. –