第二次运行tshark.c源文件后出现致命错误

问题描述 投票:0回答:1

我想从源文件(即用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(...)之前,可能还有第二种方法可以重置每个东西,我不知道该怎么做。每个人都可以告诉我解决方案吗?

c++ c wireshark tshark wireshark-dissector
1个回答
1
投票

什么是正确的调用?

正确的调用不是尝试两次运行main函数,因为它会尝试两次注册文件类型读取器,并给出相关的错误消息。

这是与tshark_main(...)问题相同的问题,答案是一样的。

© www.soinside.com 2019 - 2024. All rights reserved.