88#define MAX_VMA_NUM 10
99
1010char module_path[PATH_MAX];
11+ char fix_module_path[PATH_MAX];
1112static uint64_t module_base = 0 ;
1213unsigned long start_addrs[MAX_VMA_NUM];
1314unsigned long end_addrs[MAX_VMA_NUM];
@@ -62,7 +63,12 @@ bool init_vma(){
6263
6364
6465__attribute__ ((noinline)) void test_kernel_trace(){
65- LOGD (" test_kernel_trace fun calling" );
66+ int a=0 ,b=0 ;
67+ a = b+8 ;
68+ b = a+5 ;
69+ char test[200 ];
70+ snprintf (test,200 ," %d %d" ,a,b);
71+ LOGD (" test_kernel_trace fun calling,%s" ,test);
6672}
6773
6874void test (){
@@ -79,12 +85,22 @@ JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) {
7985 }
8086 LOGD (" success parse maps files" );
8187
88+ strcpy (fix_module_path,module_path);// 这里设置为原模块路径就是跟没设置一样,只是用于演示api的使用
89+
8290 // 为KernelTrace提供必要的初始信息
83- set_target_uid (getuid ());
84- set_module_base (module_base);
85- set_target_file (module_path);
91+ trace_init_info *base_info = (trace_init_info*)malloc (sizeof (trace_init_info));
92+ base_info->module_base = module_base;
93+ base_info->uid = getuid ();
94+
95+ base_info->tfile_name = (char *)malloc (strlen (module_path) + 1 );
96+ strcpy (base_info->tfile_name ,module_path);
97+
98+ base_info->fix_file_name = (char *)malloc (strlen (fix_module_path) + 1 );
99+ strcpy (base_info->fix_file_name ,fix_module_path);
86100
87- LOGD (" module_base:%llx,module_path:%s" ,module_base,module_path);
101+ int sret = trace_init (base_info);
102+
103+ LOGD (" module_base:%llx,module_path:%s,fix_module_path:%s,sret:%d" ,module_base,module_path,fix_module_path,sret);
88104
89105 // hook前进行的一些准备
90106 unsigned long test_fun_addr = (unsigned long )test_kernel_trace;
@@ -96,14 +112,12 @@ JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) {
96112 }
97113 }
98114
99- char oins[4 ];
100- memcpy (oins,(void *)test_kernel_trace,4 );// 获取被hook函数的第一条汇编指令
101- LOGD (" test_fun_offset:%lx,uprobe_offset:%lx" ,test_fun_offset,uprobe_offset);
102- // 如果so的相应汇编指令不是在so加载后才动态解密可直接设置fix_insn参数为NULL
103- // set_fun_info(uprobe_offset,test_fun_offset,"test_kernel_trace",NULL);
104-
105- // 不过最好还是直接读取汇编指令并传入
106- set_fun_info (uprobe_offset,test_fun_offset," test_kernel_trace" ,oins);// 发送hook请求
115+ uprobe_item_info *uprobe_item = (uprobe_item_info*)malloc (sizeof (uprobe_item_info));
116+ uprobe_item->uprobe_offset = uprobe_offset;
117+ uprobe_item->fun_offset = test_fun_offset;
118+ uprobe_item->fun_name = (char *)malloc (strlen (" test_kernel_trace" ) + 1 );
119+ strcpy (uprobe_item->fun_name ," test_kernel_trace" );
120+ set_fun_info (uprobe_item);// 发送hook请求
107121
108122 // 启动测试线程开始测试
109123 std::thread test_thread (test);
0 commit comments