Win32 API 呼び出しで変わらないレジスタ[1/2]
(1999/06/13 [日])
Win32 API を呼び出した時、何のレジスタが変わらないか、どのレジスタが破壊されるのかを知っていないとアセンブラでプログラムを組むことができません。ということでちょっと実験してみましょう。
汎用レジスタ: eax,ecx,edx,ebx,esi,edi,ebpに特定の値を入れ、Win32 API wsprintf を呼び出します。そのあとそのレジスタの値が変わっているかを調べます。値を表示させるのは面倒なので、例外を発生させ、そのとき表示されるダイアログで検査することにします。(つづく)
[extern wsprintfA] [section .text use32] ..start: push ebp mov eax, 55aa55aah mov ecx, eax mov edx, eax mov ebx, eax mov esi, eax mov edi, eax mov ebp, eax ; push byte 123 push dword messtr push dword mes push dword buf call wsprintfA add esp, 4*4 ud1 ;例外を発生させる ; pop ebp xor eax, eax ret 4*4 [section .data] buf: times 256 db 0 mes: db '%d', 0 messtr: db 'val=',0 |
汎用レジスタ: eax,ecx,edx,ebx,esi,edi,ebpに特定の値を入れ、Win32 API wsprintf を呼び出します。そのあとそのレジスタの値が変わっているかを調べます。値を表示させるのは面倒なので、例外を発生させ、そのとき表示されるダイアログで検査することにします。(つづく)
by seclan