Чтение базы стекового фрейма в c ++ на windows - PullRequest
1 голос
/ 11 июля 2019

Я пытаюсь перенести код виртуальной машины 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];
    }
} 

Но я не имею никакого опыта в программировании на ассемблере. Итак, у меня есть два вопроса:

  1. Верен ли этот перевод для ассемблера Intel?

  2. Редакция сообщества Visual Studio не поддерживает встроенный ассемблер для целей x64. Но он поддерживает Intrinsics . Можем ли мы получить базу стекового фрейма в коде C / C ++ без написания кода на ассемблере во внешнем файле

Спасибо

...