Hasty Briefsbeta

双语

The case of the invalid function pointer when shutting down the display control panel - The Old New Thing

2 days ago
  • 由于无效的窗口过程地址,在销毁属性表时显示控制面板发生崩溃。
  • 无效地址是由于64位指针被截断为32位然后进行符号扩展,导致无效的内核模式地址。
  • 通过将低32位与进程模块列表中的有效用户模式地址进行匹配,识别正确的窗口过程。
  • 该错误是由C++代码中强制转换为LONG而不是LONG_PTR导致的,截断了原始指针。
  • 修复方法是在二进制中进行一个字节的补丁:将指令从movsxd(32位符号扩展)改为mov(64位加载)。