go-kiss / monkey

Go语言猴子补丁框架
https://taoshu.in/go/monkey/
MIT License
119 stars 18 forks source link

fix: window下支持 #3

Closed kkbblzq closed 2 years ago

kkbblzq commented 2 years ago

Windows

TEXT github.com/huandu/go-tls/g.getg.abi0(SB) C:/Users/lzq/go/pkg/mod/github.com/huandu/go-tls@v1.0.1/g/getg_amd64.s
  getg_amd64.s:9    0x45ab80        65488b0c2528000000  MOVQ GS:0x28, CX    
  getg_amd64.s:10   0x45ab89        488b8100000000      MOVQ 0(CX), AX  // 需要在move一次    
  getg_amd64.s:11   0x45ab90        4889442408      MOVQ AX, 0x8(SP)    
  getg_amd64.s:12   0x45ab95        c3          RET         

目前发现win下gs:0x28取出来其实是个二级指针,还需要再做一次取值才能和程序中的一致;我对汇编不是很熟,大致修改了一下,自己测试是可以的,大佬有更好的改法也可由大佬来改一下。

taoso commented 2 years ago

666,我确实没有留意 win 平台下 getg 的实现区别。

taoso commented 2 years ago

@kkbblzq master 分支已经开启 win 单元测试,非常感谢🙏

taoso commented 2 years ago

@kkbblzq 我的博客文章也同步更新了 https://taoshu.in/go/monkey-2.html

image
kkbblzq commented 2 years ago

@taoso 没啥没啥,刚好在找多协程的patch方案,win下没跑通就用x64debug断了下,发现cmp没过,猜是getg的问题,于是按照你的文章的流程生成汇编比对了一下,正好发现了问题😄