结合windbg,得到构造与其函数method(int n),把其中部分嵌入C++代码中,(用vs2008测试的)
#include "stdafx.h"
#include
#include
#include
#include
class my_class
{
public :
my_class()
{
__asm
{
/*****************************
m_member = 1;
c = 's';
/*****************************/
/* 初始化内存部分 */
/*push ebp
mov ebp,esp
sub esp,0CCh
push ebx
push esi
push edi
push ecx
lea edi,[ebp-0CCh]
mov ecx,33h
mov eax,0CCCCCCCCh
rep stos dword ptr es:[edi]
pop ecx
mov dword ptr [ebp-8],ecx*/
/*************************/
/* 成员函数赋值,一定要得到类的指针eax */
mov eax,dword ptr [ebp-8]
mov dword ptr [eax],1
mov eax,dword ptr [ebp-8]
mov byte ptr [eax+4],73h
/*************************
/* 退出部分
mov eax,dword ptr [ebp-8](可优化去掉)
pop edi
pop esi
pop ebx
mov esp,ebp
pop ebp
ret*/
}
}
void method(int n)
{
/*****************************
m_member = n;
/*****************************/
__asm
{
/*push ebp
mov ebp,esp
sub esp,0CCh
push ebx
push esi
push edi
push ecx
lea edi,[ebp-0CCh]
mov ecx,33h
mov eax,0CCCCCCCCh
rep stos dword ptr es:[edi]
pop ecx
mov dword ptr [ebp-8],ecx
*****************************/
mov eax,dword ptr [ebp-8]
mov ecx,dword ptr [ebp+8]
mov dword ptr [eax],ecx
/*****************************
pop edi
pop esi
pop ebx
mov esp,ebp
pop ebp
ret 4
*/
}
}
~my_class()
{
m_member = 0;
}
public :
int m_member;
char c;
};
int _tmain(int argc, _TCHAR* argv[])
{
my_class a_class;
a_class.method(10);
printf("result = %d\n", a_class.m_member);
return 0;
}
阅读(1674) | 评论(1) | 转发(0) |