![]() |
1
5
正如您所说,这是用于防止缓冲区溢出的代码。编译器为具有可能是溢出缓冲区的局部变量的函数生成此“堆栈金丝雀检查”。请注意您要询问的行上方和下方的说明:
这个
函数体处理数组;如果它写的内容足够远,超过了数组的结尾,它将覆盖机密值。在函数的末尾,将有以下代码
这将验证机密值是否保持不变,如果更改了,则会导致程序崩溃。其想法是,有人试图利用一个简单的缓冲区溢出漏洞进行攻击,就像您使用
编译器具有 several different heuristics ,可通过命令行选项选择,用于决定何时需要生成堆栈金丝雀保护代码。 您自己无法编写与此汇编语言对应的C代码,因为它使用了不同寻常的%fs:nnnn寻址模式;堆栈加那利代码有意使用其他代码生成都不依赖的寻址模式,以使对手尽可能难以了解秘密值。 |
![]() |
M Rajoy · DOS中断10与AX 700 6 月前 |
![]() |
Imyaf · 在什么条件下,在组装时对“if”和“if-else”进行比较? 10 月前 |
|
Anonymous · 程序计数器的下一个指令是什么? 10 月前 |
![]() |
Daniel Langr · GCC不为类外默认复制构造函数生成机器代码 10 月前 |
![]() |
EE18 · C中字节序与尺寸组装转换的关系 11 月前 |