同僚に教えてもらった gdb で実行中のプロセスにアタッチして、writeシステムコール発行直前でレジスタのファイルディスクリプタを書換えるというのを試してみた。 write_loop.c #include <unistd.h> int main(void) { while(1) { write(1, "foo\n", 4); } } コンパイルする $ gcc -o write_loop write_loop.c 実行する $ ./write_loop > foo.log PID を調べて、 $ ps auxw|grep [w]rite_loop yazekats 5873 97.6 0.0 3968 284 pts/0 R+ 22:01 1:18 ./write_loop ファイルディスクリプタを確認する。 $ ls -l /proc/5873/fd total 0 lrwx-----
![gdb でレジスタの値を書き換えてみる - ablog](https://cdn-ak-scissors.b.st-hatena.com/image/square/f73fef39084d83facd3357680097e3e519184b62/height=288;version=1;width=512/https%3A%2F%2Fcdn-ak.f.st-hatena.com%2Fimages%2Ffotolife%2Fy%2Fyohei-a%2F20141219%2F20141219221907.png)