一段用机器码或汇编语言写成的代码可以设计成为“绝对没有漏洞”的代码吗?

记得上次讨论类似问题的时候,有个人指出C语言写成的入门级“hello world”也不能称之为绝对没有漏洞或BUG的代码,因为<stdio.h>,printf这些东西内部实际上也可能是漏洞的,因为他们也不是“最小单元”,其内部结构也可能被找出BUG。

但是要是机器码或者汇编程序呢?虽然对于高级语言而言,任何语句可能都可拆分成更小单元,但是机器码本身应该是基于硬件逻辑之上的最小代码单元了,而汇编因为在设计的时候力求与机器码一一对应,所以同理。

作为电子设计与软件设计的边界,这两种代码应该是可以实现没有漏洞或者BUG了吧?

推荐  (0) | 4人关注关注
4个答案
7 0

方弦科学松鼠会成员,信息学硕士生

2015-05-16 22:18

其实C语言也可以,只要用好编译器就行。有个编译器叫CompCert(http://compcert.inria.fr/),它能保证编译出来的程序严格按照语义行事。为什么呢?因为它拥有一个形式证明,证明它编译出来的程序的确只能按照代码的语义执行。

2 0

如果不把代码需要实现的功能和运行需求定义在有限的范围内,那么无bug的代码永远不会存在.

0 0

不能,至少目前还不能。

Bug的原因可能很多,并非一定是语义上的。

比如缓冲区溢出,无论是用C/C++或者汇编语言,都有可能发生。

我读研究生的时候,形式语义学的期末考试,是证明Hanoi塔的递归实现的语义正确性。印象深是因为当时A4纸写了好几页,在考试铃响之前才拼命写完。

但是即使这样严格证明的程序还是会有bug。举例来说,当这段程序在默认stack size比较小的机器上,可能会造成递归栈溢出。甚至说在一台配置很高端的机器上,只要把输入的盘子的个数加大,还是会造成递归栈溢出。

象现在嵌入式系统的开发,驱动的开发,内核的开发,需要加速的核心算法等等,都有可能使用汇编语言编写,以提高速度。但是bug仍然存在。这和指令的原子性没有关系。

0 0

fuzzy无论如何,还是对C++最专业

2015-05-26 10:22

有没有BUG跟语言没关系,所有语言最终都落实到机器指令上去

查看更多

添加回答

登录 后回答问题,你也可以用以下帐号直接登录

相关问答

关于我们 加入果壳 媒体报道 帮助中心 果壳活动 家长监控 免责声明 联系我们 移动版 移动应用

©果壳网    京ICP证100430号    京网文[2018] 6282-492号    新出发京零字东150005号     京公网安备11010502007133号

违法和不良信息举报邮箱:jubao@guokr.com    举报电话:18612934101    网上有害信息举报专区    儿童色情信息举报专区