|
|
@@ -940,18 +940,26 @@ func modifyReleaseFuncEnter(pid int, originEnterAddr, debugEnterAddr uintptr) er
|
|
|
}
|
|
|
|
|
|
func restoreOriginalInstructions(pid int, addr uintptr, instructions []byte) error {
|
|
|
- alignedAddr := addr & ^(uintptr(unsafe.Sizeof(uintptr(0))) - 1)
|
|
|
- originalData, err := readData(pid, alignedAddr)
|
|
|
+ // alignedAddr := addr & ^(uintptr(unsafe.Sizeof(uintptr(0))) - 1)
|
|
|
+ // originalData, err := readData(pid, alignedAddr)
|
|
|
+ originalData, err := readDataBytes(pid, alignedAddr, len(instructions))
|
|
|
if err != nil {
|
|
|
return err
|
|
|
}
|
|
|
|
|
|
- bytes := (*[8]byte)(unsafe.Pointer(&originalData))
|
|
|
+ // bytes := (*[8]byte)(unsafe.Pointer(&originalData))
|
|
|
+ // for i := 0; i < len(instructions); i++ {
|
|
|
+ // bytes[addr%uintptr(unsafe.Sizeof(uintptr(0)))+uintptr(i)] = instructions[i]
|
|
|
+ // }
|
|
|
+
|
|
|
+ // offset := addr % uintptr(unsafe.Sizeof(uintptr(0)))
|
|
|
+
|
|
|
for i := 0; i < len(instructions); i++ {
|
|
|
- bytes[addr%uintptr(unsafe.Sizeof(uintptr(0)))+uintptr(i)] = instructions[i]
|
|
|
+ originalData[i] = instructions[i]
|
|
|
}
|
|
|
|
|
|
- err = writeData(pid, alignedAddr, originalData)
|
|
|
+ // err = writeData(pid, alignedAddr, originalData)
|
|
|
+ err = writeDataBytes(pid, alignedAddr, originalData)
|
|
|
if err != nil {
|
|
|
return err
|
|
|
}
|
|
|
@@ -1129,7 +1137,7 @@ func JvmInject(jvmInjector *JvmInjector) error {
|
|
|
if errReleaseFuncSymAfterChange != nil {
|
|
|
klog.WithError(errReleaseFuncSymAfterChange).Errorf("[inject] failed checkReleaseFuncSymAfterChange")
|
|
|
// 回滚
|
|
|
- if len(jvmInjector.ReleaseLibNetInfo.FuncSymbol.OriginCode) == 5 {
|
|
|
+ if len(jvmInjector.ReleaseLibNetInfo.FuncSymbol.OriginCode) == 12 {
|
|
|
err = restoreOriginalInstructions(pid, originFuncEnterAddr, jvmInjector.ReleaseLibNetInfo.FuncSymbol.OriginCode)
|
|
|
if err != nil {
|
|
|
klog.WithError(err).Errorf("[inject] failed restoreOriginalInstructions")
|