在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
内联汇编方式: 1 #include<iostream> 2 using namespace std; 3 void print(){ 4 cout<<"External Function"<<endl; 5 } 6 class A{ 7 public: 8 void print(){ 9 cout<<"A::Member Function"<<endl; 10 } 11 }; 12 typedef void(*fun)(); 13 int main(){ 14 fun p; 15 void *v; 16 17 v = (void *)&print; 18 p=(fun)v; 19 p(); 20 //用内联汇编方式获取类的非静态成员函数的入口地址。 21 _asm{ 22 //将A::print的偏移地址送到eax寄存器中 23 lea eax,A::print 24 mov v,eax 25 } 26 p=(fun)v; 27 p(); 28 return 0; 29 } 上述print函数并没有访问类A的成员属性。 在VisualC++中,类的成员函数在调用之前,编译器生成的汇编码 1 #include<iostream> 2 using namespace std; 3 typedef void(*fun)(); 4 5 class A{ 6 int i; 7 public: 8 A(){i=5;} 9 void print(){ 10 cout<<i<<endl; 11 } 12 }; 13 void Invoke(A &a){ 14 fun p; 15 _asm{ 16 lea eax,A::print 17 mov p,eax 18 mov ecx,a //将对象地址送入ecx寄存器 19 } 20 p(); 21 22 }/* 23 void Invoke(A a){ 24 fun p; 25 _asm{ 26 lea eax,A::print 27 mov p,eax 28 lea ecx,a 29 } 30 p(); 31 }*/ 32 int main(){ 33 A a; 34 Invoke(a); 35 }
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论