一篇旧文章,结合汇编探索this指针
//VC6.0下成功编译
#include <iostream.h> class X{
public:
void foo(int b,int c){
this->a=b*c;
cout<<a<<endl;
}
int a;
}; int main(){
void (X::*pXfoo)(int,int);
void (__stdcall*pfoo)(int,int);
//协调调用约定 让被调函数进行栈的清理 pXfoo = X::foo;
__asm{
push eax
mov eax,dword ptr pXfoo
mov dword ptr pfoo,eax
pop eax
//pfoo = pXfoo
}
X x; //使用对象地址给this指针赋值
__asm push ecx
__asm lea ecx,x
pfoo(,);
__asm pop ecx
//另一种类似__thiscall调用约定的是__fastcall
//但是使用__fastcall,则所有参数将被放入寄存器,则成员函数产生异常
} /*
C++的成员函数就是个普通函数与C
的函数的不同之处也就是调用约定的不同 VC的__thiscall的特征:
1)对象地址通过寄存器传递
2)其他参数通过栈传递
3)进栈方式 右 -> 左
4)被调函数进行栈清理
*/
//BCB6.0 下成功编译
#include <iostream.h> class X{
public:
void foo(int b,int c){
a = b*c;
cout<<"a="<<a<<endl;
}
int a;
}; int main(){
X x; //
void (X::*pXfoo)(int,int);//
void (*pfoo)(X* THIS,int,int);//0c~14 pXfoo=X::foo;
__asm{
push eax
mov eax,dword ptr pXfoo
mov dword ptr pfoo,eax
pop eax
//pfoo = pXfoo
} pfoo(&x,,);
getchar();
//BCB __thiscall the same to __cdecl
}
一篇旧文章,结合汇编探索this指针的更多相关文章
- 开博客这么久以来,第一篇技术文章,python与c的接口对接
在博客园开博客已经有了蛮长时间了,但是从来只是看别人的文章,自己却从未写过一篇技术文章,深表惭愧.内心还是希望能够给大家提供一些帮助的,希望这第一篇技术博客,能够给大家一些帮助.闲话少叙,开始正文. ...
- C++语言,统计一篇英文文章中的单词数(用正则表达式实现)
下面的例子展示了如何在C++11中,利用regex_search()统计一篇英文文章中的单词数: #include <iostream> #include <regex> #i ...
- Ueditor编辑旧文章,从数据库中取出要修改的内容
Ueditor编辑旧文章,从数据库中取出要修改的内容然后放置到编辑器中: <script type="text/plain" id="editor"> ...
- SAP成都研究院2018年总共87篇技术文章合集
2018年很快就要结束了.Jerry在2017年年底准备开始写这个公众号时,给自己定的目标是:2018年至少保证每周发布一篇高质量的文章.如今2018年就快过去了,高质量与否需要大家来反馈,至少从量上 ...
- 跟我学SpringCloud | 终篇:文章汇总(持续更新)
SpringCloud系列教程 | 终篇:文章汇总(持续更新) 我为什么这些文章?一是巩固自己的知识,二是希望有更加开放和与人分享的心态,三是接受各位大神的批评指教,有任何问题可以联系我: inwsy ...
- 【Jmeter】他人总结篇链接(共八篇相关文章)
[Jmeter]他人总结篇链接(共八篇相关文章) https://blog.csdn.net/mu_wind/article/category/9029006
- MySQL优化篇系列文章(二)——MyISAM表锁与InnoDB锁问题
我可以和面试官多聊几句吗?只是想... MySQL优化篇系列文章(基于MySQL8.0测试验证),上部分:优化SQL语句.数据库对象,MyISAM表锁和InnoDB锁问题. 面试官:咦,小伙子,又来啦 ...
- 【系统篇】从int 3探索Windows应用程序调试原理
探索调试器下断点的原理 在Windows上做开发的程序猿们都知道,x86架构处理器有一条特殊的指令——int 3,也就是机器码0xCC,用于调试所用,当程序执行到int 3的时候会中断到调试器,如果程 ...
- 翻译一篇英文文章,主要是给自己看的——在ASP.NET Core Web Api中如何刷新token
原文地址 :https://www.blinkingcaret.com/2018/05/30/refresh-tokens-in-asp-net-core-web-api/ 先申明,本人英语太菜,每次 ...
随机推荐
- winfrom 截屏、抓屏 分类: WinForm 2014-08-01 13:02 198人阅读 评论(0) 收藏
截取全屏代码: try { this.Hide(); Rectangle bounds = Screen.GetBounds(Screen.GetBounds(Point.Empty)); Bitma ...
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(37)-文章发布系统④-百万级数据和千万级数据简单测试
原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(37)-文章发布系统④-百万级数据和千万级数据简单测试 系列目录 我想测试EF在一百万条数据下的显示时间! ...
- Android获得线性渐变某点的颜色
安卓官方确实提供了好多非常强大的工具给我们了,例如我们最近经常在shape中加入gradient(渐变),像我的项目中用的是线性渐变, <?xml version="1.0" ...
- A different twist on pre-compiling JSPs--reference
I’ve blogged about this topic earlier and expressed my frustrations as to how web containers don’t p ...
- WebLogic Server的Identity Assertion--转载
在一些典型的公司Web应用程序安全部署中,访问受保护应用程序的用户通过企业身份/访问管理产品,如Netegrity 的 SiteMinder,IBM 的WebSEAL 和Oblix 的 Oblix C ...
- linux下MySQL安装登录及操作
linux下MySQL安装登录及操作 二.安装Mysql 1.下载MySQL的安装文件 安装MySQL需要下面两个文件: MySQL-server-4.0.16-0.i386.rpm MySQL-cl ...
- Creating Custom Shadows ——创建自定义shadow
Custom shadows are a Robolectric feature that allows you to make targeted changes in the way Android ...
- STL的基本使用之关联容器:map和multiMap的基本使用
STL的基本使用之关联容器:map和multiMap的基本使用 简介 map 和 multimap 内部也都是使用红黑树来实现,他们存储的是键值对,并且会自动将元素的key进行排序.两者不同在于map ...
- 多目标遗传算法 ------ NSGA-II (部分源码解析) 二进制编码的个体解码操作 decode.c
种群解码函数 decode_pop 为包装函数, 核心调用函数为 decode_ind , 对每个个体进行解码. /* Routines to decode the population */ ...
- spring xml 空模板-applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.spr ...