玩具2 this指针 c++新手可以来玩玩

lyramilk 2011-07-22 12:08:37
#include <stdio.h>
#include <string>
struct ssp
{
const char* d;
};

class milk{
std::string p;
public:
milk(const char* e){
p = e;
}
const char* get_string(){return p.c_str();};
void niuniu(ssp* a){
*(int*)(&a - 1) = (int)a;

printf("p=%s\n",get_string());
};
};


int main(int argc,char** argv)
{
ssp zzz = {"哈哈哈哈"};
milk a("嘿嘿");

a.niuniu(&zzz);
return 0;
}
...全文
125 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lyramilk 2011-08-10
  • 打赏
  • 举报
回复
就是在niuniu函数中通过溢出修改this指针。将this指针修改为结构体ssp。然后调用getstring时this指针已经变成了ssp结构体的指针。我随便做的没有经过测试,可能对编译器有依赖吧。我用的编译器是VS2008。
机智的呆呆 2011-07-23
  • 打赏
  • 举报
回复
*(int*)(&a - 1) = (int)a;这句假定this指针作为最后一个参数入栈,linux上gcc这样的。
而vc中this指针保存在ecx中。
ningto.com 2011-07-22
  • 打赏
  • 举报
回复
解释一下呗, 不过显示完成后有异常
ANT2AUNTH 2011-07-22
  • 打赏
  • 举报
回复
路过 ······
勤奋的小游侠 2011-07-22
  • 打赏
  • 举报
回复
内存不能为write,你写的是不知道什么意思.玩什么啊?没看出门道
zengjing2she327 2011-07-22
  • 打赏
  • 举报
回复
有意思,接分了

64,636

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