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