Răsfoiți Sursa

Fixed #TASK_QT-9810 commit inject_asm_code for arm

root 1 an în urmă
părinte
comite
d146324b02

+ 2 - 2
ebpftracer/ebpf/utrace/java/net/client.probe.bpf.c

@@ -402,8 +402,8 @@ SEC("uprobe/javaaot_asmnop")
 int javaaot_asmnop(struct pt_regs *ctx) {
 	bpf_printk("enter the ret javaaot_asmnop\n");
 	unsigned long jhttpdata_ptr;
-	jhttpdata_ptr = (ctx)->rsi;
-	unsigned long len_from_rbp_ptr = (ctx)->rsp-0x8;
+	jhttpdata_ptr = (ctx)->regs[2];
+	unsigned long len_from_rbp_ptr = (ctx)->regs[16]-0x8;
 	bpf_printk("[len_from_rbp_ptr] <0x%lx>", len_from_rbp_ptr);
 
 	// 捕获第六个参数 data_count

+ 1 - 0
ebpftracer/tracer/aotinject/inject_asm_code_arm64.go

@@ -38,6 +38,7 @@ type ProcessMapsInfo struct {
 }
 type ProcessFunctionInfo struct {
 	Name        string
+	Offset      uint64
 	Start, Size uint64
 }
 

+ 7 - 3
ebpftracer/tracer/inject/inject_linux_arm64.go

@@ -14,11 +14,13 @@ import (
 	"bytes"
 	"debug/elf"
 	"fmt"
-	"golang.org/x/arch/arm64/arm64asm"
-	"golang.org/x/arch/x86/x86asm"
 	"os"
 	"strings"
 	"syscall"
+
+	"golang.org/x/arch/arm64/arm64asm"
+	"golang.org/x/arch/x86/x86asm"
+
 	//"time"
 	"unsafe"
 )
@@ -88,6 +90,7 @@ type JvmInjector struct {
 		NetSendFuncCheck bool
 	}
 	Uprobe UprobeData
+	Rootfs string
 }
 
 func (j *JvmInjector) checkEnc(code []byte, start, len uint64, enc uint32) error {
@@ -589,8 +592,9 @@ func printCodeData(data LibNetInfo) {
 
 func (j *JvmInjector) jvmInjectLib() int {
 	dll := C.CString(j.DebugLibNetInfo.LibPath) // 替换为实际的DLL路径
+	rootfs := C.CString("")                     // 替换为实际的DLL路径
 	defer C.free(unsafe.Pointer(dll))           // 确保在使用完字符串后释放内存
-	result := C.cw_inject_library(C.int(j.Pid), C.int(1), dll)
+	result := C.cw_inject_library(C.int(j.Pid), C.int(1), dll, rootfs)
 	fmt.Printf("Result: %d\n", result)
 	return int(result)
 }