예제 #1
0
int Monitor::FromTextMap(STRINGMAP &strmap)
{
	svutil::word *pstr=NULL;
	pstr=strmap.find("MonitorID");
	if(pstr==NULL)
		return false;
	strcpy(m_MonitorID,(*pstr).getword());
	pstr=strmap.find("RunInProcess");
	if(pstr!=NULL)
	{
		m_isRunInProcess=strcmp((*pstr).getword(),"true")==0;
	}

	pstr=strmap.find("TaskType");
	if(pstr!=NULL)
	{
		m_TaskType=atoi((*pstr).getword());
	}
	pstr=strmap.find("LastState");
	if(pstr!=NULL)
	{
		m_LastState=atoi((*pstr).getword());
	}
	pstr=strmap.find("beginTDTime");
	time_t tm=0;
	if(pstr!=NULL)
	{
		tm=(time_t)_atoi64((*pstr).getword());
		m_beginTDTime=svutil::TTime(tm);


	}
	pstr=strmap.find("endTDTime");
	if(pstr!=NULL)
	{
		tm=(time_t)_atoi64((*pstr).getword());
		m_endTDTime=svutil::TTime(tm);
	}
	pstr=strmap.find("isTempDisable");
	if(pstr!=NULL)
	{
		m_isTempDisable=strcmp((*pstr).getword(),"true")==0;

	}
    
	pstr=strmap.find("isDisable");
	if(pstr!=NULL)
	{
		m_isDisable=strcmp((*pstr).getword(),"true")==0;

	}

	pstr=strmap.find("NextRunTime");
	if(pstr!=NULL)
	{
		tm=(time_t)_atoi64((*pstr).getword());
		m_NextRunTime=svutil::TTime(tm);
	}

	pstr=strmap.find("MonitorType");
	if(pstr!=NULL)
	{
		m_MonitorType=atoi((*pstr).getword());
	}
	
	pstr=strmap.find("Library");
	if(pstr==NULL)
	{
		return false;
	}

	m_Library=(*pstr).getword();

	
	pstr=strmap.find("Process");
	if(pstr==NULL)
	{
		return false;
	}

	m_Process=(*pstr).getword();

	pstr=strmap.find("EntityType");
	if(pstr==NULL)
	{
		return false;
	}

	strcpy(m_EntityType,(*pstr).getword());

	pstr=strmap.find("Frequency");
	if(pstr==NULL)
	{
		return false;
	}
	m_Frequency=atoi((*pstr).getword());

	pstr=strmap.find("ErrorFreq");
	if(pstr!=NULL)
	{
    	m_ErrorFreq=atoi((*pstr).getword());
	}

	pstr=strmap.find("CheckError");
	if(pstr!=NULL)
	{
    	m_CheckError=strcmp((*pstr).getword(),"true")==0;

	}

	pstr=strmap.find("MonitorClass");
	if(pstr==NULL)
	{
		return false;

	}
	m_MonitorClass=(*pstr).getword();

	pstr=strmap.find("TaskName");
	if(pstr!=NULL)
	{
		m_TaskName=(*pstr).getword();
	}

	if(m_StateConditions[0]!=NULL)
		delete m_StateConditions[0];

	StateCondition *psc=new StateCondition();
	if(psc==NULL)
		return false;
	if((pstr=strmap.find("StateCondition_Error_Type"))==NULL)
	{
		delete psc;
		return false;
	}
	psc->m_Type=(StateCondition::econ)atoi((*pstr).getword());

	if((pstr=strmap.find("StateCondition_Error_Expression"))==NULL)
	{
		delete psc;
		return false;
	}
	psc->m_Expression=(*pstr).getword();

	int n=0;

	if((pstr=strmap.find("StateCondition_Error_ItemSize"))==NULL)
	{
		delete psc;
		return false;
	}
	n=atoi((*pstr).getword());
	int i=0;
	StateConditionItem *psct=NULL;
	char bkey[250]={0};
	if(n>0)
	{
		for(i=0;i<n;i++)
		{
			psct=new StateConditionItem();
			sprintf(bkey,"StateCondition_Error_Item_%d_ItemID",i);
			if((pstr=strmap.find(bkey))==NULL)
			{
				delete psct;
				delete psc;
				return false;
			}
			psct->m_ItemID=atoi((*pstr).getword());


			sprintf(bkey,"StateCondition_Error_Item_%d_ParamName",i);
			if((pstr=strmap.find(bkey))==NULL)
			{
				delete psct;
				delete psc;
				return false;
			}
			psct->m_ParamName=(*pstr).getword();

			sprintf(bkey,"StateCondition_Error_Item_%d_Operator",i);
			if((pstr=strmap.find(bkey))==NULL)
			{
				delete psct;
				delete psc;
				return false;
			}
			strcpy(psct->m_Operator,(*pstr).getword());

			sprintf(bkey,"StateCondition_Error_Item_%d_ParamValue",i);
			if((pstr=strmap.find(bkey))==NULL)
			{
				delete psct;
				delete psc;
				return false;
			}
			psct->m_ParamValue=(*pstr).getword();
			psc->m_ConditionList.push_back(psct);
		}
	}

	m_StateConditions[0]=psc;

	if(m_StateConditions[1]!=NULL)
		delete m_StateConditions[1];

	psc=new StateCondition();
	if(psc==NULL)
		return false;
	if((pstr=strmap.find("StateCondition_Warning_Type"))==NULL)
	{
		delete psc;
		return false;
	}
	psc->m_Type=(StateCondition::econ)atoi((*pstr).getword());

	if((pstr=strmap.find("StateCondition_Warning_Expression"))==NULL)
	{
		delete psc;
		return false;
	}
	psc->m_Expression=(*pstr).getword();

	n=0;

	if((pstr=strmap.find("StateCondition_Warning_ItemSize"))==NULL)
	{
		delete psc;
		return false;
	}
	n=atoi((*pstr).getword());
	i=0;
    psct=NULL;
	memset(bkey,0,250);
	if(n>0)
	{
		for(i=0;i<n;i++)
		{
			psct=new StateConditionItem();
			sprintf(bkey,"StateCondition_Warning_Item_%d_ItemID",i);
			if((pstr=strmap.find(bkey))==NULL)
			{
				delete m_StateConditions[0];
				delete psct;
				delete psc;
				return false;
			}
			psct->m_ItemID=atoi((*pstr).getword());


			sprintf(bkey,"StateCondition_Warning_Item_%d_ParamName",i);
			if((pstr=strmap.find(bkey))==NULL)
			{
				delete m_StateConditions[0];
				delete psct;
				delete psc;
				return false;
			}
			psct->m_ParamName=(*pstr).getword();

			sprintf(bkey,"StateCondition_Warning_Item_%d_Operator",i);
			if((pstr=strmap.find(bkey))==NULL)
			{
				delete m_StateConditions[0];
				delete psct;
				delete psc;
				return false;
			}
			strcpy(psct->m_Operator,(*pstr).getword());

			sprintf(bkey,"StateCondition_Warning_Item_%d_ParamValue",i);
			if((pstr=strmap.find(bkey))==NULL)
			{
				delete m_StateConditions[0];
				delete psct;
				delete psc;
				return false;
			}
			psct->m_ParamValue=(*pstr).getword();
			psc->m_ConditionList.push_back(psct);
		}
	}

	m_StateConditions[1]=psc;

	if(m_StateConditions[2]!=NULL)
		delete m_StateConditions[2];

	psc=new StateCondition();
	if(psc==NULL)
		return false;
	if((pstr=strmap.find("StateCondition_Normal_Type"))==NULL)
	{
		delete psc;
		return false;
	}
	psc->m_Type=(StateCondition::econ)atoi((*pstr).getword());

	if((pstr=strmap.find("StateCondition_Normal_Expression"))==NULL)
	{
		delete psc;
		return false;
	}
	psc->m_Expression=(*pstr).getword();

	n=0;

	if((pstr=strmap.find("StateCondition_Normal_ItemSize"))==NULL)
	{
		delete psc;
		return false;
	}
	n=atoi((*pstr).getword());
	i=0;
    psct=NULL;
	memset(bkey,0,250);
	if(n>0)
	{
		for(i=0;i<n;i++)
		{
			psct=new StateConditionItem();
			sprintf(bkey,"StateCondition_Normal_Item_%d_ItemID",i);
			if((pstr=strmap.find(bkey))==NULL)
			{
				delete m_StateConditions[0];
				delete m_StateConditions[1];
				delete psct;
				delete psc;
				return false;
			}
			psct->m_ItemID=atoi((*pstr).getword());


			sprintf(bkey,"StateCondition_Normal_Item_%d_ParamName",i);
			if((pstr=strmap.find(bkey))==NULL)
			{
				delete m_StateConditions[0];
				delete m_StateConditions[1];
				delete psct;
				delete psc;
				return false;
			}
			psct->m_ParamName=(*pstr).getword();

			sprintf(bkey,"StateCondition_Normal_Item_%d_Operator",i);
			if((pstr=strmap.find(bkey))==NULL)
			{
				delete m_StateConditions[0];
				delete m_StateConditions[1];
				delete psct;
				delete psc;
				return false;
			}
			strcpy(psct->m_Operator,(*pstr).getword());

			sprintf(bkey,"StateCondition_Normal_Item_%d_ParamValue",i);
			if((pstr=strmap.find(bkey))==NULL)
			{
				delete m_StateConditions[0];
				delete m_StateConditions[1];
				delete psct;
				delete psc;
				return false;
			}
			psct->m_ParamValue=(*pstr).getword();
			psc->m_ConditionList.push_back(psct);
		}
	}

	m_StateConditions[2]=psc;


	if((pstr=strmap.find("ReturnList_Size"))==NULL)
	{
		delete m_StateConditions[0];
		delete m_StateConditions[1];
		delete m_StateConditions[2];
		return false;
	}

	n=atoi((*pstr).getword());
	if(n<=0)
	{
		delete m_StateConditions[0];
		delete m_StateConditions[1];
		delete m_StateConditions[2];
		return false;

	}

	ReturnData *prd=NULL;

	memset(bkey,0,250);

	for(i=0;i<n;i++)
	{
		prd=new ReturnData();
		sprintf(bkey,"ReturnItem_%d_Type",i);
		if((pstr=strmap.find(bkey))==NULL)
		{
			delete m_StateConditions[0];
			delete m_StateConditions[1];
			delete m_StateConditions[2];
			delete prd;
			return false;

		}
		strcpy(prd->m_Type,(*pstr).getword());

		sprintf(bkey,"ReturnItem_%d_Unit",i);
		if((pstr=strmap.find(bkey))==NULL)
		{
			delete m_StateConditions[0];
			delete m_StateConditions[1];
			delete m_StateConditions[2];
			delete prd;
			return false;

		}
		strcpy(prd->m_Unit,(*pstr).getword());


		sprintf(bkey,"ReturnItem_%d_Name",i);
		if((pstr=strmap.find(bkey))==NULL)
		{
			delete m_StateConditions[0];
			delete m_StateConditions[1];
			delete m_StateConditions[2];
			delete prd;
			return false;

		}
		prd->m_Name=(*pstr).getword();

		sprintf(bkey,"ReturnItem_%d_Label",i);
		if((pstr=strmap.find(bkey))==NULL)
		{
			delete m_StateConditions[0];
			delete m_StateConditions[1];
			delete m_StateConditions[2];
			delete prd;
			return false;

		}
		prd->m_Label=(*pstr).getword();

		m_ReturnList.push_back(prd);

	}

	if((pstr=strmap.find("ParamList_Size"))==NULL)
	{
		delete m_StateConditions[0];
		delete m_StateConditions[1];
		delete m_StateConditions[2];
		return false;
	}
	n=atoi((*pstr).getword());

	string str="";
	memset(bkey,0,250);
	for(i=0;i<n;i++)
	{
		sprintf(bkey,"ParamList_Item_%d",i);
		if((pstr=strmap.find(bkey))==NULL)
		{
			delete m_StateConditions[0];
			delete m_StateConditions[1];
			delete m_StateConditions[2];
			return false;
		}

		m_ParamList.push_back((*pstr).getword());
	}


	return true;
}
예제 #2
0
bool Groups::FromTextMap(STRINGMAP &strmap)
{
	svutil::word *pstr=NULL;
	
	if((pstr=strmap.find("seid"))!=NULL)
	{
		if(strlen(pstr->getword())>=10)
			return false;

		strcpy(m_SEID,pstr->getword());

	}

	int n=0;
	if((pstr=strmap.find("GroupListSize"))==NULL)
	{
		return false;
	}
	n=atoi(pstr->getword());
	int i=0;
	char bkey[256]={0};
	GroupsItem *pitem=NULL;
	for(i=0;i<n;i++)
	{
		pitem=new GroupsItem();
		if(pitem==NULL)
			return false;

		sprintf(bkey,"Groups_Item_GroupID_%d",i);
		if((pstr=strmap.find(bkey))==NULL)
		{
			delete pitem;
			return false;
		}
		pitem->SetGroupID(pstr->getword());

		sprintf(bkey,"Groups_Item_ParentID_%d",i);
		if((pstr=strmap.find(bkey))==NULL)
		{
			delete pitem;
			return false;
		}
		pitem->SetParentID(pstr->getword());

		sprintf(bkey,"Groups_Item_DependSon_%d",i);
		if((pstr=strmap.find(bkey))==NULL)
		{
			delete pitem;
			return false;
		}

		pitem->SetDepedSon(pstr->getword());

		sprintf(bkey,"Groups_Item_DependsCondition_%d",i);
		if((pstr=strmap.find(bkey))==NULL)
		{
			delete pitem;
			return false;
		}
		pitem->SetDependsCondition(atoi(pstr->getword()));

		m_GroupsList.push_back(pitem);

	}

	if((pstr=strmap.find("EntityListSize"))==NULL)
	{
		return false;
	}
	n=atoi(pstr->getword());
	memset(bkey,0,256);
    Entity *pentity=NULL;

	for(i=0;i<n;i++)
	{
		pentity= new Entity();

		sprintf(bkey,"Entitys_Item_MonitorTypeCount_%d",i);

		if((pstr=strmap.find(bkey))==NULL)
		{
			delete pentity;
			return false;
		}

		pentity->SetMonitorTypeCount(atoi(pstr->getword()));

		sprintf(bkey,"Entitys_Item_EntityID_%d",i);

		if((pstr=strmap.find(bkey))==NULL)
		{
			delete pentity;
			return false;
		}
		pentity->SetEntityID(pstr->getword());

		sprintf(bkey,"Entitys_Item_SystemType_%d",i);

		if((pstr=strmap.find(bkey))==NULL)
		{
			delete pentity;
			return false;
		}
		pentity->SetSystemType(pstr->getword());

		sprintf(bkey,"Entitys_Item_IPAdress_%d",i);

		if((pstr=strmap.find(bkey))==NULL)
		{
			delete pentity;
			return false;
		}
		pentity->SetIPAdress(pstr->getword());


		sprintf(bkey,"Entitys_Item_Depend_%d",i);

		if((pstr=strmap.find(bkey))==NULL)
		{
			delete pentity;
			return false;
		}
		pentity->SetDepend(pstr->getword());

		sprintf(bkey,"Entitys_Item_DependsCondition_%d",i);

		if((pstr=strmap.find(bkey))==NULL)
		{
			delete pentity;
			return false;
		}

		pentity->SetDependsCondition(atoi(pstr->getword()));

		m_EntityList.push_back(pentity);



	}

	return true;
}
예제 #3
0
파일: Core.cpp 프로젝트: nihilus/WhatAPIs
// Process function
void processFunction(func_t *f)
{
	// Skip tiny functions
	if(f->size() >= 5)
	{
		// Don't add comments to API wrappers
        char name[MAXNAMELEN]; name[0] = name[SIZESTR(name)] = 0;
		if(!apiMap.empty())
		{
			if(get_short_name(BADADDR, f->startEA, name, SIZESTR(name)))
			{
				if(apiMap.find(name) != apiMap.end())
					return;
			}
		}

		// Iterate function body
        STRLIST importLstTmp;
        LPSTR commentPtr = NULL;
		char comment[MAXSTR]; comment[0] = comment[SIZESTR(comment)] = 0;
        UINT commentLen = 0;

        #define ADDNM(_str) { UINT l = strlen(_str); memcpy(comment + commentLen, _str, l); commentLen += l; _ASSERT(commentLen < MAXSTR); }

        func_item_iterator_t it(f);
		do
		{
            ea_t currentEA = it.current();

			// Will be a "to" xref
			xrefblk_t xb;
			if(xb.first_from(currentEA, XREF_FAR))
			{
				BOOL isImpFunc = FALSE;
                name[0] = 0;

				// If in import segment
				// ============================================================================================
				ea_t refAdrEa = xb.to;
				if(isInImportSeg(refAdrEa))
				{
					flags_t flags = get_flags_novalue(refAdrEa);
					if(has_name(flags) && hasRef(flags) && isDwrd(flags))
					{
						if(get_short_name(BADADDR, refAdrEa, name, SIZESTR(name)))
						{
							// Nix the imp prefix if there is one
							if(strncmp(name, "__imp_", SIZESTR("__imp_")) == 0)
								memmove(name, name + SIZESTR("__imp_"), ((strlen(name) - SIZESTR("__imp_")) + 1));

							isImpFunc = TRUE;
						}
						else
							msg(EAFORMAT" *** Failed to get import name! ***\n", refAdrEa);
					}
				}
				// Else, check for import wrapper
				// ============================================================================================
				else
				if(!apiMap.empty())
				{
					// Reference is a function entry?
					flags_t flags = get_flags_novalue(refAdrEa);
					if(isCode(flags) && has_name(flags) && hasRef(flags))
					{
						if(func_t *refFuncPtr = get_func(refAdrEa))
						{
							if(refFuncPtr->startEA == refAdrEa)
							{
								if(get_short_name(BADADDR, refAdrEa, name, SIZESTR(name)))
								{
									// Skip common unwanted types "sub_.." or "unknown_libname_.."
									if(
										// not "sub_..
										/*"sub_"*/ (*((PUINT) name) != 0x5F627573) &&

										// not "unknown_libname_..
										/*"unknown_"*/ ((*((PUINT64) name) != 0x5F6E776F6E6B6E75) && (*((PUINT64) (name + 8)) != /*"libname_"*/ 0x5F656D616E62696C)) &&

										// not nullsub_..
										/*"nullsub_"*/ (*((PUINT64) name) != 0x5F6275736C6C756E)
										)
									{
										// Nix the import prefixes
										if(strncmp(name, "__imp_", SIZESTR("__imp_")) == 0)
											memmove(name, name + SIZESTR("__imp_"), ((strlen(name) - SIZESTR("__imp_")) + 1));

										// Assumed to be a wrapped import if it's in the list
										isImpFunc = (apiMap.find(name) != apiMap.end());
									}
								}
								else
									msg(EAFORMAT" *** Failed to get function name! ***\n", refAdrEa);
							}
						}
					}
				}

				// Found import function to add list
				if(isImpFunc)
				{
					// Skip those large common STL names
					if(strncmp(name, "std::", SIZESTR("std::")) != 0)
					{
						// Skip if already seen in this function
						BOOL known = FALSE;
						for(STRLIST::iterator ji = importLstTmp.begin(); ji != importLstTmp.end(); ji++)
						{
							if(strcmp(ji->c_str(), name) == 0)
							{
								known = TRUE;
								break;
							}
						}

						// Not seen
						if(!known)
						{
							importLstTmp.push_front(name);

                            // Append to existing comments w/line feed
                            if(!commentLen && !commentPtr)
                            {
                                commentPtr = get_func_cmt(f, true);
                                if(!commentPtr)
                                    get_func_cmt(f, false);

                                if(commentPtr)
                                {
                                    commentLen = strlen(commentPtr);
                                    // Bail out not enough comment space
                                    if(commentLen >= (MAXSTR - 20))
                                    {
                                        qfree(commentPtr);
                                        return;
                                    }

                                    memcpy(comment, commentPtr, commentLen);
                                    ADDNM("\n"MYTAG);
                                }
                            }

                            if(!commentLen)
                                ADDNM(MYTAG);

							// Append a "..." (continuation) and bail out if name hits max comment length
							if((commentLen + strlen(name) + SIZESTR("()") + sizeof(", ")) >= (MAXSTR - sizeof("...")))
							{
                                ADDNM(" ...");
								break;
							}
							// Append this function name
							else
							{
								if(importLstTmp.size() != 1)
                                    ADDNM(", ");
                                ADDNM(name); ADDNM("()");
							}
						}
					}
					else
					{
						//msg("%s\n", szName);
					}
				}
			}

		}while(it.next_addr());

		if(!importLstTmp.empty() && commentLen)
		{
            // Add comment
            comment[commentLen] = 0;
			set_func_cmt(f, comment, true);
			commentCount++;
		}

        if(commentPtr)
            qfree(commentPtr);
	}
}