鱼C论坛

 找回密码
 立即注册
查看: 3640|回复: 11

C++ 嵌入 汇编 【救命】 jmp call VirtualAllocEx

[复制链接]
发表于 2014-8-28 12:07:42 | 显示全部楼层 |阅读模式
1鱼币
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <Windows.h>
  4. #include <tchar.h>
  5. #include <string.h>

  6. void run()
  7. {
  8.         printf("HelloWorld!\n");
  9. }

  10. int main()
  11. {
  12.         HANDLE hd=GetCurrentProcess();
  13.         char* pRemoteThread =(char*) VirtualAllocEx(hd, 0,1024, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
  14.         memset(pRemoteThread,0,1024);
  15.         if (!WriteProcessMemory(hd,pRemoteThread,&run,1024,0)) {
  16.                 MessageBox(NULL, "写入主失败 !","Notice", MB_ICONINFORMATION | MB_OK);
  17.                 return 0;
  18.                 }

  19.                
  20. DWORD addr;
  21. sscanf(pRemoteThread, "%x", &addr);


  22. printf("%#x \n",pRemoteThread);
  23.        
  24.         _asm
  25.         {
  26.                 lea eax, RetAddr
  27.                         push eax
  28.                         call addr
  29.                 //        jmp run  这样可以  不过打算不用这种方法
  30.                 //如何 通过 pRemoteThread 的指针 执行这段代码


  31.         RetAddr:
  32.                
  33.         }

  34.         printf("Main\n");
  35.         while (true);
  36.         return 0;
  37. }
  38. /*
  39.         char* pRemoteThread =(char*) VirtualAllocEx(hd, 0,1024, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);


  40.         //如何 用汇编 的jmp 执行 pRemoteThread 里面的内容

  41.         _asm{


  42.         };

  43.   */
复制代码
//        jmp run  这样可以  不过打算不用这种方法
                //如何 通过 pRemoteThread 的指针 执行这段代码

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-8-28 12:18:30 | 显示全部楼层
_asm
{
lea eax,Start
jmp eax
}

Start:
printf...
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-8-28 18:26:00 | 显示全部楼层
1. 代码的意思我大概看懂了,通过VirtualAllocEx分配内存空间,首地址是pRemoteThread,通过 WriteProcessMemory将run函数内存数据写进pRemoteThread内存区域。
2. 你的代码中引用了一个又做了一层替换,将指向addr,最后通过函数返回地址调用内存数据,是这个过程吧。
3. 直接引用
  1. _asm
  2.         {
  3.                 lea eax,pRemoteThread
  4.                 push eax
  5.                 ret
  6.         }pRemoteThread
复制代码
的话可以酱紫。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-8-28 18:45:35 | 显示全部楼层
我的写的你说的没错,就是你写的_asm 运行不了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-8-28 18:53:36 | 显示全部楼层
wangyonglin 发表于 2014-8-28 18:45
我的写的你说的没错,就是你写的_asm 运行不了

发现我写错了,不过我不确定c++里面的ret可不可以返回地址。
  1. _asm
  2.         {
  3.                 lea eax,pRemoteThread
  4.                 push eax
  5.                 ret
  6.         }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-8-28 18:56:29 | 显示全部楼层
这是我以前在C里面嵌入的汇编,也是用来回调函数的。c++没试过。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-8-28 19:10:17 | 显示全部楼层
哦 ,我头都大了 汇编一点都不懂
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-8-28 19:10:29 | 显示全部楼层
你的代码有问题,运行出错。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-8-29 09:26:54 | 显示全部楼层
就是有问题啊 ,不知道怎么解决
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-8-29 09:40:00 | 显示全部楼层
这是嵌入式么?怎么和C好像啊
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-8-29 10:50:29 | 显示全部楼层
C++ 嵌入 汇编 【救命】 jmp call V
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-8-29 12:46:06 | 显示全部楼层
wangyonglin 发表于 2014-8-29 09:26
就是有问题啊 ,不知道怎么解决

按你说的jmp run 也不可以的。你得先有一种办法行得通啊,才考虑其他办法啊
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-12 17:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表