具有参数对象的C ++裸函数

时间:2018-06-26 13:41:06

标签: c++ assembly x86 inline

我有一个名为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);
}

0 个答案:

没有答案