April
4.25
2025居然已经过了半年了,博客还是得更起来啊,不可怠惰!
有点想写小说,希望能写完吧(lay
September
9.23
转眼间2025已经过去大半了,而👴竟然还什么都没写(悲)。
虽然当👴带着不太聪明的眼神在大街上飘过时,总被路过发广告的小哥哥小姐姐们当成清澈愚蠢的实习生,但👴确实是一名已经实打实工作了大半年的社畜了。工作这么久以来,大概除了遇到几个傻呗测试和某不知名把公共环境上的root目录(其中有👴的一些东西,虽然不甚重要,但重传总归是有点烦的)删了的同事以外,似乎没有什么值得写的事情,所以也就大概写写最近的事好了。
其实最近并没有什么事,作者只是每天高强度玩7小时手机然后背包下班。什么?你问为什么是七小时而不是八小时?因为作者的部门理论上虽然午休时间只有一个半小时(到一点半),但其实大家都中午都睡到两点才起。这就多了半个小时。再加上从公司门口到工位的通勤时间,来回差不多半个小时,所以很遗憾一天只能玩7小时手机。
言归正传,最近一直无所事事,PL应该是看不下去了,正好来了个活就交给👴了。细说这个活,其实就是代码规范的问题。众所周知,💩🗻代码是每个带公司的开发新员工不可不品的一环,👴的任务就是修一修这些💩🗻代码,而其中又细分了几个任务。
第一个任务呢是清除冗余代码。这个很好理解,毕竟如果你同样的代码写了两遍,PL就会问你为什么不封装成函数调用啊,质疑你的代码是否不够简洁。👴简单看了一下code check标出来的冗余代码,发现基本上都是一些注释,ojbk,删注释谁还不会啊,你把我太奶拉过来都能做,但是你能不能不要把每句return ret;也标成冗余代码呢?
第二个任务呢是危险函数替换,这个也不难理解。众所周知,pwn👴们非常喜欢gets这样的函数,因为可以随便overflow,劫持你的控制流,然后你的电脑就会弹显示器。 当然这一句是我瞎编的,因为没有人的电脑会弹显示器,显示器是要买的,计算器才是会弹出来的。 👴的任务就是把这些函数替换掉,比如scanf换成scanf_s之类的,总之就是一些很无聊的工作。当然了,代码基础,code check就不基础,当👴提交上去代码跑一遍code check时发现它不让👴提交,理由是👴每行超过了120个字符。只是加了_s和一个长度参数,就超出了120个字符的限制,不过也不是什么大问题,毕竟👴会掏出👴的回车键狠狠敲下,然后狠狠地敲下tab键对齐,不然code check还会提醒👴代码没有对齐。
那么接下来请开动你智慧的大脑,想一想接下来会有什么新的问题?哈哈,反正👴是没想到,给👴报了个函数行数超出限制和未检测安全函数返回值的问题。什么叫函数行数超出限制?众所周知,一个函数最好不要太大,拆分成几个小的单元功能是最好的,所以code check限制了函数最大行数是50。于是👴盯着这两百多行的函数陷入了沉思。
☁️:所以这玩意是怎么推上去的?
后来经过PL才知道,原来这玩意的检测原理是只要原来的指标不新增就OK,也就是说虽然这个函数原本就是两百多行,超出了限制,但后续的提交只要不新增行数就不会报错。
☁️:?
☁️:那👴多的换行这块谁给👴补啊?
脆弱的云之君实在没招了,于是想着先把安全函数返回值的检测做了。也就是在前面加个ret |= ,最后检查一下ret值不对就报错的事。本想着交上去报错会少一点,没想到更多了。嘿,您猜怎么着?圈复杂度超过限制了!code check限制的圈复杂度是10,这一大坨的圈复杂度是三十多,👴加了个判断ret值是否正确的if条件,于是喜提圈复杂度+1。
👴真的已经燃尽了,实在没招了,只好屈服了开始拆分函数,拆了几个出来,一提交发现拆出去的圈复杂度都有十几。
好嘛,不就是拆成零件吗,👴慢慢拆就是了。最后终于拆完了,code check终于满意了给我全通过了。
PL:拆的这块都是端口的代码,去验证一下端口功能。
☁️:好的领导。
众所周知,端口有开关操作,但是这样还不算完,还要统计发包计数。但是由于版本更新,再加上奇怪的故障检测机制,导致👴还没走到发包这一步,就先在软硬件初始化这里卡了半年,拉了同事看了一晚上才知道问题,最后终于整明白了但是👴要去赶班车所以溜了。
☁️:这就是你改个危险函数改了一周还没把代码交上去的原因?
但👴本来就只应该改个安全函数啊,加个_s和限制长度的参数的事,为什么到最后演变成这个样子了呢?到底怎么会是呢?
☁️:弱智也能写代码吗?
☁️:能的朋友能的,因为我就在写代码。
关于本文
本文作者 云之君, 许可由 CC BY-NC 4.0.