「項書き換え機能付きプログラム」のディスアセンブラの作成, coding(41)

項書き換え機能付きプログラムは、そのプログラムが自分自身の命令を書き換える場合を指します。データの項目を書き換える場合は、ここでは含みません。ただし、プログラムの流れを、データを書き換えることによって実現する場合には、似たような現象があるかもしれません。

ゲームソフトウェアでは、内容を読まれないようにするためなどで、自分のプログラムの中身を、プログラム自身で書き換えてから実行するものがありました。

それらのプログラムのデバッグを依頼され、項書き換え機能の付いたソフトウェアをディスアセンブルするソフトウェアを自作したことがあります。

バイナリデータまたはメモリのバイナリの状態を読み込んで、intel 8086のアセンブラを生成するものです。

<この項は書きかけです。順次追記します。>
This article is not completed. I will add some words in order.
# 第一段階　静的ディスアセンブル
プログラムの起動位置から、バイナリデータを読み込んで、アセンブラのソースコードに変換していきます。ファイルを全部済ませたら終了します。

ひとつながりのプログラムで、プログラム項目の書き換えがなければ、これで終了です。

# 第二段階　一度の書き換え
プログラムの初期段階で、メモリの中身を書き換える機能があれば、その部分を、ディスアセンブラから呼び出して実行を模擬試験(simulation)します。メモリの中身を書き換えを終えた状態で、その書き換えた番地に飛ぶ命令があれば、飛んだところからディスアセンブルを再開します。

この項書き換えが１度だけであれば、対応はさほど難しくはありませんでした。

# 第三段階　複数回の書き換え
項書き換えが何度あるかがわかっていないと、項書き換え後のメモリの中に、また項書き換えの機能があるかを自動的に探すソフトにしないといけないため、やや複雑そうです。どこまでが項書き換え機能で、どこが単なるデータなのか。

ジャンプ命令がないなと思ったら、データ領域だと思っているところに、コードがあってそこからJMPしているとか。

厳密な設計にしようとすると複雑になりすぎて、第二段階だけで断念しました。

# 備考
Basicで作成しました。

# 参考文献
項書換えシステムからLispプログラムへの変換系, 戸村哲、二木厚吉, ソフトウェア基礎論17-11, 情報処理学会, 1986 
http://bit.ly/2CMSr7p

p.s.
Z80のディスアセンブラの作成を依頼されたこともあります。しかし、Z80はパチンコの当選確率の演算で用いるものがあり、悪用される可能性が確認できなかったためお断りした記憶があります。

アセンブラへの道
https://qiita.com/kaizen_nagoya/items/46f2333c2647b0e692b2

アセンブラへの道(2) 
https://qiita.com/kaizen_nagoya/items/2a0bd88216bc51278be5

intel: アセンブラへの道入り口
https://qiita.com/kaizen_nagoya/items/0bf939143593fbb7114a

## 自己参照
物理記事　上位100
https://qiita.com/kaizen_nagoya/items/66e90fe31fbe3facc6ff

数学関連記事１００
https://qiita.com/kaizen_nagoya/items/d8dadb49a6397e854c6d

言語・文学記事　１００
https://qiita.com/kaizen_nagoya/items/42d58d5ef7fb53c407d6

医工連携関連記事一覧
https://qiita.com/kaizen_nagoya/items/6ab51c12ba51bc260a82

通信記事１００
https://qiita.com/kaizen_nagoya/items/1d67de5e1cd207b05ef7

自動車　記事　１００
https://qiita.com/kaizen_nagoya/items/f7f0b9ab36569ad409c5

Qiita(0)Qiita関連記事一覧（自分）
https://qiita.com/kaizen_nagoya/items/58db5fbf036b28e9dfa6

鉄道（０）鉄道のシステム考察はてっちゃんがてつだってくれる
https://qiita.com/kaizen_nagoya/items/26bda595f341a27901a0

日本語（０）一欄
https://qiita.com/kaizen_nagoya/items/7498dcfa3a9ba7fd1e68

英語(0) 一覧
https://qiita.com/kaizen_nagoya/items/680e3f5cbf9430486c7d

転職(0)一覧
https://qiita.com/kaizen_nagoya/items/f77520d378d33451d6fe

仮説（0）一覧（目標100現在40）
https://qiita.com/kaizen_nagoya/items/f000506fe1837b3590df

安全（0）安全工学シンポジウムに向けて: 21
https://qiita.com/kaizen_nagoya/items/c5d78f3def8195cb2409

Error一覧 error(0)
https://qiita.com/kaizen_nagoya/items/48b6cbc8d68eae2c42b8

Ethernet 記事一覧　Ethernet(0)
https://qiita.com/kaizen_nagoya/items/88d35e99f74aefc98794

Wireshark 一覧 wireshark(0)、Ethernet(48) 
https://qiita.com/kaizen_nagoya/items/fbed841f61875c4731d0

線網（Wi-Fi）空中線(antenna)(0) 記事一覧(118/300目標)
https://qiita.com/kaizen_nagoya/items/5e5464ac2b24bd4cd001

OSEK OS設計の基礎　OSEK(100)
https://qiita.com/kaizen_nagoya/items/7528a22a14242d2d58a3

官公庁・学校・公的団体（NPOを含む）システムの課題、官（０）
https://qiita.com/kaizen_nagoya/items/04ee6eaf7ec13d3af4c3

Error一覧(C/C++, python, bash...) Error(0)
https://qiita.com/kaizen_nagoya/items/48b6cbc8d68eae2c42b8

C++ Support(0)　
https://qiita.com/kaizen_nagoya/items/8720d26f762369a80514

Coding Rules(0) C Secure , MISRA and so on 
https://qiita.com/kaizen_nagoya/items/400725644a8a0e90fbb0

なぜdockerで機械学習するか 書籍・ソース一覧作成中 (目標100)
https://qiita.com/kaizen_nagoya/items/ddd12477544bf5ba85e2

言語処理100本ノックをdockerで。python覚えるのに最適。:10+12
https://qiita.com/kaizen_nagoya/items/7e7eb7c543e0c18438c4

プログラムちょい替え（0）一覧:4件
https://qiita.com/kaizen_nagoya/items/296d87ef4bfd516bc394

TOPPERSまとめ　#名古屋のIoTは名古屋のOSで
https://qiita.com/kaizen_nagoya/items/9026c049cb0309b9d451

自動制御、制御工学一覧（０）
https://qiita.com/kaizen_nagoya/items/7767a4e19a6ae1479e6b

プログラマが知っていると良い「公序良俗」
https://qiita.com/kaizen_nagoya/items/9fe7c0dfac2fbd77a945

一覧の一覧( The directory of directories of mine.) Qiita(100)
https://qiita.com/kaizen_nagoya/items/7eb0e006543886138f39

自動制御、制御工学一覧（０）
https://qiita.com/kaizen_nagoya/items/7767a4e19a6ae1479e6b

小川清最終講義、小川清最終講義（再）計画, Ethernet(100) 英語(100) 安全(100)
https://qiita.com/kaizen_nagoya/items/e2df642e3951e35e6a53

＜この記事は個人の過去の経験に基づく個人の感想です。現在所属する組織、業務とは関係がありません。＞
This article is an individual impression based on the individual's experience. It has nothing to do with the organization or business to which I currently belong.
#### 文書履歴(document history)
ver. 0.01 初稿 　20180227
ver. 0.02 add url 20240530
### 最後までおよみいただきありがとうございました。
いいね　💚、フォローをお願いします。
#### Thank you very much for reading to the last sentence.
Please press the like icon 💚　and follow me for your happy life.