実行形式ファイルのエントリポイントへのfar callをやめてretfによるレジスタの値の切り替えを行ったら、qemuのアボートがなくなり、変わりに一般保護例外が発生するようになった。それで下のブログエントリの
char* data = new char[segsize];
を
char* data = (char*)0;
に変えたところ、何故だかファイルを実行でき、文字列も取得できるようになっていた。後はnewで確保したアドレスをデータセグメントのベースにできればうまくいくわけだけど、一般保護例外。どうしたものか