【お知らせ】プログラミング記事の投稿はQiitaに移行しました。

PythonでJITからコールバック

PythonJITから文字出力するため、sys.stdout.writeのラッパーを定義してコールバックさせてみました。ラッパーのアドレスを引数で渡しています。

ctypesチュートリアルにも記載されているように、libcの標準出力関数を使うとIDLEなどで正常に動作しません。それを回避するためPython側にコールバックさせています。

Pythonで関数の型を指定するというのが印象的です。

  • CFUNCTYPE(c_int, c_int)は.NETのFunc<int, int>を連想します。
  • c_ubyteの配列はJavaScriptのtyped arrayを連想します。

call [esp+8]については、以下を参照してください。