文章

通过RSS订阅我的博客

  • 每周分享第 16 期

    继续沉迷写 OS +1 C++ 的一个比较 fancy 的 format 库 https://github.com/fmtlib/fmt Rust 的 rsync 替代品 https://github.com/fmtlib/fmt VirtIO 1.1 要发布了 https://github.com/oasis-tcs/virtio-docs/commit/3b4130f3a8910dad89b8166e06e58806b9c60943 向二维码嵌入图片的工具 http://cgv.cs.nthu.edu.tw/Projects/Recreational_Graphics/Halftone_QRCodes/ Google Chrome 发出奇怪的 DNS 请求的原因 https://unix.stackexchange.com/questions/363512/chrome-dns-requests-with-random-dns-names-malware 转换 .HEIC 到 .jpg 的批量方案:alias...
  • 交叉编译 Nginx 1.14.2 到 RISC-V

    最近又把一定的精力放到了 RISC-V 64 上的 rCore 用户态程序的支持上,同时也借到了 HiFive Unleashed 板子,所以有真实硬件可以拿来跑了。在这之前先在 QEMU 上把能跑的都跑起来。 由于 rCore 对 glibc 的支持一直有问题,RISC-V 也不例外,所以还是选择用 musl 来做这件事情。一般搜索,终于找到了 Linux 下能用的 musl-riscv-toolchain 。编译好工具链以后,很多需要 libc 的用户态都能跑了,于是想着试一下 nginx 的编译。试着编译了一下,遇到了各种问题,最后搜到了交叉编译Hi3536上面使用的nginx,里面的方法解决了这个问题。最后总结出了这样的 patch : diff --git a/nginx-1.14.2/auto/cc/name...
  • 在古老的 OS 上运行一个干净的新的环境

    由于某些课程的原因,需要在一个 CentOS 7 上跑一些编译和运行代码。看到这么古老的软件,我心想不行,肯定要找新一些的软件来用。首先想到的是 tmux ,于是按照网上的脚本 很快装了一个 tmux 2.8 版本,果然好了很多。但是常用的很多软件依然是个问题。试了一下最近比较新的 code-server ,因为ABI问题跑不起来。 于是开始想玩骚操作。首先想到的是 Gentoo Prefix ,不过既然是别人的机器,还是算了。又找了 fakeroot 配合 alpine rootfs 的方案,但编译不过,估计是内核版本问题。又试了一下 fakechroot ,但它需要配合 fakeroot 使用,这就凉了。 然后又找了一些替代方案。一是 uchroot ,但由于 CMake 版本太老也编译不过。最后发现了 PRoot ,直接提供...
  • 每周分享第 15 期

    继续沉迷写 OS 嵌入 graphics for rust 可以绘制 bmp 了 https://wapl.es/rust/2019/03/04/embedded-graphics-0.4.7-bmp-support.html rustup component history 方便 nightly 日期选择 https://rust-lang.github.io/rustup-components-history/index.html grpcurl 用于 grpc 调试 https://github.com/fullstorydev/grpcurl grafana 6.0 is out http://docs.grafana.org/guides/whats-new-in-v6-0/ 康哥推荐的写论文工具: https://github.com/stsewd/ieee-pandoc-template
  • 每周分享第 14 期

    最近沉迷写 OS ,没怎么搜罗新的东西( 用 Docker 做交叉编译 https://github.com/dockcross/dockcross#dockcross tar inplace extraction 有意思的思路 https://gitlab.com/antonok/taro los 16.0 发布 基于 Android Pie https://lineageos.org/Changelog-22/ Rust 1.33.0 Pin 进入 stable https://blog.rust-lang.org/2019/02/28/Rust-1.33.0.html Rust 用于编写 cli 软件的工具库 https://rust-lang-nursery.github.io/cli-wg/index.html 自动使用 CI...
  • 在 rCore 上运行 nginx

    阿 西 吧 nginx 终于能在 rCore 上跑了 orrrrrrrz 通过这半个多月来的大量开发,我和王润基 @wangrunji0408 学长算是终于完成了第一个 milestone:跑起来一个 nginx 。遇到了很多困难,大概有这些: syscall 实现不全。各种方面都缺,然后 nginx 在编译的时候又检测到比较新的 OS 版本,所以很多 syscall 都用了新的来替代老的,例如 readv/writev pread/pwrite accept4 等等,所以这方面做了一些工作。另外,还有很多新的 syscall 进来,太多了我就不细说了,基本上一个commit做一点一个commit做一点这个样子。 nginx 用到了 SSE 的寄存器...
  • 实现网络的 syscall

    有了网卡驱动,接下来要做的就做网络的 syscall 了。为了测试,首先在 busybox 里找可以用来测试的 applet ,由于没有实现 poll ,所以 nc telnet 啥的都用不了。最后选择到了 ping 和 pscan 上。 ping大家都很了解,pscan就是一个扫端口的,对一个ip连续的若干个端口发起 tcp 请求。这就要求我提供 raw socket和tcp socket状态的支持。由于网络栈本身是异步的,但 read connect 这些函数在不调 setsockopt 的前提下又是同步的,然而现在又没有 signal 可以用,要是 block 了就再也出不来了。于是就采用了 Condvar...
  • 每周分享第 13 期

    今天还是早点发吧 Rust concurrent work-stealing queue 可能可以放到调度器里用 https://github.com/kinghajj/deque 支持信用卡/时间等格式信息的输入控件 https://github.com/nosir/cleave.js Rust 的简单 http server https://github.com/svenstaro/miniserve Coroutines & Modules Added For C++20 http://www.phoronix.com/scan.php?page=news_item&px=Coroutines-Modules-CPP20 Implementing TCP in Rust (part 1) https://www.youtube.com/watch?v=bzja9fQWzdA 一个类似 Vuetify 的框架 https://buefy.org/...
  • 使用 Rust 实现 e1000 驱动

    是的。我又来了。上次做了使用 Rust 实现 VirtIO 驱动之后,继续往 rCore 加更多的驱动支持。由于现在工作重点是 x86_64 下的 syscall 实现,所以选了一个比较有代表性的驱动 e1000 来实现。其实如果只是为了在 qemu 下运行的话,其实只需要支持 virtio-pci 就可以了,原来的 virtio-net 直接拿来用就可以了。 为什么挑 e1000 呢,一方面是支持的设备多,有真实硬件可以测试,虽然不一定要裸机上跑,但是可以通过 PCI passthrough 来测试驱动的正确性。另一方面是网上的资料比较多,有现成的简单的代码可以借鉴。这次主要借鉴了三个来源:一是 Biscuit OS, 二是 Judge Duck OS ,三是...
  • 每周分享第 12 期

    看脑王迟到了( Rust Embedded Graphics 库 https://github.com/jamwaffles/embedded-graphics Wireguard for macOS https://lists.zx2c4.com/pipermail/wireguard/2019-February/003853.html Wireguard-go UI https://github.com/aequitas/macos-menubar-wireguard T2 逆向 https://duo.com/labs/research/apple-t2-xpc 脑王剪辑 https://www.bilibili.com/video/av43972717 dram 推荐的工具 notion.so 带授权和审计的 sudo https://github.com/square/sudo_pair rust 的 manpage 生成器 https://github.com/rust-cli/man 才发现 Github 有...
  • 预告 Learn-Project 4.0 版

    不知道大家听没听说过 Google Chrome 有个插件,叫做 Learn Project ,是一个网络学堂的改良前端。不过,随着网络学堂的不断更(xia)新(gao),它已经不再适用于现在的版本。于是,哈利橙(@Harry_Chen)决定利用寒假时间,在今天(2.17)之前完成 Learn Project 4.0 的开发。为什么叫 4.0 呢,因为哈利橙课程的 GPA 众数是 4.0 。这个版本采用先进的 React 框架编写(Vue 塞高),使用了 Material Ui 作为界面框架(这我觉得可以),目前的一个参考图(图源哈利橙): 看那满眼的高分数,希望 Learn Project 4.0 能在 flag 倒下之前完成。
  • 每周分享第 11 期

    对不起迟到了( Google 的 fuzzing 家族又来了个新成员 太喜欢造轮子了 https://github.com/google/clusterfuzz 有趣的文本生成工具 https://github.com/TheBerkin/rant 又一个 side channel attack https://www.nccgroup.trust/us/about-us/newsroom-and-events/blog/2019/february/downgrade-attack-on-tls-1.3-and-vulnerabilities-in-major-tls-libraries/ 来自 Prof Fan 的一个 cf dns 权限限制分发的工具 https://github.com/ProfFan/cloudflare-proxy-rs 部署到了我的博客的小工具 大家体会到了吗 https://instant.page/ 教育性质的 C on web https://vasyop.github.io/miniC-hosting/ 激活清华教育版 win10?...
  • 近来做 Stanford CS140e 的一些进展和思考(9)

    距离上一篇 CS140e 系列文章已经过去了很久,距离第一篇文章过了一年零几天。在后来这一段时间内,CS140e 结束了课程,又开始了新一年的 winter 2019 课程,迎来的却是 C 版本的 CS140e ,不禁让人感到失望。还好,Sergio Benitez 放出了原来的 CS140e 的镜像,如果大家仍然想回去查看原版优质的 CS140e ,可以点进去参考。 后来因为机缘巧合参与到了清华的 Rust OS 课程,又想到回来把原来的 CS140e 进行更新,于是顺带把跑在 QEMU 下的一些需要的工作给做了,另外把 Rust nightly 版本更新了(一年前的 nightly 还能叫 nightly ?),才发现标准库变化还是蛮大的,由于...
  • 每周分享第 10 期

    新年快乐! Haskell to WASM compiler https://github.com/tweag/asterius A ssh tarpit that sends endless banner https://github.com/skeeto/endlessh Use rust to write UEFI app https://github.com/rust-osdev/uefi-rs 神奇的小游戏 https://yeahpython.github.io/game/game.html 又一个后端 rust web 框架 https://github.com/seanmonstar/warp 挺酷的一个网站 https://github.com/pomber/github-history ws 调试工具...
  • 每周分享第 9 期

    IDA Loader plugin for some Nintendo rom https://github.com/w4kfu/IDA_loader websocket daemon http://websocketd.com/ 实时的游戏开发器 https://script-8.github.io/ 硬核逆向 Leica 相机的固件 https://alexhude.github.io/2019/01/24/hacking-leica-m240.html 做 CTF 时遇到的整数溢出的 CVE https://www.anquanke.com/post/id/104182 发现一个 speedtest 的轮子 https://github.com/adolfintel/speedtest 西数的 RISCV 核实现 https://github.com/westerndigitalcorporation/swerv_eh1 iOS 12.2...
  • 使用 Rust 实现 VirtIO 驱动

    背景 最近在给 rCore 添加驱动层的支持。一开始是想做网卡驱动,后来发现, qemu-system-riscv32 只支持如下的驱动: # qemu-system-riscv32 -device help Storage devices: name "scsi-cd", bus SCSI, desc "virtual SCSI CD-ROM" name "scsi-disk", bus SCSI, desc "virtual SCSI disk or CD-ROM (legacy)" name...
  • THUWC 2019 小记

    前段时间,以工作人员的身份参加了在广州二中举办的 THUWC 2019 。作为一只菜鸡 OI 选手,我没想到过我会以另一种身份参与一个我本来没能参与的活动,就好像以暑校辅导员的身份参与清华暑校一样。 提早来到了赛场,布置场地,然后把机考的各个流程都过一遍,记住各个细节,各方面都有条不紊地进行,看着第一场前同学们特别激动地冲入考场,到最后一场同学们考完后的释放,在同学们身上看到了很多不成熟的样子,看到了兴奋想要和同伴分享的喜悦,也看到了不甘的眼泪。 希望各位强大的选手们可以来到九字班、零字班乃至一字班,享受课改的乐趣吧嘿嘿嘿
  • 每周分享第 8 期

    这周更加忙了,所以内容不多。 Rust 1.32.0 is out 其中 dbg macro 挺有意思 https://blog.rust-lang.org/2019/01/17/Rust-1.32.0.html 在线的 hex packet decoder https://hpd.gasmi.net/ Rust Cheatsheet https://www.breakdown-notes.com/make/load/rust_cs_canvas/true Rust tcp/ip stack https://github.com/m-labs/smoltcp 逆向 CAJ 的转换器 https://github.com/JeziL/caj2pdf
  • 每周分享第 7 期

    这周比较忙,所以内容不多。 在嵌入式系统里跑 Lisp 可以在串口开个 repl 在线调试 http://www.ulisp.com/show?3J Pattern matching for C++ https://github.com/solodon4/Mach7 一个商业版的类似 ASan 的产品 不知道效果如何 https://stensal.com/ 用 Python 写 Cocoa 界面还行 https://dawes.wordpress.com/2017/08/17/python-with-a-cocoa-gui-on-macos/ Rust 实现的权威搜索引擎 https://github.com/toshi-search/Toshi Rust Embedonomicon 讲述 Rust 在 bare...
  • 实现 VSCodeVim 中支持中文分词的单词移动

    最近用 VS Code 写中文 LaTeX 比较多,但是编辑起来总是比较麻烦,不能用各种带 w 的 motion ,不然整行都没了。于是 @xalanq 提出能不能拿一个 JS 的分词库,魔改一下 VSCode Vim 来得到同样效果?答案是可以的。 最后代码在 jiegec/VSCodeVimChinese 里,还没有合并到上游的打算。不定期根据上游发版本同步更新,在 Github Release 里发布 vsix 文件,目前版本为 v1.0.1。在 VS Code 里 Extensions: Install from...