2011年5月22日 星期日

MASM_5

信區 : 破解網-破解技術討論區

日期 : Tue May 14, 09:37                                                      
來自 : Jerry Cls                                               39:40/103
給   : All                                
標題 : asm5                                                                 
--------------------------------------------------------------------------------

@TID: FastEcho 1.40 17014


※  想不想改變記憶體的內容?最簡單的方法就是使用F命令。
※  F命令可在記憶體中填入(Fill)一個特定的十六進位數。
※  語法:『F<啟始位址> <結束位址> <填入值>』
1.首先,請輸入 F100 17F 00
2.然後,再輸入 D100

1FED:0100  5F 5E 5D C2 02 00 01 00-00 00 0C 00 0D 00 0B 00  _^].............
1FED:0110  0F 00 10 00 0E 00 BA 36-15 B9 04 00 E9 E5 F2 50  .......6.......P
1FED:0120  B8 01 00 50 2B C0 50 E8-91 55 0B C0 79 08 B4 40  ...P+.P..U..y..@
1FED:0130  E8 A7 2D F9 EB 04 E8 10-06 F8 C3 E8 89 FB 74 01  ..-...........t.
1FED:0140  C3 B8 71 00 E9 61 2E A9-10 00 75 1A E8 78 FB BA  ..q..a....u..x..
1FED:0150  00 00 C3 A1 A0 30 A3 86-30 B8 0D 00 E9 1C 2E 83  .....0..0.......
1FED:0160  3E 12 2F 3C 73 ED 57 FF-36 12 2F B8 27 00 E8 D3  >./<s.W.6./.'...
1FED:0170  0D BF 25 00 74 0D 2B FF-B8 C2 00 E8 C6 0D 75 06  ..%.t.+.......u.
-F100 17F 00
-D100
1FED:0100  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
1FED:0110  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
1FED:0120  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
1FED:0130  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
1FED:0140  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
1FED:0150  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
1FED:0160  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
1FED:0170  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................

3.記憶位置 100 到 17F 現在都已填入 00,這正是F命令所指定
的。

※  E命令是用來輸入(Enter)一串位元組的資料到記憶體中,
  以構成程式。
※  要將此程式插入記憶體中,只要在E命令後面跟著程式所要
  存放的位址即可。
1.首先,請輸入 E100
2.然後,再輸入 B2 01 B4 02 CD 21 CD 20

3.現在您已將程式放入記憶體中了,請輸入 G
4.畫面上將出現此程式執行的結果。

Program terminated normally


※  由於機器碼是給電腦看的,當然不適合用來寫程式。
※  我們可以使用組合語言指令直接來編寫程式,A命令就是用來
  將組合語言指令『組譯,Assemble』成十六進位數值的機器碼。
※  以 DEBUG 編寫的程式一定要由位址 100h 開始才有效。
1.請依序輸入 A100
2.請依序輸入 MOV DL,1

3.請依序輸入 MOV AH,2
4.請依序輸入 INT 21

5.請依序輸入 INT 20
6.請按 Enter 鍵

7.現在您已經將組合語言程式放入記憶體中了,請輸入 G
8.畫面上所出現的結果將與用E命令編寫的程式一樣。

Program terminated normally

9.請輸入 D100
10.位址 100 到 107 就是程式的內容,與E編寫的機器碼一樣。

1FED:0100  B2 01 B4 02 CD 21 CD 20-00 00 00 00 00 00 00 00  .....!. ........
1FED:0110  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
1FED:0120  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
1FED:0130  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
1FED:0140  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
1FED:0150  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
1FED:0160  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
1FED:0170  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................

※  我們可以用U命令將十六進位的機器碼反組譯(Unassemble)
  成組合語言指令,語法:『U<啟始位址>,<終止位址>』
※  您將發現:每一行右邊的組合語言指令就是被組譯成中間相
  對的機器碼,而 8088 實際上就是以機器碼來執行程式。
1.請輸入 U100,106

1FED:0100 B201          MOV      DL,01
1FED:0102 B402          MOV      AH,02
1FED:0104 CD21          INT      21
1FED:0106 CD20          INT      20

MOV      DL,01
MOV      AH,02
INT      21
INT      20

※  MOV A,B    將 B 的內容移(MOVe)到 A 中。
※  MOV DL,01  將數值 01h 移入 DL 暫存器
※  MOV AH,01  將數值 01h 移入 DL 暫存器

※  DOS 功能服務是存在於 ROM-BIOS 與 IO.SYS 內的輸出入常式
  ,我們可以利用 INT 21 來呼叫,其過程為:
1.中斷要求先被送到 MSDOS.SYS 部份
2.依 AH 的值,轉送到 IO.SYS 或 ROM-BIOS 中的適當常式。

※  INT:呼叫由中斷(Interrupt)向量所指的常式。
※  顯示器輸出功能:DOS 的 02h 號函數服務。
※  輸入:AH=2    DL=字元之對應數值
※  執行:INT 21  結果:字元顯示在螢幕上

※  INT 21:DOS 的中斷服務,由函數呼叫使用,程式可透過此
  中斷來呼叫所有的 DOS 函數服務常式。
※  INT 20: DOS 的中斷服務,用來終止程式作業,使程式執行後,
  將控制權交回給 DEBUG,並出現 Program terminated normally 訊息。

※  DEBUG 中可以用R命令來查看 8088 中的暫存器(Register)
  ,也可以用來改變暫存器的內容。
※  您還記得每個暫存器所代表的意義嗎?
※  請注意 IP 暫存器,它保存了目前將執行的指令位址。
1.請輸入 R

AX=0000  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=1FED  ES=1FED  SS=1FED  CS=1FED  IP=0100   NV UP EI PL NZ NA PO NC
1FED:0100 B201          MOV     DL,01
-

1.當程式由 100 開始執行,且以 INT 20 指令結束時,DEBUG 會
  自動將 IP 的內容更新設定為 100。

※  當您要將此程式做成一個獨立的外部程式,以便在 DOS 的提
  示符號下隨時都可以執行,則必須用N命令對該程式命名。
※  程式檔案一定要為 COM ,否則下次無法以 DEBUG 載入。
※  語法:N<程式名稱>.COM
1.請輸入 NSMILE.COM

※  接著,您必須告訴 DEBUG 此程式有多長:程式從 100 開始到
  106,所以實際佔用 7 個位元組。
※  我們利用 BX 暫存器 存放此值高位元組部分,而以 CX 暫存
  器存放此值的低位元組部分。
2.請輸入 RBX (查看 BX 暫存器的內容)
3.因 BX 已設定為 0,請按 Enter 鍵

4.請輸入 RCX (查看 CX 暫存器的內容)
5.請輸入 7 (程式的位元組個數)

※  最後,請用W命令將該程式寫入(Write)磁片中。
6.請輸入 W

                                   待續!!!!! 


--- SuperBBS 1.17 (Reg)
 * Origin: BEAR BBS OPEN:24HR  TEL : (02)377-6746 (39:40/103)
PATH: 40/103 100

沒有留言:

張貼留言