|
@@ -72,15 +72,17 @@ int uprobe_Java_java_net_SocketOutputStream_socketWrite0(struct pt_regs *ctx) {
|
|
|
|
|
|
|
|
int key = 0;
|
|
int key = 0;
|
|
|
struct sock_t *map_data = bpf_map_lookup_elem(&socket_heap, &key);
|
|
struct sock_t *map_data = bpf_map_lookup_elem(&socket_heap, &key);
|
|
|
- if (!map_data) {
|
|
|
|
|
|
|
+ if (map_data == NULL) {
|
|
|
cw_bpf_debug("[java client] Failed to lookup socket_heap\n");
|
|
cw_bpf_debug("[java client] Failed to lookup socket_heap\n");
|
|
|
return 1;
|
|
return 1;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ __builtin_memset(map_data->header_stream, 0, sizeof(map_data->header_stream));
|
|
|
|
|
+ __builtin_memset(map_data->host, 0, sizeof(map_data->host));
|
|
|
// 获取jbytearray
|
|
// 获取jbytearray
|
|
|
__u32 tgid = (__u32) (bpf_get_current_pid_tgid() >> 32);
|
|
__u32 tgid = (__u32) (bpf_get_current_pid_tgid() >> 32);
|
|
|
- map_data->proc_info = bpf_map_lookup_elem(&proc_info_map, &tgid);
|
|
|
|
|
- if (!map_data->proc_info) {
|
|
|
|
|
|
|
+ struct ebpf_proc_info *proc_info = bpf_map_lookup_elem(&proc_info_map, &tgid);
|
|
|
|
|
+ if (!proc_info) {
|
|
|
return 0;
|
|
return 0;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -88,7 +90,7 @@ int uprobe_Java_java_net_SocketOutputStream_socketWrite0(struct pt_regs *ctx) {
|
|
|
void *jbytearray_ptr = NULL;
|
|
void *jbytearray_ptr = NULL;
|
|
|
|
|
|
|
|
// 1003 是 javaAOT 的
|
|
// 1003 是 javaAOT 的
|
|
|
- if (map_data->proc_info->code_type == CodeTypeJavaAot) {
|
|
|
|
|
|
|
+ if (proc_info->code_type == CodeTypeJavaAot) {
|
|
|
jbytearray_ptr = (void *) (PT_REGS_SP(ctx)) + 0x8 + 0x10060 + 0x20;
|
|
jbytearray_ptr = (void *) (PT_REGS_SP(ctx)) + 0x8 + 0x10060 + 0x20;
|
|
|
} else {
|
|
} else {
|
|
|
jbytearray_ptr = (void *) PT_REGS_PARM4(ctx);
|
|
jbytearray_ptr = (void *) PT_REGS_PARM4(ctx);
|
|
@@ -307,24 +309,21 @@ PROGUP(java_build_header)(struct pt_regs *ctx) {
|
|
|
return 1;
|
|
return 1;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- if (!map_data->proc_info)
|
|
|
|
|
- return 1;
|
|
|
|
|
-
|
|
|
|
|
- struct ebpf_proc_info proc_info;
|
|
|
|
|
- bpf_probe_read(&proc_info, sizeof(struct ebpf_proc_info), map_data->proc_info);
|
|
|
|
|
|
|
+ __u32 tgid = (__u32) (bpf_get_current_pid_tgid() >> 32);
|
|
|
|
|
+ struct ebpf_proc_info *proc_info = bpf_map_lookup_elem(&proc_info_map, &tgid);
|
|
|
|
|
+ if (!proc_info) {
|
|
|
|
|
+ return 0;
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- char host[30];
|
|
|
|
|
- bpf_probe_read(&host, sizeof host, map_data->host);
|
|
|
|
|
- host[29] = '\0';
|
|
|
|
|
for (u32 i = 0; i < 30; i++) {
|
|
for (u32 i = 0; i < 30; i++) {
|
|
|
- if (host[i] == '\r') {
|
|
|
|
|
- host[i] = '\0';
|
|
|
|
|
|
|
+ if (map_data->host[i] == '\r') {
|
|
|
|
|
+ map_data->host[i] = '\0';
|
|
|
break;
|
|
break;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
cw_bpf_debug("[java client] http host %s\n", map_data->host);
|
|
cw_bpf_debug("[java client] http host %s\n", map_data->host);
|
|
|
|
|
|
|
|
- struct apm_span_context *cw_sc = build_sc(proc_info, host);
|
|
|
|
|
|
|
+ struct apm_span_context *cw_sc = build_sc(*proc_info, map_data->host);
|
|
|
if (cw_sc == NULL) {
|
|
if (cw_sc == NULL) {
|
|
|
return 0;
|
|
return 0;
|
|
|
}
|
|
}
|
|
@@ -438,8 +437,8 @@ int javaaot_asmnop(struct pt_regs *ctx) {
|
|
|
|
|
|
|
|
// 获取jbytearray
|
|
// 获取jbytearray
|
|
|
__u32 tgid = (__u32) (bpf_get_current_pid_tgid() >> 32);
|
|
__u32 tgid = (__u32) (bpf_get_current_pid_tgid() >> 32);
|
|
|
- map_data->proc_info = bpf_map_lookup_elem(&proc_info_map, &tgid);
|
|
|
|
|
- if (!map_data->proc_info) {
|
|
|
|
|
|
|
+ struct ebpf_proc_info *proc_info = bpf_map_lookup_elem(&proc_info_map, &tgid);
|
|
|
|
|
+ if (!proc_info) {
|
|
|
return 0;
|
|
return 0;
|
|
|
}
|
|
}
|
|
|
|
|
|