clangd异常闪退原因分析

背景 使用neovim打开一个pwn题给的main.c源码的时候,clangd直接exit 1退出。当时的目录是这个样子的: ❯ ls ld-linux-x86-64.so.2 libc.so.6 main.c pwn 然后我找到了clangd的目录,执行./clangd,一切正常。 又打开了几个其他的c语言代码测试,一切正常。 把main.c复制到其他目录下,打开仍然一切正常。 看来问题出在clangd在处理这个特定目录下的文件时会闪退。于是我在这个目录下执行/path/to/clangd。复盘一下大概是这个样子的: ❯ /tmp/clangd_17.0.3/bin/clangd /tmp/clangd_17.0.3/bin/clangd: libc.so.6: version `GLIBC_2.36' not found (required by /usr/lib/libpthread.so.0) /tmp/clangd_17.0.3/bin/clangd: libc.so.6: version `GLIBC_ABI_DT_RELR' not found (required by /usr/lib/libpthread.so.0) /tmp/clangd_17.0.3/bin/clangd: libc.so.6: version `GLIBC_2.36' not found (required by /usr/lib/librt.so.1) /tmp/clangd_17.0.3/bin/clangd: libc.so.6: version `GLIBC_ABI_DT_RELR' not found (required by /usr/lib/librt.so.1) /tmp/clangd_17.0.3/bin/clangd: libc.so.6: version `GLIBC_2.36' not found (required by /usr/lib/libdl.so.2) /tmp/clangd_17.0.3/bin/clangd: libc.so.6: version `GLIBC_ABI_DT_RELR' not found (required by /usr/lib/libdl.so.2) /tmp/clangd_17.0.3/bin/clangd: libc....

April 5, 2024 · 2 min · 388 words · JuicyMio

hugo_with_obsidian

背景 由于obsidian和hugo的图片路径十分不兼容(obsidian支持Vault内的绝对路径或文章相对路径,而hugo会把static内的图片放到public,也就是网站根目录下),如果把图片和md文件放在同一目录下倒是方便一点,但是这样目录就太乱了,令人难以接受。最简单的方案是统一把图片传到图床,但我一是囊中羞涩,二是常常要断网打比赛,需要笔记的图片保存在本地,不能使用图床的方案。总之我拖了好久都没处理这个问题,现在觉得不得不解决了。 图片复制与链接修正 因为懒,所以先去搜了一下有没有插件可以一键解决。然后浪费了一上午时间测试各种插件,不是修复图片链接不方便就是迁移图片位置不好调整。最后一想,我自己会写代码,还有chatgpt, 为什么要学插件怎么用折磨自己… 于是搓了个很糙但是能用的版本。以下代码基本上是chatgpt生成的,就改了一下路径。 #!/bin/python3 import sys import glob import shutil blog_dir = "/home/juicymio/blog/blog_papermod/" source_dir = "/home/juicymio/notes/PWN!!!/" attachments_folder = source_dir + "attachments" target = sys.argv[1].strip(".md") static_dir = blog_dir + "static/" def copy_files(source_dir, dest_dir, pattern): search_pattern = source_dir + "/" + pattern file_paths = glob.glob(search_pattern) for file_path in file_paths: dest_path = dest_dir + "/" + file_path.split("/")[-1] shutil.copy2(file_path, dest_path) copy_files(attachments_folder, static_dir, target + "*") source_path = source_dir + target + "....

April 1, 2024 · 1 min · 139 words · "JuicyMio"

开启linux kernel rust support

