Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C Linux-在堆栈上执行指令_C_Linux_Gcc_Makefile_Stack - Fatal编程技术网

C Linux-在堆栈上执行指令

C Linux-在堆栈上执行指令,c,linux,gcc,makefile,stack,C,Linux,Gcc,Makefile,Stack,我有一个工具,我使用makefile编译它。它是一个非常大的工具,有许多makefile。它在编译后生成一个共享库(.so文件)。当我使用execstack-q进行检查时,它显示此库需要在堆栈上执行指令 要为任何程序启用堆栈执行,我们可以通过向gcc提供选项-z execstack来编译它。现在,我明确地没有在任何地方提供这个选项,但仍然为生成的共享库启用了这个标志 我正在链接一些启用此标志的库。这就是为共享库启用此标志的原因吗 如果没有,还有什么原因?听起来很可疑…………真的很可疑!!:)链接

我有一个工具,我使用makefile编译它。它是一个非常大的工具,有许多makefile。它在编译后生成一个共享库(.so文件)。当我使用
execstack-q
进行检查时,它显示此库需要在堆栈上执行指令

要为任何程序启用堆栈执行,我们可以通过向
gcc
提供选项
-z execstack
来编译它。现在,我明确地没有在任何地方提供这个选项,但仍然为生成的共享库启用了这个标志

我正在链接一些启用此标志的库。这就是为共享库启用此标志的原因吗


如果没有,还有什么原因?

听起来很可疑…………真的很可疑!!:)链接器指令可以位于二进制文件本身内部。您可以查看
.drectve
部分,我找不到任何名为
.drectve
的部分。我通过
readelf-S
命令检查了各个部分。它列出了二进制文件的所有部分。甚至
.note.GNU_堆栈
部分也不存在。但是我有一些其他的对象文件。当我在对象文件上运行这个
readelf-S
命令时,它会显示
.note.GNU_STACK
部分。我想弄明白的是,从哪里开始,堆栈执行标志被启用?