English 中文(简体)
什么是使用 -fno -stacack - 保护者?
原标题:What is the use of -fno-stack-protector?

我用C字写了一个应用程序, 我试图在编译时了解 < code>- fno- stack- protector 命令的目的是什么。 对于我的具体应用程序, 使用此命令或不使用缓冲溢出来保护它没有区别 。

我在网上读到, < code>- fstack- protector 和 - fno- stack- protector 命令分别启用和禁用了烟囱冲洗保护器,但如果我亲自编集程序,如何事先启用保护器?命令的使用是否取决于应用程序运行的系统?

最佳回答

在标准/库存的海合会中,书架保护者默认关闭。 但是, 一些 Linux 发行者已经修补了海合会的默认开关 。 在我看来, 这相当有害, 因为它打破了编译任何未与标准用户空间图书馆连接的东西的能力, 除非 Makefile 具体禁用书架保护者 。 它甚至会打破 Linux 的内核结构, 除非与这项黑客的发行者在海合会中增加了更多的黑客, 以检测内核正在建造并禁用。

问题回答

如果您使用 -fstack- protector 进行编译,那么堆叠上将会多分配一点空间,当代码设置检查并实际检查您是否在函数中将堆叠覆盖时,进入和返回一个函数时会多加一些管理费。

这将改变您的应用程序 。 如果启用它, 它将会很快地停止堆叠溢出攻击 。 只有您在代码中没有功能调用, 它才会让您的程序不受影响( 而且由于您通常写入 < code> main () , 这是启动代码所呼唤的函数, 这会对您的程序产生影响 ) 。 但是, 堆叠溢出攻击并不是唯一可以使用的攻击, 所以它不是灵丹妙药。 但是它是一种有用的保护, 费用有限 。

保护并不取决于系统本身;它取决于您正在使用的编译器版本,但仅此而已。

堆叠保护符是编译器生成的代码, 并被 < em> 放置到您的程序中。 它不是程序所调用的外部程序或系统调用 。

符合默认编译器设置的选项何时可用 :

  • 当您重新使用可能具有复杂配置的构建系统时,您想要对它进行调试。它可能选择使用 fstack-protector (例如),它可能很容易地通过其他选项,这些选项只是被拖到选项列表的末尾。如果海合会在选项集中看到 fstack-protector fno-stack-protector ,则命令行上的最后一个选项就会生效。

  • 其它时间, 类似的事情可能会很方便( 似乎不适用于 < code>- fstack- protector ) 。 当您有一个选项可以打开一系列子选项时, 您可能会很方便( 但它似乎并不适用于 < code>- fstack- protector 。 例如, 设置 - O2 打开了 < code>- fxxxx 优化选项的滚动, 您可以指定 < code >- fno- stric- alize 来将该特定选项设置回默认设置 。 (注意: 此案例实际上与上述案例相当) 。

您之所以想关掉它 有三个原因

  • You re building a shared a library where this may matter and other functions make assumptions about the stack.
  • You re concerned about performance.
  • You want to build vulnerable software. This very frequently happens with Capture The Flag (CTFs) and the like, as in the case if you wanted to build Protostar to demonstrate an exploit that you wouldn t otherwise be vulnerable too.




相关问题
Fastest method for running a binary search on a file in C?

For example, let s say I want to find a particular word or number in a file. The contents are in sorted order (obviously). Since I want to run a binary search on the file, it seems like a real waste ...

Print possible strings created from a Number

Given a 10 digit Telephone Number, we have to print all possible strings created from that. The mapping of the numbers is the one as exactly on a phone s keypad. i.e. for 1,0-> No Letter for 2->...

Tips for debugging a made-for-linux application on windows?

I m trying to find the source of a bug I have found in an open-source application. I have managed to get a build up and running on my Windows machine, but I m having trouble finding the spot in the ...

Trying to split by two delimiters and it doesn t work - C

I wrote below code to readin line by line from stdin ex. city=Boston;city=New York;city=Chicago and then split each line by ; delimiter and print each record. Then in yet another loop I try to ...

Good, free, easy-to-use C graphics libraries? [closed]

I was wondering if there were any good free graphics libraries for C that are easy to use? It s for plotting 2d and 3d graphs and then saving to a file. It s on a Linux system and there s no gnuplot ...

Encoding, decoding an integer to a char array

Please note that this is not homework and i did search before starting this new thread. I got Store an int in a char array? I was looking for an answer but didn t get any satisfactory answer in the ...

热门标签