while(pThunk->u1.Function)
{
// lpAddr指向的内存保存了函数的地址
DWORD* lpAddr = (DWORD*)&(pThunk->u1.Function);
if(*lpAddr == (DWORD)g_orgProc)
{
// 修改IAT表项,使其指向我们自定义的函数,相当于“*lpAddr = (DWORD)MyMessageBoxA;”
DWORD* lpNewProc = (DWORD*)MyMessageBoxA;
::WriteProcessMemory(::GetCurrentProcess(),
lpAddr, &lpNewProc, sizeof(DWORD), NULL);
return TRUE;
}
描述:修改带入表中函数的地址,
问题: ::WriteProcessMemory(::GetCurrentProcess(), lpAddr, &lpNewProc, sizeof(DWORD), NULL);
这个函数中传递的为什么是&lpNewProc,lpNewProc不就是保存了我定义的函数MyMessageBoxA的地址吗
传递lpNewProc就相当于向内存中写入了这个函数的地址,在这里却传递的是&lpNewProc
很不理解,麻烦大家了
{
// lpAddr指向的内存保存了函数的地址
DWORD* lpAddr = (DWORD*)&(pThunk->u1.Function);
if(*lpAddr == (DWORD)g_orgProc)
{
// 修改IAT表项,使其指向我们自定义的函数,相当于“*lpAddr = (DWORD)MyMessageBoxA;”
DWORD* lpNewProc = (DWORD*)MyMessageBoxA;
::WriteProcessMemory(::GetCurrentProcess(),
lpAddr, &lpNewProc, sizeof(DWORD), NULL);
return TRUE;
}
描述:修改带入表中函数的地址,
问题: ::WriteProcessMemory(::GetCurrentProcess(), lpAddr, &lpNewProc, sizeof(DWORD), NULL);
这个函数中传递的为什么是&lpNewProc,lpNewProc不就是保存了我定义的函数MyMessageBoxA的地址吗
传递lpNewProc就相当于向内存中写入了这个函数的地址,在这里却传递的是&lpNewProc
很不理解,麻烦大家了
解决方案 »
- 32位程序怎么调64位activex控件
- VC++ ADO和SQL SERVER
- 为啥我的ATL控件类中不能使用std?
- 保存绘图时,绘图矩形区域被对话框遮住了
- 如何实现与遨游浏览器类似的鼠标右键绘图的功能
- 请问 Rational Rose 与Poseidon For UML 功能上有什么区别??
- 请问如何实现一个定时下载以及上传的程序?
- 来者都有分:那位大虾总结过Visual C++ 6.0开发环境的快捷键或者是使用小技巧?
- 怎样用串口接收数据?
- 我的老师给我一个关于模式识别的课题,可我还没接触过,有人知道吗?请给点忠告,谢谢。
- 如何获取显卡显存总的大小和可用的大小
- 关于windows编程 static 上显示位图
终于有人回帖了 呵呵