我正在努力将 Mumble 移植到 Windows RT(使用越狱),我遇到了一个问题,即当 Mumble 加载时,这个功能会被破坏。
Mumble(腐败功能):
0:000> DQ user32.dll中+ 0x023918
77a63918 47c3004244696841 4770df01
0c16f241
77a63928 4770df01 0c18f2410c17f241 4770df01
77a63938
4770df01 0c1af241 77a63948 4770df01 0c1cf241 77a639580c19f241 4770df01
4770df01
0c1ef2410c1bf241 4770df01
77a63968
4770df010c1df241 4770df01
5c81f44f
77a639780c1ff241 4770df01
4770df01
0c22f2410c21f241 4770df01
77a63988
4770df010c23f241 4770df01
0c24f241
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 4770df01
0c16f241
77a63928 4770df01 0c18f2410c17f241 4770df01
77a63938
4770df01 0c1af241 77a63948 4770df01 0c1cf241 77a639580c19f241 4770df01
4770df01
0c1ef2410c1bf241 4770df01
77a63968
4770df010c1df241 4770df01
5c81f44f
77a639780c1ff241 4770df01
4770df01
0c22f2410c21f241 4770df01
77a63988
4770df010c23f241 4770df01
0c24f241
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 代码中的特定于平台的钩子导致了我的麻烦。解决了。