📄 hellotest.cpp
字号:
#include <stdio.h>
#include <malloc.h>
#include "HelloInterface.h"
#include "WelcomeInterface.h"
#define name_offset = 3
#define age_offset = 2
int age(void *_this) {
unsigned int *objptr = (unsigned int *)_this;
return *++objptr;
}
void setCAge(int age, void *_this) {
unsigned int *objptr = (unsigned int *)_this;
objptr++;
*objptr = age;
}
char* name() {
return "Zhang Jiuan";
}
void show(char *additionInfo) {
printf("Hello, %s\n", additionInfo);
}
class Hello: public IHello, public IWelcome {
int _age;
char *_name;
public:
Hello(int age, char *name) {
_age = age;
_name = name;
}
int getAge() {
return _age;
}
char *getName() {
return _name;
}
void setAge(int a) {
}
void showInfo() {
}
void welcome() {
printf("Welcome to you\n");
printf("name:%s\n", _name);
printf("age :%d\n", _age);
}
};
int main() {
void *obj = (void *) malloc (2 * sizeof (unsigned int));
unsigned int *vtb = (unsigned int *) malloc (4 * sizeof (unsigned int));
unsigned int *vptr = vtb, procAddr;
// IHello *pHello;
// int myage;
// char *myname;
Hello h(20, "jiu an");
Hello *ph = &h;
h.welcome();
vptr = (unsigned int *)&h;
vptr++;
vptr = (unsigned int*)(*vptr);
procAddr = *vptr;
printf("h=0x%08x, vptr=0x%08x\n", h, vptr);
//__asm int 3;
vptr = (unsigned int *)&h;
vptr++;
__asm mov ecx, vptr;
__asm call procAddr;
printf("sizeof(Hello):%d\n", sizeof(Hello));
printf("sizeof(Hello):%d\n", sizeof(ph));
#if 0
//printf("name %s\n", h.getName());
//set virtual table
*vptr++ = (unsigned int)(void *)age;
*vptr++ = (unsigned int)(void *)name;
*vptr++ = (unsigned int)(void *)show;
*vptr = (unsigned int)(void *)setCAge;
*(void **)obj = (void *)vtb;
//set field
vptr = (unsigned int*)obj;
vptr++;
*vptr = 25;
pHello = (IHello*)obj;
myname = pHello->getName();
__asm push obj;
//__asm push myname;
pHello->setAge(20);
__asm push obj;
myage = pHello->getAge();
//pHello->showInfo(pHello->getName);
printf("name is %s, age is %d\n", myname, myage);
#endif
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -