« 独習アセンブラ リスト1-4 | トップページ | 独習アセンブラ リスト4-3 »

2007-11-12

独習アセンブラ リスト4-2

独習アセンブラ 翔泳社の第四章のリスト 4-2です。
メモリのアドレスを操作する事で、
任意のデータを取得します。


01: section .data
02: 
03: msg     db 'Hello, assembler', 0x0a
04: 
05: section .text
06: global  _start
07: 
08: _start:
09:         mov     eax, [msg]
10:         push    eax
11:         mov     eax, 4
12:         mov     ebx, 1
13:         mov     ecx, esp
14:         mov     edx, 1
15:         int     0x80
16:         pop     eax
17: 
18:         mov     eax, [msg + 7]
19:         push    eax
20:         mov     eax, 4
21:         mov     ecx, esp
22:         int     0x80
23:         pop     eax
24: 
25:         mov     eax, 1
26:         mov     ebx, 0
27:         int     0x80


9行目はmsgのアドレスの値を得ます。
msgの値は、以下のような感じになっています。
msg +  0 = 'H'
msg +  1 = 'e'
msg +  2 = 'l'
msg +  3 = 'l'
msg +  4 = '0'
msg +  5 = ','
msg +  6 = ' '
msg +  7 = 'a'
msg +  8 = 's'
msg +  9 = 's'
msg + 10 = 'e'
msg + 11 = 'm'
msg + 12 = 'b'
msg + 13 = 'l'
msg + 14 = 'e'
msg + 15 = 'r'
msg + 16 = 0x0a

なので、18行目の[msg + 7]の値はaになります。

本文の例の説明には、
msgが指すメモリアドレスの文字とmsgの8番目の文字[msg + 7]を参照して、
MOVで移動するコードを含む

とあるので、一度eaxに移動してからスタックにプッシュしています。
eaxに移動しないでも、push dword [msg + 7]とする事で、
同じ事ができました。




|

« 独習アセンブラ リスト1-4 | トップページ | 独習アセンブラ リスト4-3 »

アセンブラ(nasm)」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: 独習アセンブラ リスト4-2:

« 独習アセンブラ リスト1-4 | トップページ | 独習アセンブラ リスト4-3 »