我当前的程序能够欺骗来自网络协议的数据包,这些数据包通常在libnet或libpcap中不可用。我的构建函数之一仅使用原始字节来准备数据包。为了实现更多功能,我定义了一个结构,该结构保留了所有原始数据缓冲区,因此可以快速访问它们。结构的定义是这样的:
//struct for a smb-ipc request
struct menu_smb_request{
uint8_t *nepgrotdial_lin[414]; //size 414
uint8_t *nepgrotdial_win[274]; //size 274
uint8_t *setupx_req_lin[346]; //size 346
uint8_t *setupx_req_lin2[1162]; //size 1162
uint8_t *conx_req_lin[210]; //size 210
uint8_t *trans2_req_lin[210]; //size 210
};
typedef struct menu_smb_request menu_smb_req;
该结构在自写的头文件中定义,以便于访问。 在另一个头文件中,我编写了构造函数,该函数使用此结构作为其数据源。首先,定义结构,然后将其传递给填充函数,以每次用相同的数据填充结构。然后,在构造函数中使用struc:
int smbcust(int mid, int order) {
menu_smb_req menutob;
int smblen=0;
menubuilder(menutob);
//the structure's contents are used based on the function input
填充函数void menubuilder()如下:
void menubuilder(struct smb_request_menu menutob) {
menutob.nepgrotdial_lin = rbytetoint(very_long_byte_string) //this
//basically
//and so on //translates
} //bytes of
//data into
//uint8_t
当我尝试使用smbcust()(构造函数)函数编译一个简单程序时,出现以下错误消息:
error: type of formal parameter 1 is incomplete
menubuilder(menutob);
error: parameter 1 (‘menutob’) has incomplete type
void menubuilder(struct smb_request_menu menutob) {
现在,我尝试使用“ struct menu_smb_req menutob”而不是“ menu_smb_req”来初始化我的struct menutob,我一次又一次地检查了type-o,我将该结构写入了该函数的相同头文件中,我编写的结构没有缓冲区大小(仅指针),并且检查了包含标头的顺序。我究竟做错了什么?还是有一种更有效的方式来存储我的数据?我知道一个事实,即每次调用该构造函数时,都必须填充该结构,但至少不必每次都编写该构造函数和填充器。 在此先感谢您,如果需要我的头文件的详细版本,请发表评论。