main()に来る前に呼ばれる関数の確認 (3/3)

解析の結果得られたよくわからない知見

● VDSOとは
https://linuxjm.osdn.jp/html/LDP_man-pages/man7/vdso.7.html
一部のsyscallを、syscallせずにユーザ空間で処理して返すことで処理高速化。
sysdeps/unix/sysv/linux/aarch64/init-first.c によれば
__vdso_gettimeofday, __vdso_clock_gettime, __vdso_clock_getres らしい

● __PRETTY_FUNCTION__
gcc拡張で、__PRETTY_FUNCTION__が使える
他に、__FILE__, __LINE__, __FUNCTION__, __DATE__, __TIME__, __FUNCDNAME__, __FUNCSIG__

● デフォルトのリンカスクリプト
$ ld --verbose するとよい → 参考: 革命の日々 その2: システムのデフォルトリンカスクリプトを調べる方法

● .ctor .dtor セクション
gcc-4.7から、init_array fini_array に変更された、互換性のためにからっぽセクションが作られる
...いや、新しいgccではもう作ってないな、新しい glibc は互換性のために見るようだ。

● preinit_array
なにに使われてるかよくわからない・・・
__attribute__((section(.preinit_array))) したらセグった、
ライブラリ呼び出しとかするにはアドレス変換とか必要なのかもしれない

● exit()
__libc_atexit には _IO_cleanup しか登録されていないので、
fflushしつつexitしたい場合は _IO_cleanup() だけよべばよさげ。
・・・と思ったけどシンボルないと怒られた、、_IO_cleanup() を呼ぶだけの fcloseall() を使えば良いみた
い。

● quick_exit()
あまりquickじゃないので、_exit()でよいと思う。

このブログ記事について

このページは、らるるが2016年10月11日 23:36に書いたブログ記事です。

ひとつ前のブログ記事は「main()に来る前に呼ばれる関数の確認 (2/3)」です。

次のブログ記事は「今時の圧縮ツールいろいろ」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

月別 アーカイブ

ウェブページ

Powered by Movable Type 7.5.0