今日は呼び出し規約とアセンブリについて勉強します。
【テキスト】
- 「呼出規約とは」https://kagasu.hatenablog.com/entry/2017/12/18/213255
- 「WinDBG Cheatsheet」https://dblohm7.ca/pmo/windbgcheatsheet.html
- 「いまどきのデバッグテクニック」http://jasst.jp/archives/jasst05w/pdf/S3-3.pdf
- 「IMEハッカーズ☆」https://katahiromz.web.fc2.com/colony3rd/imehackerz/ja/
hello13のbuild.cmdを参照。gcc/g++に-Sオプションを追加することで汗が吐き出される。
【課題3】
- hello13.cppとhello13.asmを参照し、「cfunc」と「stdfunc」を比較して下さい。
- 「ccaller」と「stdcaller」を比較して下さい。
- テキストの「呼出規約とは」を参照し、この違いを説明して下さい。
【課題4】
$(REACTOS)/output-MinGW-i386/modules/rostests/apitests/imm32 にimm32_apitest.exeがある。これはimm32に対するテストプログラムだ。
- Win2k3上でこのファイルを使って「imm32_apitest」「imm32_apitest himc」を実行せよ。
- 自前でビルドしたReactOS上で「cd \ReactOS\bin」「imm32_apitest himc」を実行せよ。
- テスト結果を保存し比較せよ。
「failures」というのは、失敗ということです。この失敗数を減らすのが最初の仕事です。
【豆知識1】 コマンドプロンプトで「imm32_apitest himc > test.txt」のように「>」を使うと出力をtest.txtに保存できます。
【豆知識2】 「git clone https://github.com/katahiromz/ImeStudy 」でkatahiromz/ImeStudyをダウンロードできます。 ImeStudyフォルダの中で「git pull」を実行すると最新の状態になります。
【課題5】katahiromz/ImeStudy/ARTICLES
のhello14を参照。これは自己参照構造体NODEの実装例である。
- ビルドして実行せよ。
- 「//deleteNode(g_pHead, ...」という行の最初の「//」を取り除いて再びビルドして実行せよ。※コンソールプログラムで無限ループにおちいった場合はCtrl+Cで強制終了できる。
- deleteNode関数を修正して正しく実行されるようにせよ。
C++のnew/delete演算子は、C言語にはない。代わりにmalloc/freeなどを使用することになる。 PNODE&といった参照型も、C言語にはない。
【課題5】 課題4のテスト結果について、 imm32_apitestソースの $(REACTOS)/modules/rostests/apitests/imm32 を参照し、失敗理由を簡単に考察せよ。
【豆知識3】 ちょっとした図を描きたいときは、「http://draw.io」「いらすとや」「Inkscape」などを使うとよいでしょう。 画像形式にSVGを使うと劣化なしで図を保存できます。
【豆知識4】 電源の「スリープ」「休止状態」を使うとパソコンを早く再起動できる。 「休止状態」がないときは電源の追加設定で。
【豆知識5】 このページの右上を使うと高速grepができる:https://git.reactos.org/?p=reactos.git;a=summary
今日はここまで。