Browse Source

Feature #TASK_QT-18250 解决restore指令部分代码bug。

rock.wu 9 months ago
parent
commit
05da22cc59
1 changed files with 14 additions and 6 deletions
  1. 14 6
      ebpftracer/tracer/inject/inject_linux_amd64.go

+ 14 - 6
ebpftracer/tracer/inject/inject_linux_amd64.go

@@ -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")