cch123 / supermonkey

Patch all Go functions for testing
MIT License
250 stars 17 forks source link

The test code has a certain probability of error #22

Open piaoxue1949 opened 1 year ago

piaoxue1949 commented 1 year ago

When running the examples program, package the following error, has added the compile flag "-gcflags=all=-l"。 It seems that the memory referenced by uintptr in the patchSymbolValue function is released by GC。 go version go1.19.1 windows/amd64

original function output:
fake
after patch, function output:
please be polite
unpatch, then output:
fake
restore, then output:
please be polite
unpatch, then output:
fake

original function output:
fake
unexpected fault address 0x4fe6e0
fatal error: fault
[signal 0xc0000005 code=0x0 addr=0x4fe6e0 pc=0xc68610]

goroutine 1 [running]:
runtime.throw({0xd37f4e?, 0xc000096300?})
        D:/Program Files/Go/src/runtime/panic.go:1047 +0x65 fp=0xc000095d00 sp=0
xc000095cd0 pc=0xc3c6e5
runtime.sigpanic()
        D:/Program Files/Go/src/runtime/signal_windows.go:261 +0xb6 fp=0xc000095
d30 sp=0xc000095d00 pc=0xc4e2b6
runtime.memmove()
        D:/Program Files/Go/src/runtime/memmove_amd64.s:178 +0x130 fp=0xc000095d
38 sp=0xc000095d30 pc=0xc68610
github.com/cch123/supermonkey/internal/bouk.ReplaceFunction(0xd0dcc0?, 0xd51cf8?
)
        D:/work/github/GO/补丁/supermonkey/internal/bouk/replace.go:26 +0x68 fp=
0xc000095da0 sp=0xc000095d38 pc=0xcae088
github.com/cch123/supermonkey/internal/bouk.patchSymbolValue({0xd0f240?, 0x4fe6e
0?, 0xc000165790?}, {0xd0dcc0, 0xd51cf8, 0x13})
        D:/work/github/GO/补丁/supermonkey/internal/bouk/monkey.go:108 +0x1d6 fp
=0xc000095e58 sp=0xc000095da0 pc=0xcadb36
github.com/cch123/supermonkey/internal/bouk.PatchSymbol({0xd0f240?, 0x4fe6e0?}, 
{0xd0dcc0, 0xd51cf8})
        D:/work/github/GO/补丁/supermonkey/internal/bouk/monkey.go:58 +0x87 fp=0
xc000095ec8 sp=0xc000095e58 pc=0xcad347
github.com/cch123/supermonkey.PatchByFullSymbolName({0xd45004, 0xe}, {0xd0dcc0, 
0xd51cf8})
        D:/work/github/GO/补丁/supermonkey/supermonkey.go:41 +0xf9 fp=0xc000095f
28 sp=0xc000095ec8 pc=0xcfdbd9
main.patchFuncSymbol()
        D:/work/github/GO/补丁/supermonkey/examples/patch_func_symbol.go:13 +0x6
c fp=0xc000095f70 sp=0xc000095f28 pc=0xcfe5ac
main.main()
        D:/work/github/GO/补丁/supermonkey/examples/main.go:5 +0x1c fp=0xc000095
f80 sp=0xc000095f70 pc=0xcfe23c
runtime.main()
        D:/Program Files/Go/src/runtime/proc.go:250 +0x1c8 fp=0xc000095fe0 sp=0x
c000095f80 pc=0xc3ed68
runtime.goexit()
        D:/Program Files/Go/src/runtime/asm_amd64.s:1594 +0x1 fp=0xc000095fe8 sp
=0xc000095fe0 pc=0xc67681

goroutine 2 [force gc (idle)]:
runtime.gopark(0xd51f70, 0xe5d1e0, 0x11, 0x14, 0x1)
        D:/Program Files/Go/src/runtime/proc.go:363 +0xfd fp=0xc000055f88 sp=0xc
000055f58 pc=0xc3f15d
runtime.goparkunlock(0x0?, 0x0?, 0x0?, 0x0?)
        D:/Program Files/Go/src/runtime/proc.go:369 +0x2a fp=0xc000055fb8 sp=0xc
000055f88 pc=0xc3f1ea
runtime.forcegchelper()
        D:/Program Files/Go/src/runtime/proc.go:302 +0xa5 fp=0xc000055fe0 sp=0xc
000055fb8 pc=0xc3ef85
runtime.goexit()
        D:/Program Files/Go/src/runtime/asm_amd64.s:1594 +0x1 fp=0xc000055fe8 sp
=0xc000055fe0 pc=0xc67681
created by runtime.init.6
        D:/Program Files/Go/src/runtime/proc.go:290 +0x25

goroutine 3 [GC sweep wait]:
runtime.gopark(0xd51f70, 0xe5d3a0, 0xc, 0x14, 0x1)
        D:/Program Files/Go/src/runtime/proc.go:363 +0xfd fp=0xc000057f68 sp=0xc
000057f38 pc=0xc3f15d
runtime.goparkunlock(0x1?, 0x0?, 0x0?, 0x0?)
        D:/Program Files/Go/src/runtime/proc.go:369 +0x2a fp=0xc000057f98 sp=0xc
000057f68 pc=0xc3f1ea
runtime.bgsweep(0x0?)
        D:/Program Files/Go/src/runtime/mgcsweep.go:297 +0xd1 fp=0xc000057fc8 sp
=0xc000057f98 pc=0xc27791
runtime.gcenable.func1()
        D:/Program Files/Go/src/runtime/mgc.go:178 +0x26 fp=0xc000057fe0 sp=0xc0
00057fc8 pc=0xc1bd46
runtime.goexit()
        D:/Program Files/Go/src/runtime/asm_amd64.s:1594 +0x1 fp=0xc000057fe8 sp
=0xc000057fe0 pc=0xc67681
created by runtime.gcenable
        D:/Program Files/Go/src/runtime/mgc.go:178 +0x6b

goroutine 4 [GC scavenge wait]:
runtime.gopark(0xd51f70, 0xe5d460, 0xd, 0x14, 0x2)
        D:/Program Files/Go/src/runtime/proc.go:363 +0xfd fp=0xc000065f48 sp=0xc
000065f18 pc=0xc3f15d
runtime.gopark(0xd51f70, 0xe5d460, 0xd, 0x14, 0x2)
        D:/Program Files/Go/src/runtime/proc.go:363 +0xfd fp=0xc000065f48 sp=0xc000065f18 pc=0xc3f15d
runtime.goparkunlock(0xd5b5d0?, 0x0?, 0x0?, 0x0?)
        D:/Program Files/Go/src/runtime/proc.go:369 +0x2a fp=0xc000065f78 sp=0xc000065f48 pc=0xc3f1ea
runtime.(*scavengerState).park(0xe5d460)
        D:/Program Files/Go/src/runtime/mgcscavenge.go:389 +0x4b fp=0xc000065fa0 sp=0xc000065f78 pc=0xc253eb
runtime.bgscavenge(0x0?)
        D:/Program Files/Go/src/runtime/mgcscavenge.go:622 +0x65 fp=0xc000065fc8 sp=0xc000065fa0 pc=0xc259e5
runtime.gcenable.func2()
        D:/Program Files/Go/src/runtime/mgc.go:179 +0x26 fp=0xc000065fe0 sp=0xc000065fc8 pc=0xc1bce6
runtime.goexit()
        D:/Program Files/Go/src/runtime/asm_amd64.s:1594 +0x1 fp=0xc000065fe8 sp=0xc000065fe0 pc=0xc67681
created by runtime.gcenable
        D:/Program Files/Go/src/runtime/mgc.go:179 +0xaa

goroutine 5 [finalizer wait]:
runtime.gopark(0xd51f70, 0xeb39f0, 0x10, 0x14, 0x1)
        D:/Program Files/Go/src/runtime/proc.go:363 +0xfd fp=0xc000059df8 sp=0xc000059dc8 pc=0xc3f15d
runtime.goparkunlock(0xc3f72f?, 0xc5?, 0xee?, 0x18000000000?)
        D:/Program Files/Go/src/runtime/proc.go:369 +0x2a fp=0xc000059e28 sp=0xc000059df8 pc=0xc3f1ea
runtime.runfinq()
        D:/Program Files/Go/src/runtime/mfinal.go:180 +0x107 fp=0xc000059fe0 sp=0xc000059e28 pc=0xc1ade7
runtime.goexit()
        D:/Program Files/Go/src/runtime/asm_amd64.s:1594 +0x1 fp=0xc000059fe8 sp=0xc000059fe0 pc=0xc67681
created by runtime.createfing
        D:/Program Files/Go/src/runtime/mfinal.go:157 +0x45

goroutine 6 [GC worker (idle)]:
runtime.gopark(0xd51e20, 0xc000086000, 0x18, 0x14, 0x0)
        D:/Program Files/Go/src/runtime/proc.go:363 +0xfd fp=0xc000067f48 sp=0xc000067f18 pc=0xc3f15d
runtime.gcBgMarkWorker()
        D:/Program Files/Go/src/runtime/mgc.go:1235 +0x107 fp=0xc000067fe0 sp=0xc000067f48 pc=0xc1d807
runtime.goexit()
        D:/Program Files/Go/src/runtime/asm_amd64.s:1594 +0x1 fp=0xc000067fe8 sp=0xc000067fe0 pc=0xc67681
created by runtime.gcBgMarkStartWorkers
        D:/Program Files/Go/src/runtime/mgc.go:1159 +0x25

goroutine 18 [GC worker (idle)]:
runtime.gopark(0xd51e20, 0xc0004c0000, 0x18, 0x14, 0x0)
        D:/Program Files/Go/src/runtime/proc.go:363 +0xfd fp=0xc000061f48 sp=0xc000061f18 pc=0xc3f15d
runtime.gcBgMarkWorker()
        D:/Program Files/Go/src/runtime/mgc.go:1235 +0x107 fp=0xc000061fe0 sp=0xc000061f48 pc=0xc1d807
runtime.goexit()
        D:/Program Files/Go/src/runtime/asm_amd64.s:1594 +0x1 fp=0xc000061fe8 sp=0xc000061fe0 pc=0xc67681
created by runtime.gcBgMarkStartWorkers
        D:/Program Files/Go/src/runtime/mgc.go:1159 +0x25

goroutine 34 [GC worker (idle)]:
runtime.gopark(0xd51e20, 0xc00020d5a0, 0x18, 0x14, 0x0)
        D:/Program Files/Go/src/runtime/proc.go:363 +0xfd fp=0xc0004c9f48 sp=0xc0004c9f18 pc=0xc3f15d
runtime.gcBgMarkWorker()
        D:/Program Files/Go/src/runtime/mgc.go:1235 +0x107 fp=0xc0004c9fe0 sp=0xc0004c9f48 pc=0xc1d807
runtime.goexit()
        D:/Program Files/Go/src/runtime/asm_amd64.s:1594 +0x1 fp=0xc0004c9fe8 sp=0xc0004c9fe0 pc=0xc67681
created by runtime.gcBgMarkStartWorkers
        D:/Program Files/Go/src/runtime/mgc.go:1159 +0x25

goroutine 19 [GC worker (idle)]:
runtime.gopark(0xd51e20, 0xc000086020, 0x18, 0x14, 0x0)
        D:/Program Files/Go/src/runtime/proc.go:363 +0xfd fp=0xc000063f48 sp=0xc000063f18 pc=0xc3f15d
runtime.gcBgMarkWorker()
        D:/Program Files/Go/src/runtime/mgc.go:1235 +0x107 fp=0xc000063fe0 sp=0xc000063f48 pc=0xc1d807
runtime.goexit()
        D:/Program Files/Go/src/runtime/asm_amd64.s:1594 +0x1 fp=0xc000063fe8 sp=0xc000063fe0 pc=0xc67681
created by runtime.gcBgMarkStartWorkers
        D:/Program Files/Go/src/runtime/mgc.go:1159 +0x25

goroutine 20 [GC worker (idle)]:
runtime.gopark(0xd51e20, 0xc00020d5c0, 0x18, 0x14, 0x0)
        D:/Program Files/Go/src/runtime/proc.go:363 +0xfd fp=0xc0004c5f48 sp=0xc0004c5f18 pc=0xc3f15d
runtime.gcBgMarkWorker()
        D:/Program Files/Go/src/runtime/mgc.go:1235 +0x107 fp=0xc0004c5fe0 sp=0xc0004c5f48 pc=0xc1d807
runtime.goexit()
        D:/Program Files/Go/src/runtime/asm_amd64.s:1594 +0x1 fp=0xc0004c5fe8 sp=0xc0004c5fe0 pc=0xc67681
created by runtime.gcBgMarkStartWorkers
        D:/Program Files/Go/src/runtime/mgc.go:1159 +0x25

goroutine 35 [GC worker (idle)]:
runtime.gopark(0xd51e20, 0xc00020d5e0, 0x18, 0x14, 0x0)
        D:/Program Files/Go/src/runtime/proc.go:363 +0xfd fp=0xc0004cbf48 sp=0xc0004cbf18 pc=0xc3f15d
runtime.gcBgMarkWorker()
        D:/Program Files/Go/src/runtime/mgc.go:1235 +0x107 fp=0xc0004cbfe0 sp=0xc0004cbf48 pc=0xc1d807
