对于挂接API函数的方法大概有两种,
1)通过修改输入节中的函数地址,
2)用JMP指令修改函数的头几个字节(一般为七个字节)。对于第二种方法,我有个不懂的地方:修改函数的头几个字节是不是用来修改它的基址?函数的那个 头几个字节的形式是怎样的?为什么只是修改五个字节?而不是8个字节(地址)?请高手们指点迷津,谢谢!这是 dongfa(一个红角好多年了~~~) 回复的:指令如下:
// mov eax, pNewFuncAddr
// jmp eaxchar chOldCode[7]; // 备份旧函数地址前7个字节
char chNewCode[7]; // 新的数据
....DWORD dwTemp = (DWORD)pNewAddr;
chNewCode[0] = 0xB8;
memcpy(chNewCode + 1, &dwTemp, sizeof(DWORD));
chNewCode[5] = 0xFF;
chNewCode[6] = 0xE0;
谢谢 dongfa(一个红角好多年了~~~) 再问个问题:
这些字节各自代表着什么含义?
1)通过修改输入节中的函数地址,
2)用JMP指令修改函数的头几个字节(一般为七个字节)。对于第二种方法,我有个不懂的地方:修改函数的头几个字节是不是用来修改它的基址?函数的那个 头几个字节的形式是怎样的?为什么只是修改五个字节?而不是8个字节(地址)?请高手们指点迷津,谢谢!这是 dongfa(一个红角好多年了~~~) 回复的:指令如下:
// mov eax, pNewFuncAddr
// jmp eaxchar chOldCode[7]; // 备份旧函数地址前7个字节
char chNewCode[7]; // 新的数据
....DWORD dwTemp = (DWORD)pNewAddr;
chNewCode[0] = 0xB8;
memcpy(chNewCode + 1, &dwTemp, sizeof(DWORD));
chNewCode[5] = 0xFF;
chNewCode[6] = 0xE0;
谢谢 dongfa(一个红角好多年了~~~) 再问个问题:
这些字节各自代表着什么含义?
解决方案 »
- win32是什么意思 ,和windows操作系统是什么关系
- DirectX SDK版本问题
- sliderctrl的联动问题
- ######不同子网 UDP 通讯问题,盼复!!!!
- 如何生成*.olb文件?
- 怎样在程序中动态改变Botton控制的位置,以及怎样在Botton上放一张图片
- 语音问题,语音采集时用单声道,还是双声道?回放的时候一定要和采集的时候统一吗?即,采集用单声道,那么回放也用单声道,采集用双声道
- 那位能帮忙解决一下识别硬盘序列号的问题
- 有篇介绍BHO的文章,但是有些内容不全,有知道的朋友吗?
- 虽然前面已经有人提出,但拜托有《COM原理与应用》源程序的朋友给我一份!
- 如何为自己的菜单“删除”功能添加Delete键的快捷键?
- VC与RS232口的编程
the rest 4 bytes are just the address0xFF 0xE0 should be jmp eax.In this code, 7 bytes are modified, so there needs to be saved.It's possible to modify 5 bytes only using relative jump instruction: pProc[0] = 0xE9;
* (unsigned *) (pProc+1) = (unsigned)pNewProc - (unsigned) (pProc+5);Check http://www.fengyuan.com/article/wmprint.html
mov eax,你的处理代码入口
jmp eax
实现控制权的获得