itmediaの「main()関数の前には何があるのか」の連載を読んでわからなかったことや、調べたことをメモする
第四回は" OSのシステムコールの呼び出しとは&バイナリエディタの使い方"
いきなり前回の記事の途中から始まってて、どうやったら逆アセンブルのこの行にたどりつくのか忘れてた。
以下、思い出しながら実行したら、第四回の頭のところに行けた
先頭からアセンブリ追ってみたいな
https://image.itmedia.co.jp/l/im/ait/articles/1703/01/l_r20_Hello04-01.PNG
>__write_nocancel()が__kernel_vsyscall()を呼んでるみたいだけど、それぞれが何なのか?
__write_nocancel()はwriteシステムコールを呼ぶAPI内の関数っぽい
nocancel()はスレッドキャンセルポイントでない関数ということらしい
noncancelの前のwriteはキャンセルポイントということかな
pthread_cancelって関数でキャンセルできるみたい
pthreadがPOSIXスレッドっていうPOSIX標準のスレッドとのこと(?)
ここらへんは、マルチスレッドプログラミングを勉強する必要がありそう
(gdb) where #0 0x00110416 in __kernel_vsyscall () #1 0x08053d92 in __write_nocancel () #2 0x08067671 in _IO_new_file_write () #3 0x0806819b in _IO_new_do_write () #4 0x080683ea in _IO_new_file_overflow () #5 0x080673f4 in _IO_new_file_xsputn () #6 0x08059738 in vfprintf () #7 0x08049381 in printf () #8 0x080482e2 in main (argc=1, argv=0xbffffc14) at hello.c:5 (gdb)
hexeditの/使った検索は、全文検索じゃなくてカーソル以降の検索なんやね
検索したい箇所通り過ぎた状態で検索してもnot foundって言われて謎だった
0x80d6750はどこだ?
objdump -d hello | less で検索してもこのアドレスは入ってなかった。
ちなみに、0x110414<__kernel_vsyscall>もどこなのか気になる
helloが確保するメモリの範囲外な気がしてる