C ++ голая функция с параметром объекта - PullRequest
0 голосов
/ 26 июня 2018

У меня есть класс с именем Person. Объект Person имеет только 1 частное свойство 'Age'. Я пытался создать голую функцию сборки с параметром объекта Person.

Этот объект, который я хочу сохранить в регистре сборки, и попробуйте получить значение свойства age в этом сохраненном регистре.

Хранение объекта в реестре, надеюсь, хорошо сделано.

mov edx, dword ptr ds: [ebp + 0x8]

Но теперь я хочу взять возраст значения свойства объекта, который был сохранен в регистре EDX. Я попробовал несколько вещей для получения значения, но я всегда получал данные. Я только хочу сделать это во встроенной сборке регистров. без использования кода C ++ во встроенной сборке.

человек класса

#include "Person.h"

Person::Person()
{
}

void Person::SetAge(int age)
{
    this->_age = age;
}

int Person::GetAge()
{
    return this->_age;
}




__declspec(naked) void ObjectCall(Person* p)
{
    int age;
    _asm
    {
        mov ebp, esp  // prologue
        push ecx 

        mov edx, dword ptr ds:[ebp + 0x8] // Take full object in parameter and put it in edx register
        mov ecx, 0x4
        mov eax, dword ptr ds:[edx + ecx]   // Trying for taking the property value of age in person object.
        mov age, eax
    }

    std::cout << age << std::endl;
    _asm
    {
// epilogue
        pop ecx
        ret
    }
}

int main()
{
    Person p = Person();
    p.SetAge(5);
    ObjectCall(&p);
}
...