学计算机的人c语言修仙评价,评《C语言修仙》 非渊静者 评《C语言修仙》 时间:2019-05-04 11:55:19...

评《C语言修仙》

/*

仍旧是那个小菜鸡,这篇认真吹作者。

*/

前段时间忙学习没看,今天中午有点空就想着补上。没想到这章的人魔界的裂缝我读着读者竟然读出了点熟悉的感觉。按照我不负责任的猜测,人魔界裂缝应该是个linux沙箱,下面是我对我不负责任猜测的解释。

在小说的描述中,这个人魔界裂缝里边林浔能够打开(也可以看作是访问)的是8个6位数地址空间,而且这8个地址空间不连续。根据后面的每进到一个房间里可以看到代码这个线索判断,这应该并不是地址,而是分页内存管理里面的页偏移量。

linux内核中进程是最小的权限边界,那么这8个6位数地址空间就是林浔(人的思维也可以看作是进程)掉到人魔界裂缝里边时系统分配给林浔进程的地址空间。而一个有正常io的32位进程未进行任何其他初始化时都有8个映射(不算那种加了类似AddressSanitizer这种会自己申请影子内存的),分别是进程本身、libc.so库、两个mapped、vvar、vsdo、ld.so库、stack,后面林浔推开门看见linux源码和魔物应该都是在mapped映射里。看到这我已经觉得作者很神了,写个小说能把linux啃的这么透我是真的服气。但你以为这就结束了吗,不,这远没有,更神的在后面的地址空间不连续上。

在linux内核版本2.6.12更新时添加了aslr,也就是俗称的地址随机化。因为aslr的加入,每次进程申请的地址空间会随机加载,为的就是防止系统调用的地址完全不变,以防止堆栈地址泄露。而且linux操作系统使用的是分段与分页结合的内存管理策略,这就导致不同映射之间的地址并不连续。

先容我中场休息一下吹爆作者。我本来觉得作为一个稍微提了点程序玄幻小说只要大概写的没毛病,能让我半蒙半猜看出来这是个啥就不容易了,有点小错也是正常操作。但是作者完全没写错就太厉害了,顺手还让我复习了一下linux下32位文件的映射,至少作者在这里是真的花时间去了解linux系统了。太强了,膜膜膜!

说回linux沙箱。小说在前面的篇章里说过了,每个魔物都是一个恶意软件,而正常软件和恶意软件在沙箱里的行为不同,小说里的林浔是正常进程,魔物是恶意进程,这个linux沙箱应该还兼具过滤功能,一但在沙箱里的进程进行攻击操作就会把程序强制sleep把它带到魔界再唤醒。(所以林浔要是没忍住攻击可能就变成魔了。)

当然,林浔的进程不可能自己跳到linux沙箱里,所以林浔走向地下室最深处的过程中就是被动态蜜罐捕获进沙箱的过程,这样就全都连上了。

结尾当然也要再吹一下作者,作者真的下了苦功夫了嗷,为了写一个人魔界裂缝竟然真的去了解linux了,这真是我在jj看的计算机相关小说里最认真的作者了,我甚至有点想劝作者算了,这么查太费时间了XD

认真的人值得回馈鸭

作者更文辛苦了,来一个火箭炮提提神吧!

[回复][投诉]

[1楼] 网友:再充我打断你们的腿腿  发表时间:2019-05-04 12:58:49

姐妹厉害!

[2楼] 网友:风寒冷冰  发表时间:2019-05-04 16:21:07

姐妹厉害!

由于发评人近期被投诉删除评论过多,该回复暂时折叠  【点击展开回复】

[3楼] 网友:毛毛猫猫  发表时间:2019-05-04 17:13:57

送上膝盖!!!感谢姐妹!!!

[4楼] 网友:雪云滴血  发表时间:2019-05-04 19:13:46

姐妹nb!!!!感觉作者就是学这个的x

[5楼] 网友:三月初三  发表时间:2019-05-05 02:09:40

姐妹厉害!

[6楼] 网友:。  发表时间:2019-05-05 23:30:46

姐妹厉害!

[7楼] 网友:顾青苡敲可爱  发表时间:2019-05-06 13:55:03

姐妹牛批!

[8楼] 网友:阿暮  发表时间:2019-05-07 14:39:33

完全没看懂哇!好厉害!!!

[9楼] 网友:风雨琳琅  发表时间:2019-05-07 17:48:56

姐妹nb!顺便4楼的姐妹,作者是数学专业的哦,好像不是计算机相关专业的

