![]() |
1
5
正如您所说,这是用于防止缓冲区溢出的代码。编译器为具有可能是溢出缓冲区的局部变量的函数生成此“堆栈金丝雀检查”。请注意您要询问的行上方和下方的说明:
这个
函数体处理数组;如果它写的内容足够远,超过了数组的结尾,它将覆盖机密值。在函数的末尾,将有以下代码
这将验证机密值是否保持不变,如果更改了,则会导致程序崩溃。其想法是,有人试图利用一个简单的缓冲区溢出漏洞进行攻击,就像您使用
编译器具有 several different heuristics ,可通过命令行选项选择,用于决定何时需要生成堆栈金丝雀保护代码。 您自己无法编写与此汇编语言对应的C代码,因为它使用了不同寻常的%fs:nnnn寻址模式;堆栈加那利代码有意使用其他代码生成都不依赖的寻址模式,以使对手尽可能难以了解秘密值。 |
|
Anon. · 用汇编语言解释这一行? 6 年前 |
![]() |
wangt13 · 如何使用VMX暂停和恢复VM 6 年前 |
![]() |
Kay · Skylake和更新的环形巴士 7 年前 |
![]() |
Kadir · Intel芯片上的半精度浮点算法 7 年前 |
![]() |
Some_Dude · x86汇编牛顿平方根算法寄存器为1#IND 7 年前 |