第1个回答 2019-01-23
对于Macintosh程序,可以使用值0xA3。选定这个值是向自己发问以下问题的结: 什么样的值可以使非法的指针暴露出来?什么样的值可以使非法的计数器或非法的索引暴露出来?如果新分配的内存块被当做指令执行会怎样? 在一些Macintosh机上,用户使用奇数的指针不能引用16或32位的值。由此可知,新择的填充值应该是奇数。另外,如果非法的计数器或索引值较大。就会引起明显的延迟,者会使系统的行为显得不正常,从而增大发现这类错误的可能性。因此,所选择的填充值应该是用一个字节能够表示的、看起来很奇怪的较大奇数。我选择0xA3不仅因为它能够满足上述的要求,而且因为它还是一条非法的机器语言指令。因此如果该内存块被莫名其妙地执行到,程序会立即瘫痪。
机器不同,所选定和填充值也可能不同。例如在基于Intel 80x86的机器上,指针可以是奇数,所以填充值是否奇数并不重要。但填充值的选择过程是类似的,即先来确定在什么样的情况下未经初始化的数据才会被用到,然后再千方百计使相应的情况出现。对于Microsoft应用,填充值可以选为0xCC。因为它不仅较大,容易发现,而且如果被执行,能使程序安全地进入调试程序。
红色的不是很理解,谁能具体解释一下。感谢