一篇旧文章,结合汇编探索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/ 先申明,本人英语太菜,每次 ...
随机推荐
- 简单的访客IP获取类-IPHelper.cs
public class IPHelper { public static string GetVisitorsIPAddress() { string result = String.Empty; ...
- 移动设备、手机浏览器Javascript滑动事件代码
以下经过本人测试成功. 测试平台:三星S5830I 操作系统:Android 2.3.6 浏览器:UC浏览器 HTML标准:HTML5 测试了三个事件:touchstart.touchmove 和 t ...
- 基于NPOI开源框架写的ExcelHelper【转载】
namespace ExcelTest { using System; using System.Collections.Generic; using System.Data; using Syste ...
- Mac OS使用技巧之十六:系统失去响应怎么办?
再好的系统,再快的本本,也会在执行时由于种种原因出现卡顿或者死机等失去响应的情况.Mac用户也会时不时碰到这样的情况,最常见的表现为鼠标变为七彩圆圈.通常等上一会儿系统会自己恢复.假设迟迟没有响应的话 ...
- [置顶] 基于视频采集卡驱动的错误修改CX26828
基于视频采集卡驱动的错误修改CX26828 1. 设置root密码 command:sudo passwd root 2.查看系统状态 输入命令:lsmod root@ubuntu:/home/yu# ...
- PRD产品需求文档概要
PRD概念 PRM就是Product Requirements Document的简称,也就是产品需求模型.一般来说一个产品会伴随有市场需求文档(Market Requirements Documen ...
- 各大浏览器CSS Hack收集
各大浏览器CSS Hack收集 >>>>>>>>>>>>>>>>>>>>> ...
- 快速打出System.out.println("");
sysout---->Alt+/--->System.out.println():
- 在eclipse下面搭建Clojure开发运行环境
打开eclipse,点击菜单栏“help->Install New Software...", 然后,点击”add“, 在Location处输入 http://ccw.cgrand.n ...
- xcode本地运行H5游戏可以吗?
答案是不可以!!! 不可以!!! 不可以!!! 有时候很郁闷的接受一个需求,然后以为自己能力不行,或者是代码写错,还是哪里了解不够,然而并不是啊!!! MD的我想说有些事是行不通的的!! 好了,平静下 ...