into device label H_EC code_regex BDC0,\s+16 replace_matched begin DC00,8,DC01,8 end;
into scope label ^^LPCB code_regex BDC0,\s+16 replace_matched begin DC00,8,DC01,8 end;
# 拆分32位属性
into scope code_regex BTY0,\s+32 replace_matched begin TY00,8,TY01,8,TY02,8,TY03,8 end;
# 所有大于32位的都不用拆
复制代码
从上面的图片可以看到补丁完美实现拆字节,下面再看看调用例子
访问属性补丁例子
# 16位属性访问替换补丁
# 注意BFC0在两个方法中有调用,都要写补丁替换
into method label BTIF code_regex \(BFC0, replaceall_matched begin (B1B2(FC00,FC01), end;
into method label _Q09 code_regex \^\^BFC0\) replaceall_matched begin ^^B1B2(FC00,FC01)) end;
# 32位属性访问替换补丁
into method label GBTI code_regex \(BTY0, replaceall_matched begin (B1B4(TY00,TY01,TY02,TY03), end;
# 56位属性替换补丁
into method label GBTI code_regex \(BDN0, replaceall_matched begin (RECB(0x10,56), end;
# 128位属性替换补丁
into method label GBTI code_regex \(BMN0, replaceall_matched begin (RECB(0x20,128), end;
# 从56位和128位属性访问补丁可以看到是通过RECB(偏移量, 位数)这个方法实现的,理论上16位、32位的也可以不拆,访问的时候用这个方法,但是回到准备阶段第4部我们发现算每个属性的偏移量这工作比拆字节还头大
其它举例
# 在做Thinakpad E430电量补丁的时候发现有类型\_SB.PCI0.LPCB.EC.HWAK这样的调用,我用下面的补丁修正
into method label _L43 code_regex \(\\\_SB.PCI0.LPCB.EC.HWAK replaceall_matched begin \(\\_SB.B1B2(\\_SB.PCI0.LPCB.EC.AK00, \\_SB.PCI0.LPCB.EC.AK01) end;
# 理论上不需要上面那个补丁应该都能替换掉所有的,但发现不彻底,原因未知
into ALL code_regex \(\\\_SB.PCI0.LPCB.EC.HWAK replaceall_matched begin \(\\_SB.B1B2(\\_SB.PCI0.LPCB.EC.AK00, \\_SB.PCI0.LPCB.EC.AK01) end;
ehabMan大神提供通用代码 ## RehabMan大神提供通用代码
# 这部分之间拷贝到你的补丁文件前面
# 特别注意部分行后面的\n,因为补丁里你即使输入了换行也是当一行出来的,所以加入了硬换行代码
# 删除原有B1B2方法(一般都没)
into method label B1B2 remove_entry;
# 新插入B1B2方法
# 这里需要注意一下,一般情况下默认的都没问题
# 有些型号可能会导致打完补丁的少量代码访问不了B1B2方法
# 这时候要么调整补丁绝对路径访问,要么插入的时候改个位置
into definitionblock code_regex . insert
# into Scope label \_SB code_regex . insert // 这是我改的位置