我正在努力将 Mumble 移植到 Windows RT(使用越狱),我遇到了一个问题,即当 Mumble 加载时,这个功能会被破坏。
Mumble(腐败功能):
0:000> DQ user32.dll中+ 0x023918
77a63918 47c3004244696841 4770df010c16f241
77a63928 4770df01 0c18f2410c17f241 4770df0177a63938
4770df01 0c1af241 77a63948 4770df01 0c1cf241 77a639580c19f241 4770df014770df01
0c1ef2410c1bf241 4770df0177a63968
4770df010c1df241 4770df015c81f44f
77a639780c1ff241 4770df014770df01
0c22f2410c21f241 4770df0177a63988
4770df010c23f241 4770df010c24f241
0:000>üuser32.dll中+ 0x023918
* ERROR:符号文件能找不到。
默认为C:\windows\system32\user32.dll导出符号-
user32!WindowFromPoint:
77a63918 6841 ldr r1,[r0,#4]
77a6391a 4469 add r1,r1,sp
77a6391c 0042 lsls r2,r0,#1
77a6391e 47c3 ?blx r8
77a63920 f2410c16 mov r12,#0x1016
77a63924 df01 svc #1
TeXworks(预期输出):
0:000> DQ user32.dll中+ 0x23918
77a63918 4770df010c15f241 4770df010c16f241
77a63928 4770df01 0c18f2410c17f241 4770df0177a63938
4770df01 0c1af241 77a63948 4770df01 0c1cf241 77a639580c19f241 4770df014770df01
0c1ef2410c1bf241 4770df0177a63968
4770df010c1df241 4770df015c81f44f
77a639780c1ff241 4770df014770df01
0c22f2410c21f241 4770df0177a63988
4770df010c23f241 4770df010c24f241
0:000>üuser32.dll中+ 0x23918
* ERROR:符号文件能找不到。默认为 C:\windows\system32\USER32.dll 导出符号 - USER32
!WindowFromPoint:
77a63918 f2410c15 mov r12,#0x1015
77a6391c df01 svc #1
77a6391e 4770 bx lr
77a63920 f2410c16 mov r12,#0x1016
77a63924 df01 svc #1
77a63926 4770 bx lr
77a63928 f2410c17 mov r12,#0x1017
77a6392c df01 svc #1
(抱歉,代码的格式不太好,可以在此处找到窗口的屏幕截图:http: //i.imgur.com/M6mLHN1.png)
Mumble 使用 Qt(据我了解,由 Mumble 团队定制),Protobuf、Boost 和 OpenSSL TeXworks 使用 Qt
到目前为止我已经尝试过:
禁用应用程序兼容性引擎
在加载时卸载 user32.dll,然后重新加载它(调用 FreeLibrary 100 次,然后调用 LoadLibrary)
从清单中删除任何看起来甚至很可疑的东西(来自 Qt 和 Mumble)
删除整个清单(来自 Qt 和 Mumble)
如果我在 Mumble 启动后使用 cdb 修补这个函数,它的效果会非常好,但如果我不修补它,执行的第一个调用该函数的操作会以崩溃告终。打开/关闭窗口并拖动都调用该函数,因此它的存在对程序来说相当重要。
对此的任何帮助或指示将不胜感激。
编辑:我已经验证它是 mainCRTStartup 里面的东西,它正在弄乱它,试图弄清楚它现在到底是什么。
编辑 2:发现隐藏在 Mumble 代码中的特定于平台的钩子导致了我的麻烦。解决了。