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