展开讨论

经验与复盘经验摘录 · 机器翻译

我早在8080、8085、6502等处理器上就开始编程了

… 我从8080、8085、6502等时代的编程开始的。我必须使用十六进制键盘来编程一些原型计算机,同时输入原始机器码(甚至不是汇编语言)。我仍然拥有其中的一些:https://i.imgur.com/ZsIJj1p.png 在某些情况下,我不得不采用这种方法来在6502上引导Forth,然后编写一个完整的Forth代码编辑器,最后从那里编写机器人应用程序。不要将糟糕的编程或缺乏知识归咎于某种语言,任何语言都不例外。一个有知识的软件开发人员,除了其他方面,还会避免这些问题。这也是经验和接触各种技术的价值所在。这就像因为垃圾回收中断了关键的实时进程而责怪MicroPython导致机器被毁。在这方面MicroPython没有任何问题,而是嵌入式系统的程序员/设计师缺乏知识和理解。在我看来,问题的一部分是,很多现代大学的计算机科学学位甚至不涉及底层内容。…

源讨论C语言和我逐渐发疯的历程原帖 322 条评论 · 导入时统计
5

这条内容在回应什么?

父级讨论 · 节选

NN

小测验,给定"char buf[80]"和argv[1]中的任意用户输入,以下哪项是安全的? gets(buf); scanf("%s", buf); strcpy(buf, argv[1]); scanf("%80s", buf); strncpy(buf, argv[1], 80); snprintf(buf, 80, argv[1]); ---- 令人愉快的答案是它们都不安全。前三个完全没有边界检查,这意味着它们会毫无顾忌地溢出缓冲区(gets至少在现代编译器上通常会触发警告)。接下来的两个存在边界错误,这意味着它们会毫无顾忌地将空字节写入边界外(这可以被利用!https://googleprojectzero.blogspot.com/2014/08/the-poisoned-... )。最后一个虽然使用了正确的缓冲区长度,但将用户输入视为格式字符串,使用% n格式说明符可能会泄露内存内容或导致任意内存损坏。 C语言字符串处理几乎不可避免地会引发边界错误和可怕的后果…

完整原文

社区评论 0

还没有社区评论,来聊聊你的看法。

原讨论中的回复 5

仅展示本次导入中包含的直接回复。中文为机器翻译,可查看英文原文。

SK

人们可能会匆匆一瞥,轻易地认为它们能正确工作。我认为没有人会时不时地不小心错过这么小的错误。

完整原文
IM

>不要将糟糕的编程或缺乏知识归咎于某种语言,任何语言都是如此。 在C语言中,每个人一开始都是“糟糕的程序员”。在其他语言中,人们只是缺乏经验。 >然而,一个在这些语言中有深厚经验的人如果转而使用C语言,很可能会做出真正可怕的事情。这与语言本身毫无关系。 你在自相矛盾。

完整原文
JI

>一个知识渊博的软件开发人员,除此之外,还会避开这些问题。 这是“没有真正的苏格兰人”谬误。 语言可以设计成让不太精通的程序员掉入成功的陷阱,或者设计成让他们掉入失败的陷阱。 对于提出你这种论点的人,我喜欢提出这样的挑战:去乘坐一架没有修复/禁用MCAS的737 MAX航班。这应该没问题,对吧?毕竟,真正的飞行员不会忽视飞行手册第437页的一句话,他们甚至没有在1小时的培训视频中看到过这句话,对吧?真正的专业飞行员会记住工程蓝图、航空电子设备的源代码和接线图,对吧?所以你什么都不用担心!飞机是“安全的”,飞行员可以被信任。 去买那张票吧。

完整原文
KY

天啊,这种态度真的让我非常恼火。 这正是C语言在许多软件开发领域早已过时的原因。 每当一些寻求自信提升的年轻人接受使用一个充满古老命名的字符串操作函数的语言,认为这让他们成为“真正的”、“聪明的”开发者时,我们所有人都会因此变得更糟。 不,这不是语言设计的错。甚至也不是历史的错——C语言诞生于安全不如今日的时代。这些该死的年轻人只懂Python和JavaScript!为什么他们不能像我们C语言开发者一样聪明呢! 这一切完全忽视了一个事实:在2023年,我们仍然在广泛流行且被认为经过实战考验的C代码中存在大量与字符串操作相关的漏洞。所有这些都是典型的、完全可以理解的人类错误的列表,但...…

完整原文
ZA

我在大学时开始学习C语言,还有Scheme。我们并没有深入学习“防御性编程”部分,尤其是C语言。当我们做网页和数据库相关的内容时,我们谈到了一些安全问题,但也就到此为止了。我觉得自己很幸运,我的一个朋友从事网络安全,另一个在C语言方面非常出色,还有许多在线的人免费分享他们的知识,所以我至少知道我所不知道的东西。 另一方面,并不是每个人都有这样的运气。我见过很多非常擅长自己工作但缺乏更广泛文化背景的人。但要跟上所有东西真的很难。软件是一个巨大的领域,我认为已经远远超出每个人了解所有内容的范围。而且不仅仅是软件,了解商业也很重要,偶尔学点数学也不坏,还有硬件、网络,每天都有新的东西。…

完整原文
在 Hacker News 阅读

尊重不同观点,分享具体经验。

登录后即可发帖、评论、转发和引用。