zoukankan      html  css  js  c++  java
  • c++ 动态设置函数

    #include <iostream>
    #include <Windows.h>
    #include <TlHelp32.h>
    
    using namespace std;
    
    typedef int(__stdcall* FUN1)();
    
    FUN1 fun1;
    
    int main()
    {
    	BYTE* newmem = (BYTE*)VirtualAlloc(0, 100, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
    	BYTE bytes[] = {
    		0xB8, 0x0A, 0x00, 0x00, 0x00, // mov eax, 0xa
    		0xC3,			      // ret
    	};
    	int len = sizeof(bytes);
    	memcpy_s(newmem, len, bytes, len);
    	fun1 = (FUN1)newmem;
    
    	cout << fun1() << endl; // 10
    	VirtualFree(newmem, 0, MEM_RELEASE);
    	return 0;
    }
    
    #include <iostream>
    #include <Windows.h>
    #include <TlHelp32.h>
    
    using namespace std;
    
    typedef int(__stdcall* FUN1)();
    
    FUN1 fun1;
    
    void setFun(uintptr_t* fun)
    {
    	BYTE* newmem = (BYTE*)VirtualAlloc(0, 100, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
    	BYTE bytes[] = {
    		0xB8, 0x0A, 0x00, 0x00, 0x00, // mov eax, 0xa
    		0xC3,			      // ret
    	};
    	int len = sizeof(bytes);
    	memcpy_s(newmem, len, bytes, len);
    	*fun = (uintptr_t)newmem;
    }
    
    int main()
    {
    	setFun((uintptr_t*)&fun1);
    	cout << fun1() << endl; // 10
    	return 0;
    }
    
  • 相关阅读:
    12306.cn网站自动登录器源代码
    从IL看C#
    CanvasRenderingContext2Dhtml5的关键
    慎用Response.Write()
    JPanel 的getGraphics
    怎么用swing绘图
    Win7 双硬盘启动出错处理
    paint repaint实现动画
    多线程一例
    画图,橡皮
  • 原文地址:https://www.cnblogs.com/ajanuw/p/13457513.html
Copyright © 2011-2022 走看看