C Linux-在堆栈上执行指令
我有一个工具,我使用makefile编译它。它是一个非常大的工具,有许多makefile。它在编译后生成一个共享库(.so文件)。当我使用C Linux-在堆栈上执行指令,c,linux,gcc,makefile,stack,C,Linux,Gcc,Makefile,Stack,我有一个工具,我使用makefile编译它。它是一个非常大的工具,有许多makefile。它在编译后生成一个共享库(.so文件)。当我使用execstack-q进行检查时,它显示此库需要在堆栈上执行指令 要为任何程序启用堆栈执行,我们可以通过向gcc提供选项-z execstack来编译它。现在,我明确地没有在任何地方提供这个选项,但仍然为生成的共享库启用了这个标志 我正在链接一些启用此标志的库。这就是为共享库启用此标志的原因吗 如果没有,还有什么原因?听起来很可疑…………真的很可疑!!:)链接
execstack-q
进行检查时,它显示此库需要在堆栈上执行指令
要为任何程序启用堆栈执行,我们可以通过向gcc
提供选项-z execstack
来编译它。现在,我明确地没有在任何地方提供这个选项,但仍然为生成的共享库启用了这个标志
我正在链接一些启用此标志的库。这就是为共享库启用此标志的原因吗
如果没有,还有什么原因?听起来很可疑…………真的很可疑!!:)链接器指令可以位于二进制文件本身内部。您可以查看
.drectve
部分,我找不到任何名为.drectve
的部分。我通过readelf-S
命令检查了各个部分。它列出了二进制文件的所有部分。甚至.note.GNU_堆栈
部分也不存在。但是我有一些其他的对象文件。当我在对象文件上运行这个readelf-S
命令时,它会显示.note.GNU_STACK
部分。我想弄明白的是,从哪里开始,堆栈执行标志被启用?