c++修改函数返回地址

原创 2013年12月06日 11:27:41
#include <iostream>
#include <stdio.h>
using namespace std;

int retAddr = 0;

void func()
{
	// 修改函数返回值,使其回到main函数中去
	__asm{
		mov eax, dword ptr[retAddr]
		mov dword ptr[ebp], eax;
		sub ebp, 4 
		sub esp, 4
	}
	cout<<"执行func()"<<endl;
}

int funcAddr = int(func);
bool myFunction()
{
	// 将函数返回值记录在全局变量中
	// 改变函数返回值,使其跳转到func
	__asm {
		mov eax , dword ptr[ebp+4]
		mov dword ptr[retAddr], eax
		mov eax,  dword ptr[funcAddr]
		mov dword ptr[ebp+4], eax
	}
	cout<<"执行 myFunction()"<<endl;
	return false;
}

int main()
{
	myFunction();
	cout<<"返回到main()中。"<<endl;
	system("pause");
}


相关文章推荐

ch2:栈溢出,修改邻接变量,修改函数返回地址

实验环境: 操作系统 Windows7 IDE VC 6.0 build版本 debug 用于实验的C语言代码: #include #define PASSWORD "1...

C/C++获取函数返回地址

一般而言, 能否覆盖函数返回地址是栈溢出攻击成功与否的前提, 而获取函数返回地址原理很简单, 栈回溯即可, 下面是x86上相应获取代码(仅为示例不可用于生产): #define Stack_Leng...
  • rrrfff
  • rrrfff
  • 2012年03月11日 13:20
  • 6728

C++ 从函数返回指针(函数外返回局部静态变量的地址)

C++ 不支持在函数外返回局部变量的地址,除非定义局部变量为 static 变量。 错误代码: int main(){ int *p; p=funcGetPointer...

函数返回局部变量地址

一般的来说,函数是可以返回局部变量的。 局部变量的作用域只在函数内部,在函数返回后,局部变量的内存已经释放了。因此,如果函数返回的是局部变量的值,不涉及地址,程序不会出错。但是如果返回的是局部变量的地...

关于缓冲区到函数返回地址分析

用gdb调试可执行程序h(从附件下载h.tar.gz),计算缓冲区起始地址与函数foo返回地址的距离的调试过程...

C/C++ 子函数返回局部变量、指针 和改变指针指向

1>子函数返回局部变量 例子1: 上面的简单程序,大家应该都知道应该会输出什么。是的,输出如下图: 引出的思考:子函数doubletimes()中的返回变量k是局部变量,返回到主...

从C++函数返回多个值

作者:Eli Bendersky http://eli.thegreenplace.net/2016/returning-multiple-values-from-functions-in-c/ ...

改善C++ 程序的150个建议学习之建议0:不要让main函数返回void

建议0:不要让main函数返回void 同C程序一样,每个C++ 程序都包含一个或多个函数,而且必须有一个函数命名为 main,并且每个函数都由具有一定功能的语句序列组成。操作系统将main作为程序入...

C++函数返回引用的情况说明

引言(废话)即将考试C++,老师发了一些资料讲了一些比较琐碎的细节,其中有一个就是关于函数返回引用/非引用和在函数调用处使用该引用/费引用(即保存其值)的一些细节,发现自己对这个也不是很清楚,所以作一...

C++函数返回引用和值问题

今天因为改到一个代码,所以遇到一个问题。函数里局部变量返回的问题。以下是代码,就是运用类模板,重载了+操作:一。最原始的代码如下:#include #include template class T_...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c++修改函数返回地址
举报原因:
原因补充:

(最多只允许输入30个字)