![]() |
1
5
正如您所说,这是用于防止缓冲区溢出的代码。编译器为具有可能是溢出缓冲区的局部变量的函数生成此“堆栈金丝雀检查”。请注意您要询问的行上方和下方的说明:
这个
函数体处理数组;如果它写的内容足够远,超过了数组的结尾,它将覆盖机密值。在函数的末尾,将有以下代码
这将验证机密值是否保持不变,如果更改了,则会导致程序崩溃。其想法是,有人试图利用一个简单的缓冲区溢出漏洞进行攻击,就像您使用
编译器具有 several different heuristics ,可通过命令行选项选择,用于决定何时需要生成堆栈金丝雀保护代码。 您自己无法编写与此汇编语言对应的C代码,因为它使用了不同寻常的%fs:nnnn寻址模式;堆栈加那利代码有意使用其他代码生成都不依赖的寻址模式,以使对手尽可能难以了解秘密值。 |
![]() |
Ilya Loskutov · 无法将单词加载到寄存器中 2 年前 |
![]() |
Ari157 · x86_64 Linux程序集中的逻辑与实现 2 年前 |
![]() |
Arya · 汇编语言中的“标签”——操作码 2 年前 |
![]() |
S1mple · 通过gcc生成64位共享库时的“未定义的主引用” 2 年前 |
![]() |
R0M2 · 为什么“GCC”忽略汇编代码的-fno pic 2 年前 |
![]() |
Akagi Akira · 如何在gnu汇编程序中组装MIPS cpu 3 年前 |