[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[debian-users:26254] auto-apt syscall wrapper



高宮といいます

ちょっと debian-users とは話題がずれるかもしれませんが、
(ずれていたら、ごめんなさい)
「でぶあん」の うかいさんの auto-apt の記事をよんで思ったことです。

この記事では、本当の execve をどうやって call するか、
の部分で、recursion をさけるために libc.so を dlopen(3) して
dlsym(3) で関数ポインタを得ています。

で、もうひとつの案として、
システムコールを wrap するには、
syscall を使うのが一般的、かつ簡単だと思います。

#include <sys/syscall.h>

ssize_t 
write(int fd, const void *buf, size_t count)
{
   いろいろほげる
  
   /* ほんとの write(2) */ 
   syscall(SYS_write, (fd), (buf), (count));
}

僕はチェックポインティングのライブラリを書いたりしているのですが、
チェックポインティング時の状態を保存するために、
たとえば open(2) を wrap して、
開いたファイルディスクリプタの状態だとか、
lseek(2) を wrap してオフセットの状態を保存しておく必要性が出てくるわけです。
(そして, failure の際にこれらの情報を復元する)
そこで、system call を wrap する方法をいろいろ調べたんですが、
こういうときには syscall を使うものだということを知りました。

というわけで、どうでしょうか?
けっこう、どうでもいいことですが :)

---
たかみや
東工大情報科学科松岡研