知识卡片

程序与数据在存储器中不可区分的后果

专业/工作 · 1286.e

内容

主存储器里的程序和数据都只是 0/1 位模式,CPU 本身无法从物理层面区分某个存储单元里存的到底是指令还是数据——一切取决于程序计数器当前指向哪里:指向哪里,机器就会把那里的位模式当指令译码执行,哪怕那其实是一段数据。这既是安全隐患的根源(程序计数器如果被错误或恶意地指向数据区,机器会尝试把数据当指令执行,结果不可预知),也是”程序能操控其他程序甚至操控自己”这种能力(如自我学习、动态生成并执行代码)在物理层面成立的前提。发散:缓冲区溢出攻击的本质,正是利用了这个”程序与数据无法区分”的特性,诱导程序计数器跳转到攻击者精心构造的、原本被当作数据存放的一段位模式上去执行。

参考来源

《计算机科学概论》第2章《数据操控》