//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指针的更多相关文章

  1. 开博客这么久以来,第一篇技术文章,python与c的接口对接

    在博客园开博客已经有了蛮长时间了,但是从来只是看别人的文章,自己却从未写过一篇技术文章,深表惭愧.内心还是希望能够给大家提供一些帮助的,希望这第一篇技术博客,能够给大家一些帮助.闲话少叙,开始正文. ...

  2. C++语言,统计一篇英文文章中的单词数(用正则表达式实现)

    下面的例子展示了如何在C++11中,利用regex_search()统计一篇英文文章中的单词数: #include <iostream> #include <regex> #i ...

  3. Ueditor编辑旧文章,从数据库中取出要修改的内容

    Ueditor编辑旧文章,从数据库中取出要修改的内容然后放置到编辑器中: <script type="text/plain" id="editor"> ...

  4. SAP成都研究院2018年总共87篇技术文章合集

    2018年很快就要结束了.Jerry在2017年年底准备开始写这个公众号时,给自己定的目标是:2018年至少保证每周发布一篇高质量的文章.如今2018年就快过去了,高质量与否需要大家来反馈,至少从量上 ...

  5. 跟我学SpringCloud | 终篇:文章汇总(持续更新)

    SpringCloud系列教程 | 终篇:文章汇总(持续更新) 我为什么这些文章?一是巩固自己的知识,二是希望有更加开放和与人分享的心态,三是接受各位大神的批评指教,有任何问题可以联系我: inwsy ...

  6. 【Jmeter】他人总结篇链接(共八篇相关文章)

    [Jmeter]他人总结篇链接(共八篇相关文章) https://blog.csdn.net/mu_wind/article/category/9029006

  7. MySQL优化篇系列文章(二)——MyISAM表锁与InnoDB锁问题

    我可以和面试官多聊几句吗?只是想... MySQL优化篇系列文章(基于MySQL8.0测试验证),上部分:优化SQL语句.数据库对象,MyISAM表锁和InnoDB锁问题. 面试官:咦,小伙子,又来啦 ...

  8. 【系统篇】从int 3探索Windows应用程序调试原理

    探索调试器下断点的原理 在Windows上做开发的程序猿们都知道,x86架构处理器有一条特殊的指令——int 3,也就是机器码0xCC,用于调试所用,当程序执行到int 3的时候会中断到调试器,如果程 ...

  9. 翻译一篇英文文章,主要是给自己看的——在ASP.NET Core Web Api中如何刷新token

    原文地址 :https://www.blinkingcaret.com/2018/05/30/refresh-tokens-in-asp-net-core-web-api/ 先申明,本人英语太菜,每次 ...

随机推荐

  1. 简单的访客IP获取类-IPHelper.cs

    public class IPHelper { public static string GetVisitorsIPAddress() { string result = String.Empty; ...

  2. 移动设备、手机浏览器Javascript滑动事件代码

    以下经过本人测试成功. 测试平台:三星S5830I 操作系统:Android 2.3.6 浏览器:UC浏览器 HTML标准:HTML5 测试了三个事件:touchstart.touchmove 和 t ...

  3. 基于NPOI开源框架写的ExcelHelper【转载】

    namespace ExcelTest { using System; using System.Collections.Generic; using System.Data; using Syste ...

  4. Mac OS使用技巧之十六:系统失去响应怎么办?

    再好的系统,再快的本本,也会在执行时由于种种原因出现卡顿或者死机等失去响应的情况.Mac用户也会时不时碰到这样的情况,最常见的表现为鼠标变为七彩圆圈.通常等上一会儿系统会自己恢复.假设迟迟没有响应的话 ...

  5. [置顶] 基于视频采集卡驱动的错误修改CX26828

    基于视频采集卡驱动的错误修改CX26828 1. 设置root密码 command:sudo passwd root 2.查看系统状态 输入命令:lsmod root@ubuntu:/home/yu# ...

  6. PRD产品需求文档概要

    PRD概念 PRM就是Product Requirements Document的简称,也就是产品需求模型.一般来说一个产品会伴随有市场需求文档(Market Requirements Documen ...

  7. 各大浏览器CSS Hack收集

    各大浏览器CSS Hack收集  >>>>>>>>>>>>>>>>>>>>> ...

  8. 快速打出System.out.println("");

    sysout---->Alt+/--->System.out.println():

  9. 在eclipse下面搭建Clojure开发运行环境

    打开eclipse,点击菜单栏“help->Install New Software...", 然后,点击”add“, 在Location处输入 http://ccw.cgrand.n ...

  10. xcode本地运行H5游戏可以吗?

    答案是不可以!!! 不可以!!! 不可以!!! 有时候很郁闷的接受一个需求,然后以为自己能力不行,或者是代码写错,还是哪里了解不够,然而并不是啊!!! MD的我想说有些事是行不通的的!! 好了,平静下 ...