runtime.goexit()
        D:/Program Files/Go/src/runtime/asm_amd64.s:1594 +0x1 fp=0xc0004cbfe8 sp=0xc0004cbfe0 pc=0xc67681
created by runtime.gcBgMarkStartWorkers
        D:/Program Files/Go/src/runtime/mgc.go:1159 +0x25

goroutine 21 [GC worker (idle)]:
runtime.gopark(0xd51e20, 0xc00020d600, 0x18, 0x14, 0x0)
        D:/Program Files/Go/src/runtime/proc.go:363 +0xfd fp=0xc0004c7f48 sp=0xc0004c7f18 pc=0xc3f15d
runtime.gcBgMarkWorker()
        D:/Program Files/Go/src/runtime/mgc.go:1235 +0x107 fp=0xc0004c7fe0 sp=0xc0004c7f48 pc=0xc1d807
runtime.goexit()
        D:/Program Files/Go/src/runtime/asm_amd64.s:1594 +0x1 fp=0xc0004c7fe8 sp=0xc0004c7fe0 pc=0xc67681
created by runtime.gcBgMarkStartWorkers
        D:/Program Files/Go/src/runtime/mgc.go:1159 +0x25

goroutine 36 [GC worker (idle)]:
runtime.gopark(0xd51e20, 0xc00020d620, 0x18, 0x14, 0x0)
        D:/Program Files/Go/src/runtime/proc.go:363 +0xfd fp=0xc0004d3f48 sp=0xc0004d3f18 pc=0xc3f15d
runtime.gcBgMarkWorker()
        D:/Program Files/Go/src/runtime/mgc.go:1235 +0x107 fp=0xc0004d3fe0 sp=0xc0004d3f48 pc=0xc1d807
runtime.goexit()
        D:/Program Files/Go/src/runtime/asm_amd64.s:1594 +0x1 fp=0xc0004d3fe8 sp=0xc0004d3fe0 pc=0xc67681
created by runtime.gcBgMarkStartWorkers
        D:/Program Files/Go/src/runtime/mgc.go:1159 +0x25

goroutine 22 [GC worker (idle)]:
runtime.gopark(0xd51e20, 0xc00020d640, 0x18, 0x14, 0x0)
        D:/Program Files/Go/src/runtime/proc.go:363 +0xfd fp=0xc0004cff48 sp=0xc0004cff18 pc=0xc3f15d
runtime.gcBgMarkWorker()
        D:/Program Files/Go/src/runtime/mgc.go:1235 +0x107 fp=0xc0004cffe0 sp=0xc0004cff48 pc=0xc1d807
runtime.goexit()
        D:/Program Files/Go/src/runtime/asm_amd64.s:1594 +0x1 fp=0xc0004cffe8 sp=0xc0004cffe0 pc=0xc67681
created by runtime.gcBgMarkStartWorkers
        D:/Program Files/Go/src/runtime/mgc.go:1159 +0x25

goroutine 37 [GC worker (idle)]:
runtime.gopark(0xd51e20, 0xc00020d660, 0x18, 0x14, 0x0)
        D:/Program Files/Go/src/runtime/proc.go:363 +0xfd fp=0xc0004d5f48 sp=0xc0004d5f18 pc=0xc3f15d
runtime.gcBgMarkWorker()
        D:/Program Files/Go/src/runtime/mgc.go:1235 +0x107 fp=0xc0004d5fe0 sp=0xc0004d5f48 pc=0xc1d807
runtime.goexit()
        D:/Program Files/Go/src/runtime/asm_amd64.s:1594 +0x1 fp=0xc0004d5fe8 sp=0xc0004d5fe0 pc=0xc67681
created by runtime.gcBgMarkStartWorkers
        D:/Program Files/Go/src/runtime/mgc.go:1159 +0x25

goroutine 23 [GC worker (idle)]:
runtime.gopark(0xd51e20, 0xc00020d680, 0x18, 0x14, 0x0)
        D:/Program Files/Go/src/runtime/proc.go:363 +0xfd fp=0xc0004d1f48 sp=0xc0004d1f18 pc=0xc3f15d
runtime.gcBgMarkWorker()
        D:/Program Files/Go/src/runtime/mgc.go:1235 +0x107 fp=0xc0004d1fe0 sp=0xc0004d1f48 pc=0xc1d807
runtime.goexit()
        D:/Program Files/Go/src/runtime/asm_amd64.s:1594 +0x1 fp=0xc0004d1fe8 sp=0xc0004d1fe0 pc=0xc67681
