Iterator cleanup.

This commit is contained in:
dude719
2018-07-10 13:39:42 -03:00
parent 65a84ce537
commit c34ce46871
2 changed files with 38 additions and 31 deletions

View File

@@ -90,7 +90,7 @@ bool AddOneInstructionToSig( qstring& strSig, ea_t& dwCurentAddress )
return true; return true;
} }
bool AutoGenerate( qSigVector& refvecSig, ea_t dwAddress ) bool AutoGenerate( ea_t dwAddress, qSigVector& refvecSig )
{ {
qSigVector vecSig; // remove previous entries qSigVector vecSig; // remove previous entries
@@ -212,9 +212,14 @@ bool AutoGenerate( qSigVector& refvecSig, ea_t dwAddress )
return false; return false;
} }
for (qSigVector::iterator i = vecSig.begin( ); i != vecSig.end( ); i++) for (size_t i = 0; i < vecSig.size( ); i++)
{ {
if (AddOneInstructionToSig( (*i).strSig, (*i).dwCurrentAddress ) == false) if (AddOneInstructionToSig( vecSig[i].strSig, vecSig[i].dwCurrentAddress ))
{
vecSig[i].iOpCount++;
vecSig[i].iHitCount = (vecSig[i].strSig.length( ) > 5) ? GetOccurenceCount( vecSig[i].strSig, true ) : 0;
}
else
{ {
if (Settings.iLogLevel >= 2) if (Settings.iLogLevel >= 2)
{ {
@@ -227,31 +232,32 @@ bool AutoGenerate( qSigVector& refvecSig, ea_t dwAddress )
msg( "not enough candidates to proceed. aborting...\n" ); msg( "not enough candidates to proceed. aborting...\n" );
return false; return false;
} }
vecSig.erase( i-- );
continue; vecSig.erase( vecSig.begin( ) + i );
} i--;
(*i).iOpCount++; }
(*i).iHitCount = ((*i).strSig.length( ) > 5) ? GetOccurenceCount( (*i).strSig, true ) : 0;
} }
} while (HasOneHitSig( vecSig ) == false); } while (HasOneHitSig( vecSig ) == false);
refvecSig.clear( ); refvecSig.clear( );
for (qSigVector::iterator i = vecSig.begin( ); i != vecSig.end( ); i++) for (AutoSig_t& iterSig : vecSig)
{ {
if (iterSig.iHitCount == 1)
if ((*i).iHitCount == 1)
{ {
if (Settings.iLogLevel >= 3) if (Settings.iLogLevel >= 3)
{ {
msg( "[%x] Signature %s is viable candidate for final evaluation.\n", (*i).dwStartAddress, (*i).strSig.c_str( ) ); msg( "[%x] Signature %s is a viable candidate for final evaluation.\n", iterSig.dwStartAddress, iterSig.strSig.c_str( ) );
} }
refvecSig.push_back( (*i) );
refvecSig.push_back( iterSig );
} }
} }
hide_wait_box( ); hide_wait_box( );
vecSig.clear( ); vecSig.clear( );
return (refvecSig.size( ) != 0); return (refvecSig.size( ) != 0);
} }
@@ -350,7 +356,7 @@ unsigned int GetCharCount( const char* pszString, char chSign, bool bCaseInsenst
void GenerateSig( SigType eType ) void GenerateSig( SigType eType )
{ {
qSigVector vecSig; qSigVector vecSig;
qSigVector::iterator SigIterator; qSigVector::iterator iterSig;
size_t uiLength = 9999; size_t uiLength = 9999;
ea_t dwAddress = get_screen_ea( ); ea_t dwAddress = get_screen_ea( );
@@ -364,37 +370,37 @@ void GenerateSig( SigType eType )
return; return;
} }
if (AutoGenerate( vecSig, dwAddress )) if (AutoGenerate( dwAddress, vecSig ))
{ {
for (qSigVector::iterator i = vecSig.begin( ); i != vecSig.end( ); i++) for (AutoSig_t& i : vecSig)
{ {
if (Settings.iSelectionType == 0) if (Settings.iSelectionType == 0)
{ {
size_t nLength = (*i).strSig.length( ); size_t nLength = i.strSig.length( );
if (uiLength > nLength || ((*i).eType == PT_DIRECT && uiLength == nLength)) if (uiLength > nLength || (i.eType == PT_DIRECT && uiLength == nLength))
{ {
uiLength = nLength; uiLength = nLength;
SigIterator = i; iterSig = &i;
} }
} }
else else
{ {
if (Settings.iSelectionType == 1) if (Settings.iSelectionType == 1)
{ {
if (uiLength > (*i).iOpCount || ((*i).eType == PT_DIRECT && uiLength == (*i).iOpCount)) if (uiLength > i.iOpCount || (i.eType == PT_DIRECT && uiLength == i.iOpCount))
{ {
uiLength = (*i).iOpCount; uiLength = i.iOpCount;
SigIterator = i; iterSig = &i;
} }
} }
else else
{ {
unsigned int nLength = GetCharCount( (*i).strSig.c_str( ), '?' ); unsigned int nLength = GetCharCount( i.strSig.c_str( ), '?' );
if (uiLength > nLength || ((*i).eType == PT_DIRECT && uiLength == nLength)) if (uiLength > nLength || (i.eType == PT_DIRECT && uiLength == nLength))
{ {
uiLength = nLength; uiLength = nLength;
SigIterator = i; iterSig = &i;
} }
} }
} }
@@ -406,7 +412,7 @@ void GenerateSig( SigType eType )
return; return;
} }
qstring strSig = (*SigIterator).strSig, strTmp; qstring strSig = iterSig->strSig, strTmp;
char szMask[MAXSTR]; char szMask[MAXSTR];
ea_t dwStart, dwEnd; ea_t dwStart, dwEnd;
@@ -428,13 +434,13 @@ void GenerateSig( SigType eType )
if (Settings.iLogLevel >= 1) if (Settings.iLogLevel >= 1)
{ {
switch ((*SigIterator).eType) switch (iterSig->eType)
{ {
case PT_DIRECT: case PT_DIRECT:
msg( "sig: %s\n", strSig.c_str( ) ); msg( "sig: %s\n", strSig.c_str( ) );
break; break;
case PT_FUNCTION: case PT_FUNCTION:
msg( "sig to containing function: (+0x%X) %s\n", dwAddress - (*SigIterator).dwStartAddress, strSig.c_str( ) ); msg( "sig to containing function: (+0x%X) %s\n", dwAddress - iterSig->dwStartAddress, strSig.c_str( ) );
break; break;
case PT_REFERENCE: case PT_REFERENCE:
msg( "direct reference: [actual address in first opcode] %s\n", strSig.c_str( ) ); msg( "direct reference: [actual address in first opcode] %s\n", strSig.c_str( ) );

View File

@@ -2,10 +2,11 @@
bool HasOneHitSig( qSigVector& vecSig ) bool HasOneHitSig( qSigVector& vecSig )
{ {
for (qSigVector::iterator i = vecSig.begin( ); i != vecSig.end( ); i++) for (AutoSig_t& iterSig : vecSig)
if ((*i).iHitCount == 1) {
if (iterSig.iHitCount == 1)
return true; return true;
}
return false; return false;
} }