如何让程序在运行前执行一些逻辑
最后更新于
最后更新于
最近在使用 fio 的时候,发现 ioengine 的加载是在__libc_csu_init函数中的,而函数__libc_csu_init是 libc在运行程序的 main 函数前,用来调用初始化的一组函数。
和__libc_csu_init配套的还有一个__libc_csu_fini,在 main 函数退出后运行。
那么 fio 是如何把 ioengine_register 函数放到__libc_csu_init里的呢?
观察模块加载函数有一个 fio_init和 fio_exit比较特别,在代码中找到定义,是一个编译器的属性。
他们的作用是把函数标记为需要被__libc_csu_init 调用的函数类型,objdump -d 可以看到函数在 section text.startup