https://github.com/jay/gethooks使用User32InitializeImmEntryTable来获取SharedInfo,而SharedInfo又用于获取全局事件挂钩列表。
该程序适用于Win32但不适用于Win7x64,如何修复?
根据您是为Win32还是x64构建,存在单独的问题。
在x64 build上,失败的代码来自prog.c:
p = (char *)User32InitializeImmEntryTable;
for( i = 0; i < 127; ++i )
{
if( ( *p++ == 0x50 ) && ( *p == 0x68 ) )
{
*( (char *)&SharedInfo + 0 ) = *++p;
*( (char *)&SharedInfo + 1 ) = *++p;
*( (char *)&SharedInfo + 2 ) = *++p;
*( (char *)&SharedInfo + 3 ) = *++p;
break;
}
}
找不到0x50,0x68(推送eax)。
在Win32上构建上述工作,但EnumDesktopsW没有,在desktop.c的add_all_desktops函数中。
此外,我不确定修复该部分是否允许程序在x64上正常运行,但我认为这是一个开始。我也不确定构建Win32或x64可执行文件是否更好,哪一个更容易让它运行?
我希望这是一个很好的问题,AFAIK获取创建全局钩子的应用程序列表是一件好事,比如寻找键盘记录器,故障排除或w / e。因此,修复gethooks计划将有益于社区,这最终将被修复。任何downvote,我会立即删除我保证。
答案 0 :(得分:1)
在Windows 7中,它非常简单:
SHAREDINFO *SharedInfo = (SHAREDINFO *)GetProcAddress(LoadLibraryA("user32"), "gSharedInfo");
但Windows 8/10是一个不同的故事,我将打开一个新问题。