文章
skynet.call 调用
上次 写了一篇文章讲 skynet.send,最近想起一个 call 的问题,流程跟 skynet.send 差不多,再记录一下 虽然官方 wiki 并没有记录,但是 skynet.call 一个不存在的服务,并不会报错的,最神奇的是当你真的起了同名的服务,这个服务就真的能收到这条消息。skynet.call 本质上还是 skynet.send,只是 send 完以后将 session 号和 coroutine 记下来,然后自己调用 yield 将控制权交还给 skynet。按上篇文章所述,给一 …
上次 写了一篇文章讲 skynet.send,最近想起一个 call 的问题,流程跟 skynet.send 差不多,再记录一下 虽然官方 wiki 并没有记录,但是 skynet.call 一个不存在的服务,并不会报错的,最神奇的是当你真的起了同名的服务,这个服务就真的能收到这条消息。skynet.call 本质上还是 skynet.send,只是 send 完以后将 session 号和 coroutine 记下来,然后自己调用 yield 将控制权交还给 skynet。按上篇文章所述,给一 …
skynet 火焰图的新方法
最近 子熏同学 搞定了新的抓取火焰图的方法,他觉得改动有点多,不方便开源出来,不过我觉得思路很好,写篇文章记录一下 skynet 自带的魔改版 Lua,即使 Lua 代码在死循环,也能通过 gm 指令让 vm 停下来,看看出事的地方是哪里。这是通过引入 lua_checksig_ 来实现的。在 lvm.c 里,重点的几个 OPCODE: OP_JMP, OP_CALL, OP_TAILCALL, OP_FORLOOP 都会调用 lua_checksig 进行检查,如果设置了开关,就会通过 …
最近 子熏同学 搞定了新的抓取火焰图的方法,他觉得改动有点多,不方便开源出来,不过我觉得思路很好,写篇文章记录一下 skynet 自带的魔改版 Lua,即使 Lua 代码在死循环,也能通过 gm 指令让 vm 停下来,看看出事的地方是哪里。这是通过引入 lua_checksig_ 来实现的。在 lvm.c 里,重点的几个 OPCODE: OP_JMP, OP_CALL, OP_TAILCALL, OP_FORLOOP 都会调用 lua_checksig 进行检查,如果设置了开关,就会通过 …
shadowsocks 重定向攻击
最近看了一篇关于 Shadowsocks 重定向攻击 的论文,觉得很有趣。但是仓库里的 poc 代码没法直接用,自己重新抓了包,结果出了点问题,做了一通宵实验,才折腾出来,写篇博客记录一下 browser -> ss-local <======encrypted data======> ss-server -> outside internet ss 的数据流如上图,ss-local 对浏览器而言,就是一个普通的 socks5 代理。为了简化实现,shadowsocks 协议和 socks5 协 …
最近看了一篇关于 Shadowsocks 重定向攻击 的论文,觉得很有趣。但是仓库里的 poc 代码没法直接用,自己重新抓了包,结果出了点问题,做了一通宵实验,才折腾出来,写篇博客记录一下 browser -> ss-local <======encrypted data======> ss-server -> outside internet ss 的数据流如上图,ss-local 对浏览器而言,就是一个普通的 socks5 代理。为了简化实现,shadowsocks 协议和 socks5 协 …
二叉平衡树之 AVL 树
最近折腾了一下 AVL 树,留点笔记给未来的自己看看 :) 二叉树是基本的树结构,有左右两个孩子。一般情况下,查找可以做到 O(log n) 的时间复杂度。但是对于极端情况,可能恶化成 O(n),这相当不妙。当输入的数据是线性的,新增的子节点就会都在左子树(递减情况)或者右子树(递增情况)。如下图:  二叉树是基本的树结构,有左右两个孩子。一般情况下,查找可以做到 O(log n) 的时间复杂度。但是对于极端情况,可能恶化成 O(n),这相当不妙。当输入的数据是线性的,新增的子节点就会都在左子树(递减情况)或者右子树(递增情况)。如下图: ,然后 memset 将内存遍历一次,再将指针通过管道发给消费者。消费者拿到指针 …
最近,有部分越南的服务器内存不断上涨,怀疑是内存泄漏,因为框架提供的内存报告里,C 内存和 Lua 占用内存都不大,和 ps 里看的差好多。总内存在 12G 左右,C 和 Lua 的加起来约 4G,两者相差了 8G 经过一番排查,排除了混用 glibc malloc 和 jemalloc 的可能。于是 写了一个多线程的测试程序 ,由多个生产者 - 消费者线程对组成。生产者分配一个随机大小的内存(在 SIZE 范围内),然后 memset 将内存遍历一次,再将指针通过管道发给消费者。消费者拿到指针 …
罕见的 coredump 了
最近,项目在越南版删档测试的时候,发生了罕见的 coredump,简单记一点排查日志 目前的敏感词过滤是在 C 层做判定的,先后经过几个项目考验,模块算是比较稳定了。越南版有个需求,需要将敏感词里的空格去掉。比如敏感词是 abc,现在不能说 abc 了,但是玩家可以输入 a b c,所以需要过滤掉空格。有同事就对 C 层改了一下,判断 rune 是 32 的时候,就继续判断后续字符,出事的代码大致如下: lua_rawgeti(L, 1, j); uint32_t rune = …
最近,项目在越南版删档测试的时候,发生了罕见的 coredump,简单记一点排查日志 目前的敏感词过滤是在 C 层做判定的,先后经过几个项目考验,模块算是比较稳定了。越南版有个需求,需要将敏感词里的空格去掉。比如敏感词是 abc,现在不能说 abc 了,但是玩家可以输入 a b c,所以需要过滤掉空格。有同事就对 C 层改了一下,判断 rune 是 32 的时候,就继续判断后续字符,出事的代码大致如下: lua_rawgeti(L, 1, j); uint32_t rune = …
iPhone 惊爆史诗级漏洞?漏洞细节解析
最近 @axi0mX 提到 iOS 有一个不能修复的漏洞,命名 checkm8(读 checkmate),可以击穿 iPhone 4S 到 iPhone X 间的所有 iOS 设备。而且由于这个漏洞存在于只读的 bootrom 中,苹果应该没法通过系统更新来修复掉。他发布这个漏洞是为了让大家可以安全的在最新系统下越狱,这样系统更安全,开发者也有更大的空间。 好奇 看了一眼 GitHub 仓库 ,作者两天前提交了一份
最近 @axi0mX 提到 iOS 有一个不能修复的漏洞,命名 checkm8(读 checkmate),可以击穿 iPhone 4S 到 iPhone X 间的所有 iOS 设备。而且由于这个漏洞存在于只读的 bootrom 中,苹果应该没法通过系统更新来修复掉。他发布这个漏洞是为了让大家可以安全的在最新系统下越狱,这样系统更安全,开发者也有更大的空间。 好奇 看了一眼 GitHub 仓库 ,作者两天前提交了一份
线程数与游戏卡顿
在某天凌晨,欧美服出现了卡顿,但是服务器的 CPU 并不高,内部服务监控日志来看,是 clusteragent 的 mq overload 了,网卡 IO 从流量上来看,也没达到瓶颈。后来,对方 SA 说是参数配错了,8 核的机器配了 24 线程,改成 8 线程后重启,就不卡顿了。这里排查的时候用到了 tracetag,虽然有点麻烦,还是值得的。 后来,又再一次出现了同样的问题。反复调参后,发现 center 配 4 线程就有问题,配 6 线程就不会卡顿。子熏怀疑是 线程权重设置有问题 ,前面的 …
在某天凌晨,欧美服出现了卡顿,但是服务器的 CPU 并不高,内部服务监控日志来看,是 clusteragent 的 mq overload 了,网卡 IO 从流量上来看,也没达到瓶颈。后来,对方 SA 说是参数配错了,8 核的机器配了 24 线程,改成 8 线程后重启,就不卡顿了。这里排查的时候用到了 tracetag,虽然有点麻烦,还是值得的。 后来,又再一次出现了同样的问题。反复调参后,发现 center 配 4 线程就有问题,配 6 线程就不会卡顿。子熏怀疑是 线程权重设置有问题 ,前面的 …
技能问题引发内存泄漏
最近,在国服上的新职业技能,包含了一个弱点标记技能。玩家用技能打怪的时候,有一定概率给怪挂上弱点,下次攻击时用另一个技能攻击弱点,能爆出更大伤害。弱点的生命周期大约半分钟,过了以后弱点会消失,玩家退出场景后,弱点也会消失。 实现的时候,弱点命中情况记在了受害者身上,同时注册监听了一个玩家死亡事件,方便玩家死亡的时候,清理受害者身上记录的玩家命中弱点信息。但是实现的时候,漏掉了反注册监听事件,导致怪物虽然死亡,但是事件管理器上还一直引用着这个对象,引发内存泄漏。 万幸的是,对于场景服务,之前加上了 …
最近,在国服上的新职业技能,包含了一个弱点标记技能。玩家用技能打怪的时候,有一定概率给怪挂上弱点,下次攻击时用另一个技能攻击弱点,能爆出更大伤害。弱点的生命周期大约半分钟,过了以后弱点会消失,玩家退出场景后,弱点也会消失。 实现的时候,弱点命中情况记在了受害者身上,同时注册监听了一个玩家死亡事件,方便玩家死亡的时候,清理受害者身上记录的玩家命中弱点信息。但是实现的时候,漏掉了反注册监听事件,导致怪物虽然死亡,但是事件管理器上还一直引用着这个对象,引发内存泄漏。 万幸的是,对于场景服务,之前加上了 …