Mumble を Windows RT に (脱獄を使用して) 移植する作業を行っていますが、Mumble の読み込み時にこの 1 つの関数が破損するという問題に遭遇しました。
つぶやく(破損した機能):
0:000> dq user32.dll+0x023918
77a63918 47c3004244696841 4770df01
0c16f241
77a63928 4770df01 0c18f241 77a63938 4770df01 0c1af241 77a63948 4770df010c17f241 4770df01
0c1cf241
77a63958 4770df01 0c1ef2410c19f241 4770df01
77a63968
4770df010c1bf241 4770df01
5c81f44f
77a639780c1df241 4770df01
4770df01
0c22f2410c1ff241 4770df01
77a63988
4770df010c21f241 4770df01
0c24f241
00c23f241 4770df01
:
000> u user32.dll+0x023918
* ERROR: Symbol file could見つかりません。
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 0c18f241 77a63938 4770df01 0c1af241 77a63948 4770df010c17f241 4770df01
0c1cf241
77a63958 4770df01 0c1ef2410c19f241 4770df01
77a63968
4770df010c1bf241 4770df01
5c81f44f
77a639780c1df241 4770df01
4770df01
0c22f2410c1ff241 4770df01
77a63988
4770df010c21f241 4770df01
0c24f241
00c23f241 4770df01
:
000> u user32.dll+0x23918
* ERROR: Symbol file could見つかりません。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 を使用してこの 1 つの関数にパッチを適用すると、すべて問題なく動作しますが、パッチを適用しないと、その関数を呼び出す最初のアクションがクラッシュして終了します。ウィンドウの開閉とドラッグはすべてその関数を呼び出すため、そこにあることがプログラムにとって非常に重要です。
これに関するヘルプやポインタは大歓迎です。
編集: mainCRTStartup の内部で何かをいじっていることを確認し、現在の正確な状態を把握しようとしています。
編集 2: 問題を引き起こしている Mumble コードに隠されたプラットフォーム固有のフックが見つかりました。解決しました。