seclan のほえほえルーム

| |

・さまざまな OS のファンクションコール方法 (1999/11/05 [])
 以前 Windows NT の場合のファンクションコール方法を示しましたが、UNIX についての情報も入ったのでまたまとめてみましょう。

さまざまな OS のファンクションコール方法
OS呼び出し
形式
説明
DOSint 21h典型的には ax, ah にファンクション番号。パラメータはレジスタ。
Windows VxDint 20hint 20h, dw ファンクション番号, dw VxDの識別番号
Windows 9x APint 30hRing3 から Ring0 (VxD レイヤー) に移行
Windows NTint 2eheax にファンクション番号
FreeBSDint 80heax にファンクション番号。パラメータはスタック。
Linuxint 80heax にファンクション番号。パラメータはレジスタ。

 Windows 9x のアプリケーションは通常 ring3 で動作しています。しかし例えば、kernel32 などにある機能を呼んだ場合、自分で処理する代わりに VxD レイヤーにある機能を呼びます。その時に int 30h を使ってリングレベルを変更するのです。
 VxD は CD20FFFFNNNN のような機械語形態でファンクションが形成されます。FFFF はファンクション番号、NNNN は呼び出す対象となる VxD の識別番号です。プログラムの実行がこの部分に差しかかると CD20、つまり int 20h の割り込みがかかります。すると、VxD レイヤーでこれを FFFFNNNN で示されるファンクションのエントリアドレスを見つけ出し、そこを呼び出す near call 命令でこの部分すべてを置き換えます。したがって、その時に呼び出すことの無かった部分は fixup の必要が無く、また使用する部分だけを fixup するので効率的に動作できます。


by seclan

関連


| |

 

配信

4.72 msec