笨笨的小张 2016-11-07 10:20 采纳率: 0%
浏览 1177

关于C++的HOOK为什么写内存的地址不对

// ConsoleApplication2.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include
#include
#include
using namespace std;
void test() {
printf_s("测试\n");
}
void test1() {
printf_s("hook\n");
}
char* toChar(DWORD dword) {
char buff[5] = { 0,0,0,0,0 };
memcpy(buff, &dword, sizeof(DWORD));
string cmd = string(buff);
reverse(cmd.begin(), cmd.end());
return buff;
}
int getLength(char * data) {
return sizeof(data) / sizeof(data[0]);
}
char * addChar(char* cru, char* newChar,int crulength ,int newCharLength) {
int size = crulength + newCharLength;
char * re = new char[size];
for (int i = 0;i < crulength;i++) {
re[i] = cru[i];
}
for (int i = 0;i < newCharLength;i++) {
re[i + crulength] = newChar[i];
}
return re;

}
char* hook(void* fun, void* newFun) {
char top[5];
DWORD addr;
__asm {
mov eax, newFun
mov addr, eax
}
char *newCode = toChar(addr);
char jmp[1] = { 233 };
newCode = addChar(newCode, jmp, 4, 1);
DWORD dwFlag;
VirtualProtect(fun, 5, PAGE_EXECUTE_READWRITE, &dwFlag);
memcpy(top, fun, 5);
memcpy(fun, newCode, 5);
printf("%p\n",addr);
printf("%p\n", fun);
VirtualProtect(fun, 5, dwFlag, &dwFlag);
return top;
}
int main()
{
hook(test, test1);
test();
system("pause");
return 0;
}

  • 写回答

1条回答 默认 最新

  • 笨笨的小张 2016-11-07 10:24
    关注

    程序报错,无法正确hook到test1方法里面去...好纠结

    评论

报告相同问题?

悬赏问题

  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥15 绘制多分类任务的roc曲线时只画出了一类的roc,其它的auc显示为nan
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?