TGTGInsighttelegram intelligenceLIVE / telegram public index
Back to channels
Welcome to the Black Parade avatar

TGINSIGHT CHAT

Welcome to the Black Parade

@TheB1ackParade

Music

Death has many faces, I look forward to seeing this one.

Subscribers787Current channel subscribers
Tracked posts907Indexed post count
Recent reach4,741Sum of recent post views
Recent posts

Recent posts

Page 46 of 76 · 907 posts

Posted Oct 5

和 Gray 反复确认后发现,3.12 的确是在一个 commit 的中移除了 function_entry 和 function_return 的 USDT Point https://github.com/python/cpython/issues/110385 我们应该是第一个发现的。。。然而始作俑 commit 是作为 PEP 669 的一个实现在四个月前引入的 https://github.com/python/cpython/commit/411b1692811b2ecac59cb0df0f920861c7cf179a 只能高呼 Python 遥遥领先,遥遥领先(不知道作者是故意的还是不小心的(要是因为 669 而移除 USDT 的话,那就属于开历史倒车的行为了

179 views

Posted Oct 5

奥格对 CPython USDT 的应用很感兴趣,那我就详细说说。 核心是取到 PyFrameObject,能取到这玩意,就可以做 python 虚拟机级的栈回溯,也可以在 function__entry 取到入参:_PyInterpreterFrame(不过需要比较辛苦的解析工作)。 但是落脚点是怎么取到 PyFrameObject,因为 CPython 并没有直接传递这个指针给 USDT。 我们直接去看 function__entry 这个 USDT 所在的地方,图一: 1. 最后的 nop 在 attach 之后会变成 int3 2. 上一个指令是 call PyFrame_GetLineNumber 3. 简单看一眼 PyFrame_GetLineNumber 这个函数的声明: PyFrame_GetLineNumber(PyFrameObject *f) ,入参就是 PyFrameObject 4. 所以 nop 上面两行的指令 mov %rbx,%rdi 我们就可以知道 rbx == rdi == &PyFrameObject 所以至少在这个版本的 CPython 上,我们可以在 function__entry 这个 USDT 通过 rbx 取到 PyFrameObject。 当然这是需要打表的,比如 3.10 在 rbx,3.11 可能在其他寄存器。或者实时分析一下 ELF 也行。 当然这只是开始的开始,真要做到工业级的应用,还有很多工作要做。我只是想说,CPython USDT 虽然看起来简陋,但是我们已经可以做到很多很多的事情。 只可惜我要做的事情太多了,CPython 的 tracing tool 只能让少年们去做了。

724 views

Posted Oct 5

就在今天!(虽然似乎大家昨天就玩上了。。。)

183 views

Posted Oct 4

https://lpc.events/event/17/contributions/1609/ kp 和 up 似乎目前就这一位 Jiri Olsa 在往前推进 😭 好像 ftrace 也是他。。 很久以前总是看到有人说 “你能想到的别人早就想到了”,我说放屁。我举目四望,所见之处百废待兴,太多的事情没人去做,只有一两位开源英雄在推动巨石。

2,150 views

Posted Oct 3

perf 那个不错耶!居然是通过插入一层 trampoline frame 来实现的,哇这思路,又新又好!解释型语言都应该这么干! https://github.com/python/cpython/blob/1001233fe16a02f70ca9bccf66b018cc63fe784c/Python/perf_trampoline.c 至于 debugging API,求求大家先把 CPython 的 USDT 用起来 😡 或者有人感兴趣的话我们可以详细讨论

185 views

Posted Sep 29

在我已经找不到喜欢的美剧看的这个漫长的季节里,居然还有这么好的国产剧!

211 views

Posted Sep 29

试了一下 Bard,比 ChatGPT-3.5 好一丢丢,但是还是写不出我的代码:用 Go 实现 Linux 下的 tail -f: > How does linux implement tail -f? Bard 说了三个方案,第一个方案是 inotify。 > Let's implement it using the 1st technique in Golang. You can only use golang standard library. The program accepts the…

221 views

Posted Sep 29

> In the Python code you provided 哪来的 Python code,您能不能正常一点... 抛开莫名其妙的部分,我感觉还是在胡说八道。我当然知道 tcp_event_data_recv 和 skb_attempt_defer_free 会把 skb 扔到其他线程,但是我问的是很特定的两个函数 ip_rcv 和 icmp_rcv 之间有没有可能发生线程切换。算了,我还是先随便糊弄一下,出了问题再说- -

168 views

Posted Sep 28

试了一下 Bard,比 ChatGPT-3.5 好一丢丢,但是还是写不出我的代码:用 Go 实现 Linux 下的 tail -f: > How does linux implement tail -f? Bard 说了三个方案,第一个方案是 inotify。 > Let's implement it using the 1st technique in Golang. You can only use golang standard library. The program accepts the input from command line argument. 第一次我从 AI 嘴里看到了正确的 syscall.InotifyAddWatch 调用。 不过编译不过,发明了一些常量,我把报错扔回去。 > Just tried to compile it, got following errors: ./main.go:23:45: undefined: syscall.AT_FDCWD 然后它就开始胡说八道了,先让我 go get syscall,又说 “I have tested the code again and it seems to compile and run without any errors on my system”,我不信。。 再回头鞭打一下 ChatGPT-3.5,用相同的提问,第一个提问(How does linux implement tail -f?)就开始胡说八道,都提不到 inotify。如果强制让它使用标准库和 inoitfy,它会无视使用标准库的要求,上来就 go get github.com/fsnotify/fsnotify , 当然这是假的 url 居然真有这项目,震撼,可惜代码根本不能正常工作。 再次强调只能用标准库之后,GPT 就拒绝用 inotify 实现了。 符合预期,满意地离开了 AI 们(菜到要在 AI 上找优越感😭

172 views

Posted Sep 27

哈!新功能!(我是不是火星了 - -)

168 views

Posted Sep 27

锈湖新作

177 views

Posted Sep 25

现在查的这个 bug 是 cilium 开启加密后从 A 版本降级到 B 版本会短暂断流。我用了几小时才注意到问题的关键,没想到在我最开始的 tracing log 里就有这个关键了: 11:09:12.676 ffff9e1f127f8f00 xfrm4_remove_tunnel_encap mark=0x20d00 if=8(cilium_vxlan) proto=0x8 netns=4026531992 len=196 IPv4=10.201.8.67>10.201.5.29 IPSecESP=spi:3,seq:99426 11:09:12.676 ffff9e1f127f8f00 xfrm_rcv_cb mark=0x20d00 if=8(cilium_vxlan) proto=0x8 netns=4026531992 len=196 IPv4=10.201.8.67>10.201.5.29 IPSecESP=spi:3,seq:99425 正确的内核行为应该是在 xfrm4_remove_tunnel_encap 之后 skb 被解密,但是这里日志依然显示 ESP 加密的 skb。这不合理,如果解密失败内核应该直接扔掉 skb 的。 我都已经开始翻看内核了,最后才发现这个魔鬼细节:第一行的 ESP seq 是 99426,而第二行的 seq 是 99425,这是两个不同的头! 也就是说内核正确顺利地解密了 skb,只不过内部又是一层 ESP!所以直接原因就找到了,skb 在源头处被错误地加密了两次。 真的非常细,明明就在眼皮底下,却从没注意到。这简直太好玩了!

203 views
12•••5•••10•••15•••20•••25•••30•••35•••40•••4445464748•••50•••55•••60•••65•••70•••7576