Сбой приложения C # с переполнением буфера в развернутой (.exe) версии, но не в Visual Studio

У меня есть приложение С# Windows Forms, которое отлично работает из Visual Studio, но дает сбой при его развертывании и запуске из .exe. Он вылетает из-за ошибки Buffer Overrun... и совершенно ясно, что эта ошибка возникает не из моего кода. Вместо этого окна должны обнаруживать какое-то переполнение буфера и закрывать приложение извне. Я не думаю, что есть одна конкретная строка кода, которая вызывает это ... это просто происходит с перерывами.

Есть ли у кого-нибудь какие-либо мысли о возможных причинах ошибки переполнения буфера и почему она возникает только в развернутом приложении, а не при запуске из Visual Studio?

Заранее спасибо, Бен


person Ben    schedule 17.03.2010    source источник
comment
пробовали на разных компах?   -  person Luiscencio    schedule 17.03.2010
comment
Не могли бы вы указать точную ошибку?   -  person Paul Ruane    schedule 17.03.2010
comment
Спасибо. Да, это происходит на нескольких ПК. Я только что написал об ошибке в комментарии ниже.   -  person Ben    schedule 17.03.2010


Ответы (2)


Это ошибка, вызванная неправильным поведением неуправляемого кода C/C++. Неуправляемая CRT проверяет, что код не превышает конец массива, расположенного в стеке, сохраняя файл cookie в кадре стека. Когда функция возвращается, она проверяет, существует ли еще файл cookie. Если это не так, предполагается, что какой-то вредоносный код или ошибка в коде C/C++ уничтожили фрейм стека. Справедливое предположение, что именно так работало большинство вирусных инфекций в конце девяностых.

Вероятность того, что это ошибка в коде C/C++, составляет 99,999%, а вероятность того, что машина атакована, составляет 0,001%. Вам нужно будет найти этот код C/C++ и связаться с программистом, который его написал, чтобы исправить ошибку. Если вы понятия не имеете, где искать, начните с подозрения на какой-либо элемент управления ActiveX или COM-сервер. И подключите отладчик в неуправляемом режиме к работающей версии вашей программы, чтобы увидеть, какие библиотеки DLL были загружены. Используйте Debug + Windows + Modules и убедитесь, что вы можете учитывать все библиотеки DLL.

О, и подробности сбоя были бы полезны для локализации источника.

person Hans Passant    schedule 17.03.2010

Вы должны быть более конкретными.

Обычно у вас есть какой-то глючный неуправляемый код.

person tsinik    schedule 17.03.2010
comment
Точная ошибка: в MyApplication.exe произошло переполнение буфера, что повредило внутреннее состояние программы. Нажмите Break, чтобы отладить программу, или Continue, чтобы завершить программу. Трудно предоставить код... Я не могу определить, где происходит сбой! Я добавляю операторы ведения журнала практически в каждую строку кода, но до сих пор не обнаружил шаблона. - person Ben; 17.03.2010
comment
Почему бы вам не нажать Break, чтобы отладить программу, как указано в ошибке? Почему бы вам не попробовать подключить свое приложение к отладчику в Visual Studio (конечно, ваше приложение должно работать в режиме отладки, а не в режиме выпуска)? Используете ли вы небезопасные блоки кода? - person Sameh Deabes; 17.03.2010