Skip to content

Latest commit

 

History

History
92 lines (67 loc) · 2.1 KB

2022-04-09.md

File metadata and controls

92 lines (67 loc) · 2.1 KB

2022-04-09

さてと。

デバッガ KDB の使い方

ReactOSのデバッガKDBのチートシートを作成した。 ReactOSでデバッグするときに参考にしてくれ。 https://github.com/katahiromz/reactos-kdb-cheatsheet

調査の結果、 IMM32!ImmLockIMCはIMM32!InternalImmLockIMCへの呼び出しがあることが分かった。 また、IMM32!ImmUnlockImeDpiにIMM32!UnloadIMEへの呼び出しがあった。 そして

  • IMM32!ImmDestroyIMCC
  • IMM32!ImmLockIMC
  • IMM32!ImmLockImeDpi
  • IMM32!ImmUnlockClientImc
  • IMM32!ImmUnlockIMC
  • IMM32!InternalImmLockIMC
  • IMM32!UnloadIME

には問題は見つからなかった。

IMM32!ImmUnlockImeDpiについては、

(逆工学のため、掲載不可)

この部分が、ReactOSでは

    /* Remove from list */
    for (ppEntry = &gpImeDpiList; *ppEntry; ppEntry = &((*ppEntry)->pNext))
    {
        if (*ppEntry == pImeDpi) /* found */
        {
            *ppEntry = pImeDpi->pNext;
            break;
        }
    }

になっているだけだった。この二つは同じ動作のコードである(確認せよ)。

if-else への置き換え

連続したコードについて、

if (...EXP1...) {
    ...CODE1...
    goto label2;
}
...CODE2...
label2:

というコードは、

if (...EXP1...) {
    ...CODE1...
} else {
    ...CODE2...
}
label2:

に置き換え可能。

インデントについて

インデントについては知っているかな? インデントは、コードの制御構造を視覚的に分かりやすくするから重要だ。 コーディングスタイルについては https://reactos.org/wiki/Coding_Style を参照。

これでユーザ側の入力コンテキストの破棄には問題はないと分かった。 次回は、カーネル側の入力コンテキストの破棄について調べる。

【課題】 win32k!NtUserDestroyInputContextを解読せよ。

解読できた関数については、decodedというフォルダに保存して整理しておいてくれ。

今日はここまで。


戻る | 次へ