[10楼] 网友:不见明月  发表时间:2019-05-08 17:35:05

???

[11楼] 网友:语白和邻临  发表时间:2019-05-10 22:46:21

姐妹太强了。

[12楼] 网友:八百烟娇  发表时间:2019-05-11 19:33:20

姐妹牛逼!!!虽然我啥都看不懂!!但是作者也好牛逼啊我看小白脸就已经惊叹了qu□□□□太牛逼了(尖叫)

[13楼] 网友:无名诗  发表时间:2019-05-18 20:55:45

卧槽??

[14楼] 网友:31060682  发表时间:2019-05-21 01:25:04

姐妹好强!

[15楼] 网友:今天也是甜甜的一天  发表时间:2019-05-25 23:44:15

卧槽虽然我看不太懂但是我还是觉得大大和姐妹超级优秀感觉我就是个废物呜呜呜只有一句卧槽走天下

[16楼] 网友:今天也是甜甜的一天  发表时间:2019-05-25 23:45:15

啊啊啊啊姐妹太强了叭

[17楼] 网友:一只小汤圆  发表时间:2019-08-19 00:58:11

看见/* */我就意识到这位姐妹您学计算机;

看完了,这位姐妹您也是个大佬,%%%%;

[18楼] 网友:卖报的小行家  发表时间:2019-10-19 23:36:12

????姐妹牛

[19楼] 网友:西柚  发表时间:2020-03-28 10:20:47

厉害!

[20楼] 网友:纪珍珠  发表时间:2020-04-17 20:55:21

每个字我都认识...真的

[21楼] 网友:愖濛  发表时间:2020-07-28 13:06:32

袜...姐妹牛逼。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的 Java 文件上传下载工具类的示例代码: ```java import java.io.*; import java.net.URL; import java.net.URLConnection; public class FileUtil { /** * 上传文件 * @param targetURL 目标 URL * @param file 要上传的文件 * @return 服务器返回的结果 */ public static String uploadFile(String targetURL, File file) { String response = null; try { URL url = new URL(targetURL); URLConnection connection = url.openConnection(); connection.setDoOutput(true); connection.setDoInput(true); connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + "*****"); OutputStream outputStream = connection.getOutputStream(); PrintWriter writer = new PrintWriter(new OutputStreamWriter(outputStream, "UTF-8"), true); String fileName = file.getName(); writer.append("--*****").append("\r\n"); writer.append("Content-Disposition: form-data; name=\"file\"; filename=\"" + fileName + "\"").append("\r\n"); writer.append("Content-Type: " + URLConnection.guessContentTypeFromName(fileName)).append("\r\n"); writer.append("Content-Transfer-Encoding: binary").append("\r\n"); writer.append("\r\n"); writer.flush(); FileInputStream inputStream = new FileInputStream(file); byte[] buffer = new byte[4096]; int bytesRead = -1; while ((bytesRead = inputStream.read(buffer)) != -1) { outputStream.write(buffer, 0, bytesRead); } outputStream.flush(); inputStream.close(); writer.append("\r\n"); writer.flush(); BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); String line = null; while ((line = reader.readLine()) != null) { response = line; } writer.close(); reader.close(); } catch (Exception e) { e.printStackTrace(); } return response; } /** * 下载文件 * @param fileURL 文件 URL * @param saveDir 文件保存目录 * @return 下载后的文件 */ public static File downloadFile(String fileURL, String saveDir) { File file = null; try { URL url = new URL(fileURL); URLConnection connection = url.openConnection(); connection.connect(); InputStream inputStream = connection.getInputStream(); String fileName = fileURL.substring(fileURL.lastIndexOf("/") + 1); file = new File(saveDir + File.separator + fileName); FileOutputStream outputStream = new FileOutputStream(file); byte[] buffer = new byte[4096]; int bytesRead = -1; while ((bytesRead = inputStream.read(buffer)) != -1) { outputStream.write(buffer, 0, bytesRead); } outputStream.flush(); outputStream.close(); inputStream.close(); } catch (Exception e) { e.printStackTrace(); } return file; } } ``` 使用示例: ```java // 上传文件 File file = new File("test.txt"); String response = FileUtil.uploadFile("http://example.com/upload.php", file); System.out.println("服务器返回:" + response); // 下载文件 File downloadedFile = FileUtil.downloadFile("http://example.com/download.php?id=123", "downloads"); System.out.println("下载的文件位置:" + downloadedFile.getAbsolutePath()); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值