created by runtime.gcBgMarkStartWorkers
        D:/Program Files/Go/src/runtime/mgc.go:1159 +0x25

goroutine 38 [GC worker (idle)]:
runtime.gopark(0xd51e20, 0xc00020d6a0, 0x18, 0x14, 0x0)
        D:/Program Files/Go/src/runtime/proc.go:363 +0xfd fp=0xc0004dbf48 sp=0xc0004dbf18 pc=0xc3f15d
runtime.gcBgMarkWorker()
        D:/Program Files/Go/src/runtime/mgc.go:1235 +0x107 fp=0xc0004dbfe0 sp=0xc0004dbf48 pc=0xc1d807
runtime.goexit()
        D:/Program Files/Go/src/runtime/asm_amd64.s:1594 +0x1 fp=0xc0004dbfe8 sp=0xc0004dbfe0 pc=0xc67681
created by runtime.gcBgMarkStartWorkers
        D:/Program Files/Go/src/runtime/mgc.go:1159 +0x25

goroutine 24 [GC worker (idle)]:
runtime.gopark(0xd51e20, 0xc00020d6c0, 0x18, 0x14, 0x0)
        D:/Program Files/Go/src/runtime/proc.go:363 +0xfd fp=0xc0004d7f48 sp=0xc0004d7f18 pc=0xc3f15d
runtime.gcBgMarkWorker()
        D:/Program Files/Go/src/runtime/mgc.go:1235 +0x107 fp=0xc0004d7fe0 sp=0xc0004d7f48 pc=0xc1d807
runtime.goexit()
        D:/Program Files/Go/src/runtime/asm_amd64.s:1594 +0x1 fp=0xc0004d7fe8 sp=0xc0004d7fe0 pc=0xc67681
created by runtime.gcBgMarkStartWorkers
        D:/Program Files/Go/src/runtime/mgc.go:1159 +0x25

goroutine 39 [GC worker (idle)]:
runtime.gopark(0xd51e20, 0xc00020d6e0, 0x18, 0x14, 0x0)
        D:/Program Files/Go/src/runtime/proc.go:363 +0xfd fp=0xc0004ddf48 sp=0xc0004ddf18 pc=0xc3f15d
runtime.gcBgMarkWorker()
        D:/Program Files/Go/src/runtime/mgc.go:1235 +0x107 fp=0xc0004ddfe0 sp=0xc0004ddf48 pc=0xc1d807
runtime.goexit()
        D:/Program Files/Go/src/runtime/asm_amd64.s:1594 +0x1 fp=0xc0004ddfe8 sp=0xc0004ddfe0 pc=0xc67681
created by runtime.gcBgMarkStartWorkers
        D:/Program Files/Go/src/runtime/mgc.go:1159 +0x25

goroutine 25 [GC worker (idle)]:
runtime.gopark(0xd51e20, 0xc00020d700, 0x18, 0x14, 0x0)
        D:/Program Files/Go/src/runtime/proc.go:363 +0xfd fp=0xc0004d9f48 sp=0xc0004d9f18 pc=0xc3f15d
runtime.gcBgMarkWorker()
        D:/Program Files/Go/src/runtime/mgc.go:1235 +0x107 fp=0xc0004d9fe0 sp=0xc0004d9f48 pc=0xc1d807
runtime.goexit()
        D:/Program Files/Go/src/runtime/asm_amd64.s:1594 +0x1 fp=0xc0004d9fe8 sp=0xc0004d9fe0 pc=0xc67681
created by runtime.gcBgMarkStartWorkers
        D:/Program Files/Go/src/runtime/mgc.go:1159 +0x25

goroutine 40 [GC worker (idle)]:
runtime.gopark(0xd51e20, 0xc00020d720, 0x18, 0x14, 0x0)
        D:/Program Files/Go/src/runtime/proc.go:363 +0xfd fp=0xc0004e3f48 sp=0xc0004e3f18 pc=0xc3f15d
runtime.gcBgMarkWorker()
        D:/Program Files/Go/src/runtime/mgc.go:1235 +0x107 fp=0xc0004e3fe0 sp=0xc0004e3f48 pc=0xc1d807
runtime.goexit()
        D:/Program Files/Go/src/runtime/asm_amd64.s:1594 +0x1 fp=0xc0004e3fe8 sp=0xc0004e3fe0 pc=0xc67681
created by runtime.gcBgMarkStartWorkers
        D:/Program Files/Go/src/runtime/mgc.go:1159 +0x25
cch123 commented 1 year ago

🤔 maybe we need to turn gc off? I dont know whether there is better way to avoid this