PythonでJITから文字出力するため、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]については、以下を参照してください。