はじめて読む8086 ノート
実行型ファイルをダンプする
DUMP
MS-DOS では TYPE
でファイル内容を表示できる(*nix の cat
と同じ)
TYPE
はインボックスコマンド
バイナリを表示するには DUMP
(NEC のいわゆる PC98 系 DOS では標準添付らしい)
DUMP
で出力された内容を ダンプリスト と呼ぶ
ダンプリスト左端はアドレス(ファイル先頭からの位置)
ダンプリスト中央にある16進数(バイト)が列挙されてる部分がマシン語プログラム(バイトコード)を表している。
その実体は、「実行プログラム」と「プログラム内で用いるデータ」に分かれているが、ダンプリストですぐに見分けがつくわけではない。
ダンプリスト右端は、バイトコードをキャラクタコードで表現したときの内容。
ただしバイトで表現可能な数値はキャラクタコードの範疇を超えることがあるため、そのような場合はピリオドで表現される。
また、キャラクタコードで 'P' という文字が引き当てられたとしても、それが「実行プログラムの一部」なのか「プログラム内で用いるデータの一部」なのかは場合による。
CDUMP
CDUMP
は DUMP
のキャラクタコードのみバージョンで Shift-JIS も表示できる。
手元の環境ではマルチバイトが文字化けしてしまうのでいまいち確認できず。
実行型ファイルのメッセージを変更する
DEBUG
DUMP
のようなダンプリスト表示の他、マシン語プログラムを入力・変更・実行できる。
メモリの内容を操作するためのエディタ。
全ての外部コマンドはメモリ上に読み込まれてから実行される。
起動方法は以下
> DEBUG [FILE_NAME]
DEBUG
コマンドが起動すると専用のインタラクティブシェルに移る。
case sensitive ではない。
コマンド | 機能 |
---|---|
D | メモリの内容を表示する(ダンプ) |
E | メモリの内容を変更する |
W | メモリの内容をファイルに書き込む |
Q | 終了 |
D(ダンプ)
// XXXX アドレスから YYYY アドレスまでをダンプする
> D XXXX YYYY
// XXXX アドレスから 128 アドレス分ダンプする
> D XXXX
// 最後に実行した D コマンドのアドレスから 128 アドレス分をダンプ(初回時は 0100 アドレスからスタート)
> D
左端アドレス部の表示は「(セグメントアドレス):(オフセットアドレス)」というフォーマットになっている。
オフセットアドレスは単に「アドレス」と呼ぶこともある。
E(メモリ内容変更)
基本の使い方はコレ
> E XXXX
- アドレス XXXX からメモリ内容を変更するモードに入る
- XXXX のバイトコードが表示されるので変更内容を入力
- 「スペース」を押すと次のアドレスが表示されるので同じく入力
... というカンジでえんえんと入力できる。
おわったらエンター
ただしバイトごとにいちいちインタラクティブにやる必要が無いならまとめていける
// アドレス XXXX からの内容を ** ... に変える
> E XXXX **,**,**,** (エンター)
// アドレス XXXX からの内容をキャラクタコード aiueo に対応するバイトコードに変える
> E XXXX 'aiueo' (エンター)
W(メモリ内容のファイル書き出し)
引数も無く、これだけで現在のメモリ内容が上書き保存される。結構あぶないなこれ。