Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2708307
  • 博文数量: 416
  • 博客积分: 10220
  • 博客等级: 上将
  • 技术积分: 4193
  • 用 户 组: 普通用户
  • 注册时间: 2006-12-15 09:47
文章分类

全部博文(416)

文章存档

2022年(1)

2021年(1)

2020年(1)

2019年(5)

2018年(7)

2017年(6)

2016年(7)

2015年(11)

2014年(1)

2012年(5)

2011年(7)

2010年(35)

2009年(64)

2008年(48)

2007年(177)

2006年(40)

我的朋友

分类: C/C++

2010-05-25 16:47:35

结合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) |
给主人留下些什么吧!~~

chinaunix网友2010-05-27 18:12:11

汇编实现printf: http://www.aganhome.com/archives/146