ksco 的工作日志
245 subscribers
168 photos
10 videos
4 files
84 links
内容主要取决于我正在做的东西,目前主要是模拟器 / DBT 之类的散乱话题。
Download Telegram
我还不能独当一面真是太好了
fragment writes all 6 flags prior to reading any
bb ilist before mangling:
TAG 0x00000000000100c4
<raw 0x00000000000100c4-0x00000000000100c8>::
+0 L3 @0x0000003dd284dc98 ff010113 addi %sp -16 -> %sp
---- multi-instr boundary ----
<raw 0x00000000000100c8-0x00000000000100cc>::
+4 L3 @0x0000003dd284dd68 00113423 sd %ra -> +0x08(%sp)[8byte]
---- multi-instr boundary ----
<raw 0x00000000000100cc-0x00000000000100d0>::
+8 L3 @0x0000003dd284ddd8 02b00513 addi %zero 43 -> %a0
---- multi-instr boundary ----
<raw 0x00000000000100d0-0x00000000000100d4>::
<translation 0x00000000000100d0>::
+12 L3 @0x0000003dd284de90 fe1ff0ef jal $0x00000000000100b0 -> %ra
---- multi-instr boundary ----
END 0x00000000000100c4

bb ilist after mangling:
TAG 0x00000000000100c4
<raw 0x00000000000100c4-0x00000000000100c8>::
+0 L3 @0x0000003dd284dc98 ff010113 addi %sp -16 -> %sp
---- multi-instr boundary ----
<raw 0x00000000000100c8-0x00000000000100cc>::
+4 L3 @0x0000003dd284dd68 00113423 sd %ra -> +0x08(%sp)[8byte]
---- multi-instr boundary ----
<raw 0x00000000000100cc-0x00000000000100d0>::
+8 L3 @0x0000003dd284ddd8 02b00513 addi %zero 43 -> %a0
---- multi-instr boundary ----
+12 m4 @0x0000003dd284df00 000100b7 lui 0x10 -> %ra
---- multi-instr boundary ----
+16 m4 @0x0000003dd284df70 0d40809b addiw %ra 212 -> %ra
---- multi-instr boundary ----
END 0x00000000000100c4


Before mangle 的 bb 似乎不太对,after mangle 之后,jal 直接被删掉了,所以 before 应该复制一份 position dependent 的,然后标记为 meta instruction,但我好像没在 Aarch64 port 上看到这个行为 🤔️
艹竟然是因为 ubr 的判断写错了
昨睡眠大失败,故没有任何产出,离被辞退又近了一步。
寝床爆破!元気盛盛!今日生産力 MAX
2
在 fragment_create 打断点,continue 3 次继续 debug,先出去玩了
晚归,然后轻轻松松就修复了这个以为很难的 bug,惊喜
断点打在 jit code 上,第三个 bb segfaulted,问题出在 emit_indirect_branch_lookup ,明天继续!!终于开始着手实现 ibl 相关的东西了,进展比预计的要顺利很多,DR 设计得真是不错。
放假了为什么同事还在卷啊
预计最晚今晚七点开始工作!已经迫不及待
终于下定决心找找为什么 DynamoRIO RV64 port 会重复编译。预期要花很久,但实际很快就解决了:https://github.com/DynamoRIO/dynamorio/pull/6252

发现 CMake 还挺直观的,虽然从来没学过,但还是可以根据直觉来修 bug。
啊,一直被各种事情打扰导致完全没有工作效率哎
从 Revy 那里用将近半价的价格收了一台 Matebook E Go (Windows on ARM),用了四天了,这设备真的是一堆破问题。

本身就不太喜欢 Windows,再加上 ARM 原生的应用不多(尤其是华为自带的软件竟然全都是 x86_64 的,简直不可原谅),Windows x86 Emulation 转译的效率又极其低下,体验真是一言难尽(微软你看看隔壁罗塞塔 2!)。

所以我把能卸载 x86 的应用全都卸载了,好在我日常用的软件都是有 ARM 原生的,最可惜的就是失去了华为生态的所有功能(比如笔和键盘的电量显示)。

但我还是很喜欢这个设备,硬件素质很好,生产力/娱乐性都可以吊打 iPad,还有 WSL/WSA,多核性能直逼 M1 的 80%,只要 3000 块,还要什么自行车。
测了一下 7z b,结果意外的还不错,那为什么用起来感觉那么卡顿呢
#DynamoRIO

emit fragment 分为两个阶段:1)求大小;2)emit 代码

fragment prefix 大小固定为 8,两个阶段一致;exit stub size 固定为 64,两个阶段一致;所以问题应该出在 bb 本身的代码上。

大小差了 2,猜测大概率是 compressed 指令导致的?
第一阶段算出来的 offset 是 122,检查过了,这个数字是对的,所以问题应该出在第二阶段的 set_linkstub_fields 函数里,step 进去看一下。
上游放假了吗,怎么还不来 review 我的 PR
我怎么会在 encode 里面写死 pc + 4 啊,头疼。因为 bb 里的正常指令都有 raw bits,所以走的 fast pass,只有最后面的一条 cti 因为被 mangle 过了 rawbits 被取消了,才走到 pc + 4。