【お知らせ】プログラミング記事の投稿はQiitaに移行しました。x86-1616bitのx86コードに触れたくなりました。2は16bitと32bitの両方に対応しています。16bitの方は80286のプロテクトモードを使用しているためリアルモードではありません。カーネルではなくユーザープログラムの動きを追いたいので、ユーザーだけを見ている限りはリアルモードとの違いは少ないのではないかと予想しています。詳しいことは触りながら調べてみる予定です。Versionsから入手できます。Intel-2.0.4.tar.bz2展開すると、中には更にアーカイブが入っています。そこからバイナリやソースが入手できます。16bitに関連するファイルを挙げます。カーネルのNICに関する差し替え(→パッチ化したもの)今回はOSのインストールではなくバイナリ調査が目的ですが、USR.TAZを展開するだけで簡単に入手できました。1の方が単純で調べやすいのかもしれません。1.7.5と2.0.4のファイルサイズを比較すると、バイナリとソースのファイルサイズは大差ありません。配布物のサイズが倍近く違うのはドキュメント量の差のようです。3,414,449とりあえず2で始めて、複雑過ぎるようであれば1を検討しようかと思います。シェルスクリプトusr/binにはシェルスクリプトが混ざっています。executableこれらを除外して小さい順に並べます。loadkeys(略)yesが取っ付きやすそうです。fileコマンドでは以下のように識別されます。ヘッダにOSを識別する情報が入っていないようです。executable逆アセンブラコマンドを眺めると、dis88という逆アセンブラを見付けました。ソースから再コンパイルすれば手元の環境(MSYS)でも動きました。Makefileを修正します。/usr/bin/dis88usr/includeからa.out.hとansi.hをコピーします。POSIXに準拠したソースらしく、修正なしですんなりmakeが通りました。bx,#14(略)オペランドの並びはIntel形式ですが、*や#などの記号が独特です。バイナリが併記されないため、オペコードの調査には一手間掛かりそうです。先ほどコピーしたa.out.hを見ると、ヘッダ情報が分かります。*/};a_hdrlenとa_textを見れば.textだけを抽出できそうです。Pythonで抽出スクリプトを書きました。f.write(text)yesから.textを抽出して、objdumpで逆アセンブルします。-bで生バイナリ、-mで16bit、-MでIntel形式、-Dでファイル全体の逆アセンブルを指定します。bx,0xe(略)NASMに含まれるndisasmでも逆アセンブルしてみます。オプションが必要ないため簡単です。bx,0xe(略)先ほどのdis88とフォーマットがやや異なりますが、内容は一致しています。バイナリが併記されているので便利です。objdumpを使うかndisasmを使うかは好みです。2のバイナリを入手して逆アセンブルする所までできました。2事始めTweet広告を非表示にする関連記事2013-07-208086版V6のa.out8086版V6のa.outはマジックナンバーで識別することにしました。前回、インタプリタを複数のCPUやOSに対応させる過程を書きまし...2013-07-18ACKメモ8086(16bitのx86)をサポートするコンパイラとしてACKが使える...2013-07-01MINIXのexitシステムコールを追う前回、アセンブラからシステムコールを呼ぶ例を示しました。(1)はてなブログをはじめよう!n7shiさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。