Приложение C # аварийно завершает работу с переполнением буфера в развернутой (.exe) версии, но не в Visual Studio - PullRequest
0 голосов
/ 17 марта 2010

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

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

Спасибо заранее, Бен

Ответы [ 2 ]

1 голос
/ 17 марта 2010

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

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

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

0 голосов
/ 17 марта 2010

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

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

...