2014-09-29 3 views
-1

Я пытаюсь создать код сборки, чтобы узнать, как это работает, но в моем первом примере я столкнулся с исключением исключения переполнения буфера. Я использую VS2013 express edition, и я использую код C++, чтобы сделать код сборки, используя функциональность extern «C». Я попытался изменить некоторые варианты VS, но это не сработало. Что может быть причиной для исключения исключения переполнения буфера, поскольку это простое утверждение. Обычно я строю и выполняю без выражения mov.Простой ассемблерный код генерирует переполнение буфера

Редактировать: Просто добавьте инструкцию ret для макроса и проблему.

Это assmbly часть:

.586 
.model flat,c 
.data 
.code 

doit proc 

mov eax, 8 
doit endp 
end 

и здесь C++ часть:

extern "C" void doit(); 


void main() 
{ 

doit(); 

} 
+0

Я не вижу утверждения ret. Создает ли макрос endp его сам? –

+0

@VladfromMoscow да, он сам производит утверждение ret. – yekose

+0

Я действительно не вижу, как эта программа может вызвать переполнение буфера, там * есть * нет буферов? На (возможно) несвязанной ноте вы неправильно определяете свою функцию 'main', она всегда должна быть определена для возврата' int' (хотя вы можете пропустить оператор 'return', а компилятор выдаст автоматическое' return 0; ') , –

ответ

-1

Причина заключается в том, что процедура ассемблера не имеет ret заявления. Таким образом, поведение программы не определено. :)