seclan のほえほえルーム

| |

・Win32 API 呼び出しで変わらないレジスタ[1/2] (1999/06/13 [])
 Win32 API を呼び出した時、何のレジスタが変わらないか、どのレジスタが破壊されるのかを知っていないとアセンブラでプログラムを組むことができません。ということでちょっと実験してみましょう。

testreg.asm
[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


| |

 

配信

5.6 msec