chargeのブログ

人のブログを見て真似して書いていきます。似たブログを見つけたら教えてください。

ブートセクタを勝手に逆アセンブル

2013-03-19 00:36:18 | 科学っぽい思考
 D.CⅢを見ながら勝手にFreeDosのBalder10.imgというフロッピーイメージのマスターブートレコードを逆アセンブルした。
 「Baldr sky」というゲームのタイトルにある「Baldr」と同じ神様なのだがコンピュータの世界で使われているのを発見したのは今のところこれだけで神様自体はラグナロクのきっかけの人でヤドリギで死んだことで有名らしいが、頻度は低いので関係が無くても少しありそうに感じる。
 マスターブートレコードはBIOSによって0000:7C00番地にロードされることになっているので開始はその番地になっている。

0000:7C00 JMP 7C3E  //7C3Eにジャンプ
0000:7C02 db  90 46 72 65 65 44 4f 53 20 00 02 01 01 00 02 E0
0000:7C12 db  00 40 0B F0 09 00 12 00 02 00 00 00 00 00 00 00
0000:7C22 db  00 00 00 00 29 DA 1B 24 3D 42 41 4C 44 45 52 31
0000:7C32 db  32 20 20 20//様々なパラメータ
0000:7C3E CLI       //割り込み禁止
0000:7C3F CLD       //
0000:7C40 XOR AX,AX //初期化
0000:7C42 MOV DS,AX //DSを初期化
0000:7C44 MOV BP,7C00 //BPに7C00を代入する
0000:7C47 MOV AX,1FE0 //AXに1FE0を代入する
0000:7C4A MOV ES,AX   //ESにAXにある1FE0を代入する
0000:7C4C MOV SI,BP   //SIにBPにある7C00を代入する
0000:7C4E MOV DI,BP   //DIにBPにある7C00を代入する
0000:7C50 MOV CX,0100 //CXに0100を代入する
//AX:1FE0 CX:0100 DS:0000 ES:1FE0 BP:7C00  SI:7C00 DI:7C00
0000:7C53 REPZ1 MOVSW //7C00-7CFFを1FE0:7C00にコピー
0000:7C55 JMP 1FE0:7C5E//コピーした先の1FE0:7C5Eにジャンプ
0000:7C56 db 7C B8 E0 1F 8E C0 89 EE//
0000:7C5E MOV DS,AX
0000:7C60 MOV SS,AX
0000:7C62 LEA SP,[BP-60]
0000:7C65 STI
0000:7C66 CMP BYTE PTR [BP+24],FF
0000:7C6A JNZ 7C6F
0000:7C6C MOV [BP+24],DL
0000:7C6F MOV WORD PTR [BP-40],0010
0000:7C74 MOV WORD PTR [BP-3E],0001
0000:7C79 CALL 7D65
0000:7C7C INC SI
0000:7C7D JB 7CE4
0000:7C7F db 65
0000:7C80 INC SP
0000:7C81 DEC DI
0000:7C82 PUSH BX
0000:7C83 ADD [BP+DI+1C76],CL
0000:7C87 MOV DI,[BP+1E]
0000:7C8A ADD SI,[BP+0E]
0000:7C8D ADC DI,+00
0000:7C90 MOV [BP-2E],SI
0000:7C93 MOV [BP-2C],DI
0000:7C96 MOV AL,[BP+10]
0000:7C99 CBW
0000:7C9A MUL WORD PTR [BP+16]
0000:7C9D ADD SI,AX
0000:7C9F ADC DI,DX
0000:7CA1 MOV [BP-2A],SI
0000:7CA4 MOV [BP-28],DI
0000:7CA7 MOV BP,[BP+0B]
0000:7CAA MOV CL,05
0000:7CAC SHR BX,CL
0000:7CAE MOV AX,[BP+11]
0000:7CB1 XOR DX,DX
0000:7CB3 DIV BX
0000:7CB5 MOV [BP-30],AX
0000:7CB8 ADD SI,AX
0000:7CB8 ADC DI,+00
0000:7CBD MOV [BP-26],SI
0000:7CC0 MOV [BP-24],DI
0000:7CC3 MOV AX,[BP-2A]
0000:7CC3 MOV DX,[BP-28]
0000:7CC6 MOV DI,[BP-30]
0000:7CC9 LES BX,[BP+5A]
0000:7CCF CALL 7D6D
0000:7CD2 JB 7D03
0000:7CD4 LES DI,[BP+5A]
0000:7CD7 MOV CX,000B
0000:7CDA MOV SI,7DF1
0000:7CDD PUSH DI
0000:7CDE REPZ
0000:7CDF CMPSB
0000:7CE0 POP DI
0000:7CE1 ES:
0000:7CE2 MOV AX,[DI+1A]
0000:7CE5 JZ 7CF2
0000:7CE7 ADD DI,+20
0000:7CEA ES:
0000:7CEB CMP BYTE PTR [DI],00
0000:7CEE JNZ 7CD7
0000:7CF0 JB  7D4B
0000:7CF2 PUSH AX
0000:7CF3 LES BX,[BP+5A]
0000:7CF6 MOV DI,[BP+16]
0000:7CF9 MOV AX,[BP-2E]
0000:7CFC MOV DX,[BP-2C]
0000:7CFF CALL 7D6D
0000:7D02 POP  AX
0000:7D03 JB FD4B
0000:7D05 PUSH DS
0000:7D06 POP  ES
0000:7D07 MOV DS,[BP+5C]
0000:7D0A MOV DI,2000
0000:7D0D STOSW
0000:7D0E MOV SI,AX
0000:7D10 ADD SI,SI
0000:7D12 ADD SI,AX
0000:7D14 SHR SI,1
0000:7D16 LODSW
0000:7D17 JNB FD1D
0000:7D19 MOV CL,04
0000:7D1B SHR AX,CL
0000:7D1D AND AH,0F
0000:7D20 CMP AX,0FF8
0000:7D23 JB  7D0D
0000:7D25 XOR AX,AX
0000:7D27 STOSW
0000:7D28 PUSH CS
0000:7D29 POP  DS
0000:7D2A LES BX,[BP+5A]
0000:7D2D MOV SI,2000
0000:7D30 LODSW
0000:7D31 OR AX,AX
0000:7D33 JZ FD59
0000:7D35 DEC AX
0000:7D36 DEC AX
0000:7D37 MOV DI,[BP+0D]
0000:7D3A AND DI,00FF
0000:7D3E MUL DI
0000:7D40 ADD AX,[BP-26]
0000:7D43 ADC DX,[BP-24]
0000:7D46 CALL FD6D
0000:7D49 JNB  FD30
0000:7D4B CALL FD65
0000:7D4E AND [DI+72],AH
0000:7D51 JB   FD53
0000:7D53 XOR AH,AH
0000:7D55 INT 16
0000:7D57 INT 19
0000:7D59 MOV BL,[BP+24]
0000:7D5C JMP FAR [BP+5A]
0000:7D5F XOR BX,BX
0000:7D61 MOV AH,0E
0000:7D63 INT 10//Bios interrupt 10h Teletype output
//AH=0Eh AL = Character, BH = Page Number, BL = Color (only in graphic mode)
0000:7D65 POP SI
0000:7D66 LODSB
0000:7D67 PUSH SI
0000:7D68 CMP AL,00
0000:7D6A JNZ FD5F
0000:7D6C RET//CALLしたポイントに復帰
0000:7D6D PUSH SI
0000:7D6E MOV [BP-38],AX
0000:7D71 MOV [BP-36],DX
0000:7D74 MOV [BP-3A],ES
0000:7D77 MOV [BP-3C],BX
0000:7D7A MOV  AH,41
0000:7D7C MOV  BX,55AA
0000:7D7F MOV  DL,[BP+24]
0000:7D82 TEST DL,DL
0000:7D84 JZ   FD9F
0000:7D86 INT  13//Bios interrupt 13h AH=0x41 でCheckExtentionPresent
0000:7D88 JB   FD9F
0000:7D8A SHR  CX,1
0000:7D8C SBB  BX,AA54
0000:7D90 JNZ  FD9F
0000:7D92 LEA SI,[BP-40]
0000:7D95 MOV [BP-34],BX
0000:7D98 MOV [BP-32],BX
0000:7D9B MOV AH,42
0000:7D9D JMP FDCB
0000:7D9F MOV CX,[BP-38]
0000:7DA2 MOV DX,[BP-36]
0000:7DA5 MOV AL,[BP+18]
0000:7DA8 MUL BYTE PTR [BP+1A]
0000:7DAB XCHG CX,AX
0000:7DAC DIV CX
0000:7DAE XCHG CX,AX
0000:7DAF DIV BYTE PTR [BP+18]
0000:7DB2 MOV CX,DX
0000:7DB4 MOV DH,AL
0000:7DB6 XCHG CH,CL
0000:7DB8 ROR  CL,1
0000:7DBA ROR  CL,1
0000:7DBC MOV  AL,[BP+18]
0000:7DBF SUB  AL,AH
0000:7DC1 INC AH
0000:7DC3 OR CL,AH
0000:7DC5 LES BX,[BP-3C]
0000:7DC8 MOV  AX,0201
0000:7DCB MOV  DL,[BP+24]
0000:7DCE INT  13//Bios interrupt 13h AH=0x02 でReadSectorsFromDrive
0000:7DD0 JNB  FDD8
0000:7DD2 XOR  AH,AH
0000:7DD4 INT  13//Bios interrupt 13h AH=0x00 でResetDiskDrive
0000:7DD6 JNB  FDD8
0000:7DD8 MOV  AX,[BP+0B]
0000:7DDB DIV  BYTE PTR [BP-40]
0000:7DDB ADD  [BP-3A],AX
0000:7DE1 ADD  WORD PTR [BP-38],+01
0000:7DE5 ADC  WORD PTR [BP-36],+00
0000:7DE9 DEC  DI
0000:7DEA JNZ  FDD6
0000:7DEC MOV  ES,[BP-3A]
0000:7DEF POP  SI
0000:7DF0 RET //CALLしたポイントに復帰
0000:7DF1 db 4B 45 52 4E 45 4C 20 20 53 00 00 //ロードされるファイル名「KERNEL.SYS」 
0000:7DFE db 55 AA //BOOT signeture

 これが出来たからどうというわけではなく、生産的でないが、意外にゲームをするよりも面白いと思っている。
 20年経つと特許が切れて、大抵のコードの転用は大丈夫になっているのだが、著作権法は別になってコピーガードになるので、無理やりその辺に絵やアイコンを貼り付ける人が居そうだと思っているが、そこまで考えてゲームを作っている人たちは自分の作品で遊ぶのが面白いのかが良くわからない。
 今日は総評を述べたいのだが、親が電源を切っていた時があり全部は録画されていなかった。
 ざっくり言えば、相変わらず男性の希望でなく女性の希望を実現させているように見えた。
 妄想だが初音島で一年中桜が咲いているようだが、おそらく言っていることから考えると、日本書記などの古文や歴史と軽く関係があり、かつ、国語の授業でも、「人間は必ず死ぬ 私は人間である ゆえに私は必ず死ぬ」ということについて超回答を求めていたりすることからコノハナノサクヤとイワナガヒメをどっちも嫁にするという日本書記の記述に反する(一夫一妻ではなかったようなので出来たはずなのだがやってくれなかったという話で今の認識と逆である)、ひいては現代の日本の法律に反する重婚という行為を要求している感じもしないでもなかった。
 判断基準に誤りが多いが、凛々しく、周囲の人望も厚い青年であるから可能であることで、自分には不可能であって、自分の前に女性もおらず、人から話しかけられず、話しかけても返事が少ない理由は、全ての富が彼の持つ物を可能にする能力に必然的に集中することによって周りから資源や富がなくなったからだと、どうして視聴者の一部は言いださないのか不思議な感じはしないでもない。
 あの桜の解釈というのは、誰かが色々やっているのだと思うが、イメージ上の思春期なのかもしれない。
 人間は意外に多くの事を知っているので、人間には発情期が無いとか、授乳期間中は妊娠できず妊娠中は妊娠できないため産める周期は1年半位あいているわけで石器時代の寿命が40才未満ぐらいで半分が思春期までに死亡し、大体12,3才までは親の助けを必要とするため、産めるようになったらすぐに生まないと時間の関係で人口を維持できないとか、出産時の女性死亡率が高いため女性の方が出生率が少し多く設定されているとか、日本人の出生率は7月~8月に高いとか発言からは想像できない科学的な事実を知っていたりするかもしれない。

 「人間は必ず死ぬ 私は人間である ゆえに私は必ず死ぬ」
という解釈に対しての私の回答は、
 「
 人間は必ず死ぬと言える人間は今はいないのでこの論法は読み方によっては誤りである。
 人間という言葉が個人をさしていれば確かめないにしても今までの経験則からは大凡あっているのだが、全体としての人間の話をしているのであったら、その事態が起こった後であれば自分はそこにいない事により言及できず、言及できる状況ではその言葉は誤りであることが確実であるからである。
 また、個人の生殖活動を考えた時には「私」の定義が本当の意味では曖昧である。
 文全体の意味もシニフィエとシニフィアを変化させると意味合いが変化し、まったく異なる意味解釈になるため、本来の事を教える人がいなければ認識できないので、本当のことを教えられなければ私の読解は全て誤解で論法が正しいかは不明である。
 きっとそういう答えに大道芸人達はたどり着いていると思う。








最新の画像もっと見る

コメントを投稿