Estoy tratando de aprender ASM, y quiero probar algunas cosas combinadas con C++. La parte ASM se realiza en una función desnuda. Pero cada vez que llamo a la función (vacía), la aplicación falla en la siguiente función. ¿Qué debo hacer en la función desnuda para que funcione? ¿Necesito hacer pop esp o algo así? Un ejemplo podría ser útil.C++ usa la función desnuda
_declspec(naked) void asmfunc()
{
_asm
{
}
}
int _tmain(int argc, _TCHAR* argv[])
{
i = 1;
asmfunc();
cout << i << endl; // <-- crash
system("pause");
return 0;
}
Según lo especificado por la [documentación] (http://msdn.microsoft.com/it-it/library/h5w10wxs.aspx), debe escribir el código prolog/epilog; vea [esta pregunta] (http://stackoverflow.com/questions/3021513/could-someone-explain-declspecnaked-please). Además, considere si realmente necesita funciones 'naked': si todo lo que quiere es escribir algún ensamblado integrado simplemente use una función normal y deje que el compilador maneje las convenciones de llamadas de C++. –
Preste atención a las convenciones de llamadas. Las funciones desnudas no conservan los registros requeridos. – Mysticial