ksco 的工作日志
245 subscribers
168 photos
10 videos
4 files
84 links
内容主要取决于我正在做的东西,目前主要是模拟器 / DBT 之类的散乱话题。
Download Telegram
前几天 GitHub 新首页推了个破解 Copilot 的项目给我,今天那个项目连带作者被一锅端了 🤔️
思考了一下如何在 WebAssembly 这种哈弗架构中做 JIT:

主模块中需要导出的东西:

1. indirect function table :实现“函数指针”调用
2. memory :用于把动态生成的 wasm module 传给 JavaScript

在主模块中动态生成 Wasm Module Binary(JIT 模块),放到 memory 里面,然后调用 JavaScript,JavaScript 从 memory 拿到数据后编译并实例化模块。
JavaScript 在实例化模块后,需要做 late linking,把 JIT 模块导出的函数注册到主模块的 indirect function table
另外 JIT 模块导出的函数也会直接读写主模块的内存,减少数据交换。这就要求 JIT 模块导入主模块的 memory ,这一步可以在 JIT 模块初始化时完成。
当主模块需要调用 JIT 出来的函数时,使用 call_indirect $function_table_index 即可。
正式版的盒子好大
3
Apple 的 Find My 总是误报 Left behind,每次误报都是心脏骤停,在想要不要关掉算了🤔️
[11:18 PM] ksco: I was tired of debugging so I took a nap, after waking up, it took me like 5 minutes to find the cause.
[11:19 PM] ksco: amazing.
好久没写 PPT 了
我的 BENQ 显示器和 M1/M2 的机器好像不太对付,经常会闪屏,但今天这个属实有点离谱了
🤔️
🤔4
^ 单是把这样一个复杂的东西循序渐进讲得这么清楚易懂感觉就非常厉害了。
一天没上 tg 怎么多了这么多订阅?🤔️
🔥3
感觉任何想要 fancy 一点的用户空间模拟器都免不了要自己实现动态链接器,QEMU 在这方面是不太入流的)
#DynamoRIO 目前针对 thread pointer 的做法是:在进入 guest 之前,把 tp 存起来,然后把 tp 指向 spill state。guest 所有的访问 tp 的指令当然都需要 mangle。从 guest 中退出的时候,再把 tp 恢复即可。这样有个好处就是,不需要再偷一个寄存器放 tp 的原始值(host thread pointer)了。

但今天发现一个大问题是,如果 client 设置了 itimer,跳转的地方是 guest 代码时,tp 的值其实是 spill state 而不是 host thread pointer,这样一来 sighandler 在读 thread private context 的时候就炸掉了。

所以合适的做法可能还是要偷一个寄存器,让 tp 的值始终保持 host thread pointer 不变。明天把这部分重写一下吧。
才发现 HomePod 上灯的亮度是会随着环境光变化的。
#DynamoRIO 遇到了大问题。对于类似 lr beq sc 这种指令序列,因为中间的 cbr 存在,所以这个序列会被 DynamoRIO 撕成两个 basic block,然后两个 basic block 中间,就不可避免的会执行一些访存指令。这在 Unmatched 上就会直接卡死,这是正常的,因为 spec 不允许 lr sc 中间插访存。

这可咋办了,感觉要识别这种序列,然后特殊处理了,先睡觉吧。
连提了 5 个 PR,竟然一次性全 approve 了🔥
🔥9