9楼的理解是不对的
相信你没有仔细地看STM32的相关手册,请看《STM32F10x的闪存编程手册》(
英文版下载 中文版下载)
在2.4.1节(
Read protection)有这样的描述:
This protection is activated by setting an option byte in the information block. Once the protection byte is programmed to a value, Flash memory read accesses are not allowed when the device is in debug mode. All features linked to loading and executing code in RAM are still active (for example, JTAG/SWD, boot in RAM, etc.) and this can be used to disable the read protection (access to the Flash memory still denied).
中文译文为:这项保护是通过设置信息块中的一个选择字节启动的。当保护字节被写入相应的值以后,在调试模式中将不允许读出闪存存储器,所有在RAM中加载和执行的功能(如JTAG/SWD,从RAM启动等)仍然有效,这样可以用于解除读保护(访问闪存仍然被禁止)。
在第2.4.2节还有一张表清楚地列出了读保护和写保护的作用范围:
从上述文字和列表中可以看出,当读保护生效时CPU执行程序时可以读受保护的Flash区,有两个例外情况:1)调试执行程序时;2)从RAM启动并执行程序时。
所以说9楼的理解“STM32这样对FLASH读出保护后,连程序本身都无法读取自身”是不对的。