Próbuję nauczyć się ASM i chcę wypróbować kilka rzeczy w połączeniu z C++. Część ASM odbywa się w czystej funkcji. Ale za każdym razem, gdy wywołuję funkcję (pusta), aplikacja ulega awarii w następnej funkcji. Co powinienem zrobić w nagiej funkcji, żeby to działało, czy muszę pop esp czy coś takiego? Przykład może być pomocny.C++ użyj nagiej funkcji
_declspec(naked) void asmfunc()
{
_asm
{
}
}
int _tmain(int argc, _TCHAR* argv[])
{
i = 1;
asmfunc();
cout << i << endl; // <-- crash
system("pause");
return 0;
}
Zgodnie z [dokumentacją] (http://msdn.microsoft.com/it-it/library/h5w10wxs.aspx), musisz napisać kod prolog/epilog; zobacz [to pytanie] (http://stackoverflow.com/questions/3021513/could-someone-explain-declspecnaked-please). Zastanów się też, czy naprawdę potrzebujesz funkcji "nagich": jeśli chcesz tylko napisać jakiś zestaw osadzony, użyj zwykłej funkcji i pozwól kompilatorowi radzić sobie z konwencjami wywoływania C++. –
Zwróć uwagę na konwencje wywoływania. Nagie funkcje nie zachowują wymaganych rejestrów. – Mysticial