فهرست منبع

Fixed #TASK_QT-9810 解决jvm 层的端到端hook点崩溃问题

rock 1 سال پیش
والد
کامیت
52129eba31
1فایلهای تغییر یافته به همراه11 افزوده شده و 9 حذف شده
  1. 11 9
      ebpftracer/ebpf/utrace/java/net/client.probe.bpf.c

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

@@ -50,7 +50,6 @@ static __inline struct apm_span_context *build_sc(struct ebpf_proc_info proc_inf
 
 SEC("uprobe/Java_java_net_SocketOutputStream_socketWrite0")
 int uprobe_Java_java_net_SocketOutputStream_socketWrite0(struct pt_regs *ctx) {
-	return 0;
 	// 捕获第六个参数 data_count
 	int data_count = PT_REGS_PARM6(ctx);
 	if (data_count < MIN_LEN) {
@@ -86,7 +85,7 @@ int uprobe_Java_java_net_SocketOutputStream_socketWrite0(struct pt_regs *ctx) {
 		return 0;
 	}
 
-	cw_bpf_debug("[java client] code_type:%d\n", map_data->proc_info->code_type);
+	// cw_bpf_debug("[java client] code_type:%d\n", map_data->proc_info->code_type);
 	void *jbytearray_ptr = NULL;
 
 	// 1003 是 javaAOT 的
@@ -96,13 +95,16 @@ int uprobe_Java_java_net_SocketOutputStream_socketWrite0(struct pt_regs *ctx) {
 		jbytearray_ptr = (void *) PT_REGS_PARM4(ctx);
 	}
 
-	cw_bpf_debug("[java client] jbytechar_ptr_from_rcx <0x%lx>", jbytearray_ptr);
-
+	if(!jbytearray_ptr){
+		return 0;
+	}
+	// cw_bpf_debug("[java client] jbytechar_ptr_from_rcx <0x%lx>", jbytearray_ptr);
+	
 	unsigned long jbytechar_head_ptr;
 	// 读取一级指针
 	long ret = bpf_probe_read_user(&jbytechar_head_ptr, sizeof(unsigned long), (void *) jbytearray_ptr);
-	cw_bpf_debug("[java client] [jbytechar_head_ptr] <0x%lx>", jbytechar_head_ptr);
-
+	// cw_bpf_debug("[java client] [jbytechar_head_ptr] <0x%lx>", jbytechar_head_ptr);
+	
 	if (ret != 0) {
 		cw_bpf_debug("[java client] Failed to read first level ptr: %d\n", ret);
 		return 0;
@@ -117,7 +119,7 @@ int uprobe_Java_java_net_SocketOutputStream_socketWrite0(struct pt_regs *ctx) {
 
 	// 读取用户空间数据到 map_data->payload
 	void *jbytechar_ptr = (void *) (jbytechar_head_ptr + 16);
-	cw_bpf_debug("[java client] [jbytechar_ptr] <0x%lx>", jbytechar_ptr);
+	// cw_bpf_debug("[java client] [jbytechar_ptr] <0x%lx>", jbytechar_ptr);
 	long err = bpf_probe_read_user_str(map_data->payload, sizeof(map_data->payload), jbytechar_ptr);
 
 	if (err < 0) {
@@ -158,13 +160,13 @@ int uprobe_Java_java_net_SocketOutputStream_socketWrite0(struct pt_regs *ctx) {
 			return 1;
 		}
 	}
-	cw_bpf_debug("[java client] header_offset_idx:%d\n", map_data->header_offset_idx);
+	// cw_bpf_debug("[java client] header_offset_idx:%d\n", map_data->header_offset_idx);
 
 	// tail payload保存
 	u32 tail_key = 1;
 	char *tail_payload = bpf_map_lookup_elem(&large_array_map, &tail_key);
 	if (!tail_payload) {
-		cw_bpf_debug("[java client ]header ->end %s\n", tail_payload);
+		// cw_bpf_debug("[java client ]header ->end %s\n", tail_payload);
 		return 1;
 	}
 	__builtin_memset(tail_payload, 0, sizeof(char *));