背景 试图用Rust做操作系统小组作业,某组员遇到环境配置问题。我尝试了一下,发现网上中文资料确实比较少,而且官方文档翻译略有过时。(可能有Rust更新比较快的原因。于是写了篇没什么用的流水账记录一下编译一个启用Rust支持的Linux kernel的过程。 环境配置 本文所述内容均在archlinux下进行。 Rust: 参照官方文档配置一下rust相关环境。 LLVM 省流版(不保证完全准确,在我这能跑): 从 https://www.kernel.org/ 下载linux-6.8.2源码 在linux-6.8.2目录下切换rustc版本 rustup override set $(scripts/min-tool-version.sh rustc) 添加rust-src rustup component add rust-src 安装bindgen-cli 注意:此处中文文档已经滞后,需要安装的是bindgen-cli而非bindgen. 详见: https://github.com/rust-lang/cargo/issues/11249 cargo install --locked --version $(scripts/min-tool-version.sh bindgen) bindgen-cli 需要将~/.cargo/bin添加到环境变量 生成rust-analyzer配置文件 make LLVM=1 rust-analyzer 查看rust工具链是否符合要求 make LLVM=1 rustavailable 在我这的输出是(我没锁bindgen版本) ❯ make LLVM=1 rustavailable *** *** Rust bindings generator 'bindgen' is too new. This may or may not work. *** Your version: 0.69.4 *** Expected version: 0....

April 1, 2024 · 1 min · 142 words · JuicyMio

天选4Archlinux安装及使用小记

背景 Laptop:华硕天选4锐龙版 CPU:AMD Ryzen 7940H GPU:Radeon 780m Graphics + NVIDIA RTX 4060 Laptop 安装过程主要参考archlinux 简明指南 (icekylin.online) 由于要在win11的D盘切分出来一块空间(好不容易清出来的200G)安装,没办法使用archinstall脚本。(archinstall的分区方案只会分配一整块硬盘,差点把我D盘数据全清了)。 双显卡驱动 仍然按照archlinux 简明指南 (icekylin.online)进行操作。 安装nvidia闭源驱动时出现了各种问题,但是不装闭源驱动又经常卡死,尤其是我的双屏还需要独显输出,于是在timeshift数次之后终于艰难地驯服了双显卡驱动。使用了下面知乎老哥的方案:不安装optimus-manager,仅使用华硕提供的supergfxctl进行显卡切换。猜测optimus-manager使用Xorg进行切换和Wayland一起使用可能会出现卡死等问题,笔者暂且没有能力验证。 华硕天选5Pro使用Win11+ArchLinux双系统 - 知乎 (zhihu.com) sddm改为使用wayland启动(其实没什么意义,而且sddm的wayland支持尚不稳定)。 Kernel mode setting - ArchWiki (archlinux.org) 输入法 只装了个最基础的fcitx5就没管了。 字体 不知道怎么同时配置中文字体和英文字体,装了教程里的一堆字体之后,暂时摆了。 KDE 由于刚刚更新Plasma6,很多插件,主题还没有更新。(悲) 打算搞一套仿Mac的主题玩。 upd: 使用了Apple-Sonoma-Dark (KDE6的主题更新的还是很快的,给大佬点赞 GTK主题 White-Sur,跟全局主题尽量像一点。 桌面特效 窗口(比如Konsole)的透明度,模糊等配置在这里。 终端 Shell: zsh + zim + powerlevel10k, 常用插件装上 Terminal Emulator: Konsole Konsole好丑,想换。 alt+n会new tab,跟我钟爱的zellij冲突了。看了keyboard shortcut里没有这个快捷键,然后发现是按住alt+某个字母会触发toolbar上以该字母为首字母的功能(New Tab) 。。。索性直接把toolbar关了,反正也没什么用还丑。 zellij不知道为什么不能alt+方向键了。。。好在还能alt+hjkl zellij不能粘贴:config.kdl里修改copy_command为wl-copy NeoVim 下了个LazyVim,被眼花缭乱的功能吓晕,不过感觉可能习惯一下+关一些没用的东西之后会比LunarVim好用。 KDE Connect 向安卓传输文件及浏览安卓文件需安装sshfs...

March 26, 2024 · 1 min · 101 words · JuicyMio

为什么bss上有时会有stdin,stdout,stderr指针

研究了一下bss段上为什么会有stdin,stdout,stderr, 根据经验观察似乎在使用setvbuf时会出现这种情况, 经过控制变量测试, 发现只要setvbuf这三个变量的一个, 就会使该变量出现在bss段中. setvbuf使用了这三个stdio.h中的extern变量 /* Standard streams. */ extern FILE *stdin; /* Standard input stream. */ extern FILE *stdout; /* Standard output stream. */ extern FILE *stderr; /* Standard error output stream. */ /* C89/C99 say they're macros. Make them happy. */ #define stdin stdin #define stdout stdout #define stderr stderr 他们定义在stdio.c中, 不过右边的仍然是extern变量 #include "libioP.h" #include "stdio.h" #undef stdin #undef stdout #undef stderr FILE *stdin = (FILE *) &_IO_2_1_stdin_; FILE *stdout = (FILE *) &_IO_2_1_stdout_; FILE *stderr = (FILE *) &_IO_2_1_stderr_; 他们最初的定义在stdfile....

December 12, 2023 · 1 min · 118 words · JuicyMio