Я пытаюсь создать код сборки, чтобы узнать, как это работает, но в моем первом примере я столкнулся с исключением исключения переполнения буфера. Я использую 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();
}
Я не вижу утверждения ret. Создает ли макрос endp его сам? –
@VladfromMoscow да, он сам производит утверждение ret. – yekose
Я действительно не вижу, как эта программа может вызвать переполнение буфера, там * есть * нет буферов? На (возможно) несвязанной ноте вы неправильно определяете свою функцию 'main', она всегда должна быть определена для возврата' int' (хотя вы можете пропустить оператор 'return', а компилятор выдаст автоматическое' return 0; ') , –