我想从源文件(即用C语言编写的tshark.c
)运行Tshark剖析器,而不是使用终端和以下命令:
tshark -r my.pcap ...
所以我改变了qazxsw poi的主要功能:
tshark.c
至:
int
main(int argc, char *argv[])
{
return real_main(argc, argv);
}
为了从另一个函数调用main函数。之后我创建了一个由int
tshark_main(char arg0[],char arg1[],char arg2[],char arg3[],char arg4[],char arg5[],char arg6[],char arg7[])
{
int argc=8;
char* const argv[] = {arg0,arg1,arg2,arg3,arg4,arg5,arg6,arg7,NULL};
return (real_main(argc, argv));
}
和其他dependecies组成的lib,并按如下方式创建了所需的include文件:
tshark.c
在下一步中,我将提到的lib和#ifndef __TSHARK_H__
#define __TSHARK_H__
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
#ifdef _WIN32
int
wmain(int argc, wchar_t *wc_argv[]);
#else
int
tshark_main(char arg0[], char arg1[], char arg2[], char arg3[], char arg4[], char arg5[], char arg6[], char arg7[]);
#endif
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* tshark.h */
文件添加到我的C ++项目中,并调用tshark_main函数,如下所示:
*.h
但是,在char arg0[]="";
char arg1[]="-o";
char arg2[]="uat:user_dlts:\"User 0 (DLT=147)\",\"RRC.SI.SIB1\",\"0\",\"\",\"0\",\"\"";
char arg3[]="-r";
char arg4[]="my1.pcap";
char arg5[]="-V";
char arg6[]="";
char arg7[]="";
tshark_main(arg0,arg1,arg2,arg3,arg4,arg5,arg6,arg7);
char arg4[]="my2.pcap";
tshark_main(arg0,arg1,arg2,arg3,arg4,arg5,arg6,arg7);
第二次调用(最后一行)中,出现致命错误:
tshark_main(...)
我认为这个错误是因为源文件中定义的静态变量,当我第一次调用** (process:8445): ERROR **: 18:05:33.070: file type short name already exists
时,每件事情都没问题,当我在第二次或更多次调用它时,变量已经改变。由于Wireshark可以一遍又一遍地剖析数据包和文件,所以我需要一个初始化方法或者Wirehark用来重置静态变量的东西,但我不知道它在哪里。此外,在第二次调用tshark_main(...)
之前,可能还有第二种方法可以重置每个东西,我不知道该怎么做。每个人都可以告诉我解决方案吗?
什么是正确的调用?
正确的调用不是尝试两次运行main函数,因为它会尝试两次注册文件类型读取器,并给出相关的错误消息。
这是与tshark_main(...)
问题相同的问题,答案是一样的。