Я пытаюсь перенести код виртуальной машины vaiven в Windows для целей обучения.
Я скомпилировал и протестировал код в Linux. Большая часть кода на С ++ прекрасно работает с Visual Studio 2019 Community Edition.
Есть одна функция, которую я не знаю, как перенести ее в Windows. Я предполагаю, что этот класс позволяет получить базу стекового фрейма.
class Stack {
uint64_t* rbp();
};
uint64_t* __attribute__ ((noinline)) vaiven::Stack::rbp() {
asm("mov (%rbp), %rax");
}
После поиска в ассемблере с использованием нотаций Intel я пришел к выводу, что эквивалентный код будет:
__declspec(noinline) uint64_t* vaiven::Stack::rbp() {
__asm
{
mov rax, DWORD PTR [rbp];
}
}
Но я не имею никакого опыта в программировании на ассемблере. Итак, у меня есть два вопроса:
Верен ли этот перевод для ассемблера Intel?
Редакция сообщества Visual Studio не поддерживает встроенный
ассемблер для целей x64. Но он поддерживает Intrinsics . Можем ли мы получить базу стекового фрейма в коде C / C ++ без написания кода на ассемблере во внешнем файле
Спасибо