调用 syslog() 替换为 __syslog_chk()?
calls to syslog() replaced with __syslog_chk()?
我正在尝试使用 LD_PRELOAD
拦截对 syslog()
的调用。我可以在 my 程序之一上成功地尝试它并且它起作用了。
当我在预构建的应用程序(通过 Debian 软件包获得)上尝试它时,我观察到它调用了 __syslog_chk()
,在检查软件包的源代码时,没有直接调用 __syslog_chk()
!
所以,应该是编译器[使用哪个],将syslog()
s 更改为__syslog_chk()
?
我尝试了 gcc
选项 -D_FORTIFY_SOURCE=2
、-O2
等。None 似乎做出了这种改变!哪个选项强制使用 __chk()
函数?
it ought to be the compiler [whichever was used], changed the syslog()s to __syslog_chk() ?
是的,您可能会像往常一样检查来源。 https://github.com/lattera/glibc/blob/master/misc/sys/syslog.h -> #if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function
-> https://github.com/lattera/glibc/blob/master/misc/bits/syslog.h#L31 . The __fortify_function
is a extern inline
, and you might want to read about extern inline
https://gcc.gnu.org/onlinedocs/gcc/Inline.html What does extern inline do?。编译器选择函数的 inline
版本而不是 extern
版本,并内联调用,使其成为 __syslog_chk
.
Which option forces use of __chk() function ?
使用-D_FORTIFY_SOURCE=2
。检查你系统的 syslog.h
- 它都在那里。很好 IDE 带有“跳转到定义”功能,在这种情况下可以大大增强浏览。
注意 https://github.com/lattera/glibc/blob/895ef79e04a953cac1493863bcae29ad85657ee1/misc/syslog.c#L112 syslog
->__syslog
->__vsyslog_chk
和 __syslog_chk
-> __vsyslog_chk
。您可能 LD_PRELOAD
__vsyslog_chk
可以处理所有情况。
我正在尝试使用 LD_PRELOAD
拦截对 syslog()
的调用。我可以在 my 程序之一上成功地尝试它并且它起作用了。
当我在预构建的应用程序(通过 Debian 软件包获得)上尝试它时,我观察到它调用了 __syslog_chk()
,在检查软件包的源代码时,没有直接调用 __syslog_chk()
!
所以,应该是编译器[使用哪个],将syslog()
s 更改为__syslog_chk()
?
我尝试了 gcc
选项 -D_FORTIFY_SOURCE=2
、-O2
等。None 似乎做出了这种改变!哪个选项强制使用 __chk()
函数?
it ought to be the compiler [whichever was used], changed the syslog()s to __syslog_chk() ?
是的,您可能会像往常一样检查来源。 https://github.com/lattera/glibc/blob/master/misc/sys/syslog.h -> #if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function
-> https://github.com/lattera/glibc/blob/master/misc/bits/syslog.h#L31 . The __fortify_function
is a extern inline
, and you might want to read about extern inline
https://gcc.gnu.org/onlinedocs/gcc/Inline.html What does extern inline do?。编译器选择函数的 inline
版本而不是 extern
版本,并内联调用,使其成为 __syslog_chk
.
Which option forces use of __chk() function ?
使用-D_FORTIFY_SOURCE=2
。检查你系统的 syslog.h
- 它都在那里。很好 IDE 带有“跳转到定义”功能,在这种情况下可以大大增强浏览。
注意 https://github.com/lattera/glibc/blob/895ef79e04a953cac1493863bcae29ad85657ee1/misc/syslog.c#L112 syslog
->__syslog
->__vsyslog_chk
和 __syslog_chk
-> __vsyslog_chk
。您可能 LD_PRELOAD
__vsyslog_chk
可以处理所有情况。