在 Winx64 上使用 User32InitializeImmEntryTable?
Using User32InitializeImmEntryTable on Winx64?
https://github.com/jay/gethooks 使用 User32InitializeImmEntryTable 获取 SharedInfo,后者又用于获取全局事件挂钩列表。
该程序适用于 Win32 但不适用于 Win7x64,如何解决?
存在不同的问题,具体取决于您是为 Win32 还是 x64 构建。
在 x64 构建中,有问题的代码来自 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 程序将使社区受益,无论哪种方式最终都会得到修复。任何反对票,我保证会立即删除。
在Windows7中很简单:
SHAREDINFO *SharedInfo = (SHAREDINFO *)GetProcAddress(LoadLibraryA("user32"), "gSharedInfo");
但是 Windows 8/10 是另一回事,我将提出一个新问题。
https://github.com/jay/gethooks 使用 User32InitializeImmEntryTable 获取 SharedInfo,后者又用于获取全局事件挂钩列表。
该程序适用于 Win32 但不适用于 Win7x64,如何解决?
存在不同的问题,具体取决于您是为 Win32 还是 x64 构建。
在 x64 构建中,有问题的代码来自 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 程序将使社区受益,无论哪种方式最终都会得到修复。任何反对票,我保证会立即删除。
在Windows7中很简单:
SHAREDINFO *SharedInfo = (SHAREDINFO *)GetProcAddress(LoadLibraryA("user32"), "gSharedInfo");
但是 Windows 8/10 是另一回事,我将提出一个新问题。