調用約定

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

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

关于协程的设计目的

最近有人问起我关于Go语言中协程的设计初衷问题,正好说一下我对这个玩意的想法,同时这个也算是面试中可能会问起的问题。 从操作系统的层面上来在,线程是由内核创建和管理,运行在内核态的一种数据结构。协程是由用户创建和管理,运行在用户态的一种数据结构。 ...

2025年04月18日 · 2 分钟 · 644 字 · sdttttt

关于杀毒软件

很长时间没有编写博客了,今天正好写一下。 不知道是什么时候开始的,可能是2018年之后,我电脑上就再也没有安装过杀毒软件。 主要学习软件开发方面的东西之后开始对一些计算机上的东西看法也发生了一些变化。 先说结论吧,正常以及安全的使用电脑的情况下,杀毒软件是没有安装的必要。 ...

2024年11月27日 · 2 分钟 · 865 字 · 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

关于代理软件的分流

分流其实我一直有在调整, 从最开始使用ssr默认的PAC规则,到后来使用的clash更加强大的规则集, 最后是现在使用的dae的规则. 我一直使用的是白名单模式的分流, 也就是命中的规则会走直连, 未命中的会走代理. 白名单又有一些问题, 确确实实的折磨到了我. ...

2023年12月06日 · 1 分钟 · 424 字 · sdttttt

openclash 转发改为TProxy

最近不想用Tun了,但是OpenClash的转发也不是全走的TProxy,TCP走Redirect,UDP走TProxy 这次修改一下防火墙来达到两个协议都用TProxy 1 2iptables -t mangle -N clash_tproxy 3 4iptables -t mangle -A clash_tproxy -p udp -m udp --sport 500 -j RETURN 5iptables -t mangle -A clash_tproxy -i lo -j RETURN 6iptables -t mangle -A clash_tproxy -m set --match-set localnetwork dst -j RETURN 7 8iptables -t mangle -A clash_tproxy -p udp -m udp --dport 53 -j RETURN 9 10iptables -t mangle -A clash_tproxy -d 198.18.0.0/16 -p udp -j TPROXY --on-port 7895 --on-ip 0.0.0.0 --tproxy-mark 0x162 11iptables -t mangle -A clash_tproxy -d 198.18.0.0/16 -p tcp -j TPROXY --on-port 7895 --on-ip 0.0.0.0 --tproxy-mark 0x162 12 13iptables -t mangle -A clash_tproxy -p udp -j TPROXY --on-port 7895 --on-ip 0.0.0.0 --tproxy-mark 0x162 14iptables -t mangle -A clash_tproxy -p tcp -j TPROXY --on-port 7895 --on-ip 0.0.0.0 --tproxy-mark 0x162 15 16iptables -t mangle -N clash_tproxy_output 17 18iptables -t mangle -A clash_tproxy_output -p udp -m udp --sport 500 -j RETURN 19iptables -t mangle -A clash_tproxy_output -d 198.18.0.0/16 -p udp -m owner ! --uid-owner 65534 -j MARK --set-xmark 0x162 20iptables -t mangle -A clash_tproxy_output -d 198.18.0.0/16 -p tcp -m owner ! --uid-owner 65534 -j MARK --set-xmark 0x162 21 22iptables -t mangle -A PREROUTING -j clash_tproxy 23iptables -t mangle -A OUTPUT -j clash_tproxy_output 然后修改OpenClash的系统脚本 ...

2023年11月22日 · 1 分钟 · 417 字 · sdttttt

更加高性能的代理程序

在OpenWrt社区逛的时候又发现了一些宝贝。 https://github.com/daeuniverse/dae DAE(鹅)又是一个代理程序,不过它是透明代理,可以理解成全局代理,所有流量都会经过该软件。 DAE的特色是使用上了eBPF技术。 eBPF 是 extended Berkeley Packet Filter 的缩写,它是一种内核技术,允许开发人员在不修改内核代码的情况下运行特定的功能。eBPF 的概念源自于 Berkeley Packet Filter(BPF),后者是由贝尔实验室开发的一种网络过滤器,可以捕获和过滤网络数据包。 其实用最简单的话来说就是内核插件技术。 ...

2023年11月22日 · 2 分钟 · 951 字 · sdttttt