关于Go语言在操作系统上的调度

最近一直在写Go,对这个语言的体会也是越来越深。 go作为编译类语言,能直接构建对应平台的二进制文件,但是实际上语言本身也是有runtime的。 这点其实和其他语言很不一样,所以这篇文章就来讲讲这个。 首先需要知道,go编译出来的二进制,确实是实打实的纯汇编产物。 ...

2026年01月22日 · 1 分钟 · 402 字 · sdttttt

下一个想写的项目

最近再配置自己的服务器,有些nginx和docker-compose的配置文件一直在调整。 其中有个很操蛋的事情,就算代码格式化的问题,docker-compose还好,nginx的配置我已经写了接近300行,很多嵌套都相当的乱,因为有lua的部分,但是nginx的配置格式化程序真的很少,vscode我懒得去用,那玩意一打开我的电脑就开始咆哮了。 ...

2025年09月13日 · 1 分钟 · 254 字 · sdttttt

C草的编译期编程:元模版

最近一直在写time-devourer这个项目,我的多态设计的强迫症又犯了,不可避免和元模版打交道了。这篇文章简单的稍微讲一下我遇到的几个场景。 自动包装COM对象指针,生命周期结束自动调用Release。要求T必须能调用Release方法,且T必须是IUnknown的子类。 头一次写模版元编程给我肘晕了,这就是编译期编程么,害怕. ...

2025年09月10日 · 2 分钟 · 985 字 · sdttttt

软路由更新日志

最近发现clash(mihomo)核心的内存使用率有明显问题,用几天这玩意就能吃200M以上的内存了,再后面就不得不重启。 并且这个核心的DNS性能也存在部分问题,我不得不使用chinadns-ng来代替clash内部的dns. ...

2025年06月21日 · 4 分钟 · 1798 字 · sdttttt

C中的指针运算,类型转换以及函数指针

这次依然是从汇编开始分析C语言里的一些语法实现,这次还是Windows平台上为主~ 直接上最简单的: 1int z = 0; 2char s1 = (char)z; 3 4// ASM 5int* z = 0; 6// 这次就直接显示符号名吧,不看内存地址了 7// dword ptr就是数据类型声明 8mov dword ptr [z],0 9char* s1 = (char*)z; 10// movzx这个指令,下面讲解,总之就是把z移动到eax寄存器. 11movzx eax,byte ptr [z] 12// 直接粗暴的进行一个强转,al是AX的第八位,AX是EAX的低16位 13// mov指令要求操作数大小相等,byte ptr只占8个字节,所以这里用AL寄存器 14mov byte ptr [s1],al movzx这个指令简单来说就是把小字节操作数移动到大字节寄存器,同时让大字节的高位补零。 ...

2025年05月04日 · 2 分钟 · 995 字 · sdttttt

調用約定

感觉没什么营养,懒得写了。

2025年04月24日 · 1 分钟 · 13 字 · sdttttt

看一眼Linux的匯編

繼續上一篇文章,還是那個代碼,這次我們在Linux上編譯試試,看看和windows有什麽不同。 1int add(int a, int b) { 2 return a + b; 3} 4 5int main() 6{ 7 int a = add(1, 2); 8 return 0; 9} 匯編來咯: 1 0x000055555555460e <+0>: push rbp 2 0x000055555555460f <+1>: mov rbp,rsp 3 0x0000555555554612 <+4>: sub rsp,0x10 4 0x0000555555554616 <+8>: mov esi,0x2 5 0x000055555555461b <+13>: mov edi,0x1 6 0x0000555555554620 <+18>: call 0x5555555545fa <add> 7 0x0000555555554625 <+23>: mov DWORD PTR [rbp-0x4],eax 8 0x0000555555554628 <+26>: mov eax,0x0 9 0x000055555555462d <+31>: leave 10 0x000055555555462e <+32>: ret 11 12 ;其實大差不差,前三句是保存上下文和開闢棧幀 13 ;後面把參數放進去,調用add,然後吧eax裏的返回值取出到rbp-4這個地址裏,清零 14 ;leave的看起來像是linux平臺下獨有的指令 15 ;這個指令其實基本等同于 mov rsp, rbp; pop rbp 16 ;實際上就是回復上下文 17 18 19 0x00005555555545fa <+0>: push rbp 20 0x00005555555545fb <+1>: mov rbp,rsp 21 0x00005555555545fe <+4>: mov DWORD PTR [rbp-0x4],edi 22 0x0000555555554601 <+7>: mov DWORD PTR [rbp-0x8],esi 23 0x0000555555554604 <+10>: mov edx,DWORD PTR [rbp-0x4] 24 0x0000555555554607 <+13>: mov eax,DWORD PTR [rbp-0x8] 25 0x000055555555460a <+16>: add eax,edx 26 0x000055555555460c <+18>: pop rbp 27 0x000055555555460d <+19>: ret 28 29 ;這裏也很簡單,前兩句還是保存上下文,不過這次沒有開闢棧幀 30 ;直接把兩個寄存器的值移動到内存地址裏再放在寄存器裏再計算? 31 ;這樣寫有點逆天,不過估計是debug模式完全沒有優化 32 ;最後彈出地址到棧裏返回

2025年04月24日 · 1 分钟 · 410 字 · sdttttt

久违的继续学汇编

上次学汇编都是2年前了好像,学了一些基本的指令用法。 这次像重新捡起来了,同时想要自己写点新的玩意,目前的知识不太够呢 慢慢学吧… 这次开始读汇编和画栈结构吧~ 先从简单的开始: 1int add(int a, int b) { 2 return a + b; 3} 4 5int main() 6{ 7 int a = add(1, 2); 8 return 0; 9} 汇编如下(Windows平台): ...

2025年04月23日 · 2 分钟 · 902 字 · sdttttt

在Linux上数据包的路由行为

好长时间没写blog了,这段时间暂时没有写代码,一直在倒腾软路由的事情。 不过多亏了软路由,我对网络知识的储备又增加了一些。 这篇文章是想好好讲一下关于Linux上的网络数据包的路由处理. 据我现在所了解到的知识,Linux上决定数据包路由流向的关键模块有两个, 第一个是RPDB(Routing Policy DataBase 路由策略数据库),第二个是netfilter/iptables,很多人会把netfilter/iptables直接称之为iptables,也没有问题,但是严格上来说还是分开为好,netfilter是内核中的一部分,提供了一组数据包的hook. iptables则是实现了这些hook,并且提供了在用户空间操作这些hook的办法. ...

2024年06月12日 · 4 分钟 · 1569 字 · sdttttt

Unix平台和Windows的文件分享问题

前几天重新把家里的板子重装了系统,这次打算不使用云盘之类的软件来保存文件了,就用简单的samba之类系统级的文件分享。 samba每次保存大量的漫画说实话速度有点慢。所以这次我想用NFS试试。看很多文章分析NFS处理小文件的速度极快。 ...

2023年12月09日 · 3 分钟 · 1059 字 · sdttttt