Bladeren bron

Feature #TASK_QT-18250 改bug

rock.wu 9 maanden geleden
bovenliggende
commit
23c6f199ab
1 gewijzigde bestanden met toevoegingen van 39 en 39 verwijderingen
  1. 39 39
      ebpftracer/tracer/inject/inject_linux_amd64.go

+ 39 - 39
ebpftracer/tracer/inject/inject_linux_amd64.go

@@ -729,28 +729,8 @@ func modifyNetSetTargetAddr(pid int, sendDebugAddr, sendReleaseAddr uintptr) err
 	return nil
 }
 
-func modifyReleaseFuncEnter(pid int, originEnterAddr, debugEnterAddr uintptr) error {
-	offset := debugEnterAddr - (originEnterAddr + 5)
-
-	// 读取原始数据
-	alignedAddr := originEnterAddr & ^(uintptr(unsafe.Sizeof(uintptr(0))) - 1)
-	originalData, err := readData(pid, alignedAddr)
-	if err != nil {
-		return err
-	}
-
-	bytes := (*[8]byte)(unsafe.Pointer(&originalData))
-	bytes[originEnterAddr%uintptr(unsafe.Sizeof(uintptr(0)))] = 0xe9
-	*(*uint32)(unsafe.Pointer(&bytes[(originEnterAddr%uintptr(unsafe.Sizeof(uintptr(0))))+1])) = uint32(offset)
-	err = writeData(pid, alignedAddr, originalData)
-	if err != nil {
-		return err
-	}
-	return nil
-}
-
 // func modifyReleaseFuncEnter(pid int, originEnterAddr, debugEnterAddr uintptr) error {
-// 	// offset := debugEnterAddr - (originEnterAddr + 5)
+// 	offset := debugEnterAddr - (originEnterAddr + 5)
 
 // 	// 读取原始数据
 // 	alignedAddr := originEnterAddr & ^(uintptr(unsafe.Sizeof(uintptr(0))) - 1)
@@ -759,27 +739,47 @@ func modifyReleaseFuncEnter(pid int, originEnterAddr, debugEnterAddr uintptr) er
 // 		return err
 // 	}
 
-// 	bytes := (*[12]byte)(unsafe.Pointer(&originalData))
-// 	bytes[originEnterAddr%uintptr(unsafe.Sizeof(uintptr(0)))] = 0x48
-// 	bytes[originEnterAddr%uintptr(unsafe.Sizeof(uintptr(1)))] = 0xb8
-// 	bytes[originEnterAddr%uintptr(unsafe.Sizeof(uintptr(2)))] = debugEnterAddr
-// 	bytes[originEnterAddr%uintptr(unsafe.Sizeof(uintptr(3)))] = debugEnterAddr >> 1
-// 	bytes[originEnterAddr%uintptr(unsafe.Sizeof(uintptr(4)))] = debugEnterAddr >> 2
-// 	bytes[originEnterAddr%uintptr(unsafe.Sizeof(uintptr(5)))] = debugEnterAddr >> 3
-// 	bytes[originEnterAddr%uintptr(unsafe.Sizeof(uintptr(6)))] = debugEnterAddr >> 4
-// 	bytes[originEnterAddr%uintptr(unsafe.Sizeof(uintptr(7)))] = debugEnterAddr >> 5
-// 	bytes[originEnterAddr%uintptr(unsafe.Sizeof(uintptr(8)))] = debugEnterAddr >> 6
-// 	bytes[originEnterAddr%uintptr(unsafe.Sizeof(uintptr(9)))] = debugEnterAddr >> 7
-// 	bytes[originEnterAddr%uintptr(unsafe.Sizeof(uintptr(10)))] = 0xff
-// 	bytes[originEnterAddr%uintptr(unsafe.Sizeof(uintptr(11)))] = 0xe0
-// 	// *(*uint32)(unsafe.Pointer(&bytes[(originEnterAddr%uintptr(unsafe.Sizeof(uintptr(0))))+1])) = uint32(offset)
-// 	// err = writeData(pid, alignedAddr, originalData)
-// 	// if err != nil {
-// 	// 	return err
-// 	// }
+// 	bytes := (*[8]byte)(unsafe.Pointer(&originalData))
+// 	bytes[originEnterAddr%uintptr(unsafe.Sizeof(uintptr(0)))] = 0xe9
+// 	*(*uint32)(unsafe.Pointer(&bytes[(originEnterAddr%uintptr(unsafe.Sizeof(uintptr(0))))+1])) = uint32(offset)
+// 	err = writeData(pid, alignedAddr, originalData)
+// 	if err != nil {
+// 		return err
+// 	}
 // 	return nil
 // }
 
+func modifyReleaseFuncEnter(pid int, originEnterAddr, debugEnterAddr uintptr) error {
+	// offset := debugEnterAddr - (originEnterAddr + 5)
+
+	// 读取原始数据
+	alignedAddr := originEnterAddr & ^(uintptr(unsafe.Sizeof(uintptr(0))) - 1)
+	originalData, err := readData(pid, alignedAddr)
+	if err != nil {
+		return err
+	}
+
+	bytes := (*[12]byte)(unsafe.Pointer(&originalData))
+	bytes[originEnterAddr%uintptr(unsafe.Sizeof(uintptr(0)))] = 0x48
+	bytes[originEnterAddr%uintptr(unsafe.Sizeof(uintptr(1)))] = 0xb8
+	bytes[originEnterAddr%uintptr(unsafe.Sizeof(uintptr(2)))] = debugEnterAddr
+	bytes[originEnterAddr%uintptr(unsafe.Sizeof(uintptr(3)))] = debugEnterAddr >> 1*8
+	bytes[originEnterAddr%uintptr(unsafe.Sizeof(uintptr(4)))] = debugEnterAddr >> 2*8
+	bytes[originEnterAddr%uintptr(unsafe.Sizeof(uintptr(5)))] = debugEnterAddr >> 3*8
+	bytes[originEnterAddr%uintptr(unsafe.Sizeof(uintptr(6)))] = debugEnterAddr >> 4*8
+	bytes[originEnterAddr%uintptr(unsafe.Sizeof(uintptr(7)))] = debugEnterAddr >> 5*8
+	bytes[originEnterAddr%uintptr(unsafe.Sizeof(uintptr(8)))] = debugEnterAddr >> 6*8
+	bytes[originEnterAddr%uintptr(unsafe.Sizeof(uintptr(9)))] = debugEnterAddr >> 7*8
+	bytes[originEnterAddr%uintptr(unsafe.Sizeof(uintptr(10)))] = 0xff
+	bytes[originEnterAddr%uintptr(unsafe.Sizeof(uintptr(11)))] = 0xe0
+	// *(*uint32)(unsafe.Pointer(&bytes[(originEnterAddr%uintptr(unsafe.Sizeof(uintptr(0))))+1])) = uint32(offset)
+	// err = writeData(pid, alignedAddr, originalData)
+	// if err != nil {
+	// 	return err
+	// }
+	return nil
+}
+
 func restoreOriginalInstructions(pid int, addr uintptr, instructions []byte) error {
 	alignedAddr := addr & ^(uintptr(unsafe.Sizeof(uintptr(0))) - 1)
 	originalData, err := readData(pid, alignedAddr)