Suche Hilfe von Profis (aus 2 mach eine)



  • camper schrieb:

    unsigned dwFindPattern(unsigned dwAddress, unsigned dwLen, BYTE *bMask, char *szMask)
    {
        return dwLen
            ? equal( (BYTE*)dwAddress, (BYTE*)dwAddress + strlen( szMask ), bMask, _1 == _2 || szChar[ &_2 - bMask ] != 'x' )
                ? dwAddress
                : dwFindPattern( dwAddress + 1, dwLen - 1, bMask, szMask )
            : 0;
    }
    

    come-on lets crypt again ...
    ... and _1, _2 will fall from heaven at compile time 🙂

    Taddel schrieb:

    Das flag ist etwas seltsam.

    Mir gefällt die goto Variante auch viel besser als die mit dem Flag.


  • Mod

    Ein bisschen Mitarbeit kann man verlangen

    #include <cstring>
    #include <algorithm>
    #include <boost/lambda/lambda.hpp>
    unsigned dwFindPattern(unsigned dwAddress, unsigned dwLen, const BYTE *bMask, char *szMask)
    {
        using boost::lambda::_1;
        using boost::lambda::_2;
        using std::equal;
        using std::strlen;
        for ( ; dwLen != 0; ++dwAddress, --dwLen )
            if ( equal( (BYTE*)dwAddress, (BYTE*)dwAddress + strlen( szMask ), bMask, _1 == _2 || *( szMask + ( &_2 - bMask ) ) != 'x' ) )
                return dwAddress;
        return 0;
    }
    

    Die Aufgabe ist von vornherein unsinnig, und gegebene Code lässt nicht auf eine Übnungsaufgabe schließen.



  • unnötige funktionsaufrufe zu vermeiden ist nicht immer unsinnig.


  • Mod

    crypt0r schrieb:

    unnötige funktionsaufrufe zu vermeiden ist nicht immer unsinnig.

    hat auch niemand behauptet.



  • leute seit ihr behindert das ist doch unwartbar



  • camper schrieb:

    crypt0r schrieb:

    unnötige funktionsaufrufe zu vermeiden ist nicht immer unsinnig.

    hat auch niemand behauptet.

    achso

    camper schrieb:

    Die Aufgabe ist von vornherein unsinnig, und gegebene Code lässt nicht auf eine Übnungsaufgabe schließen.



  • crypt0r schrieb:

    camper schrieb:

    crypt0r schrieb:

    unnötige funktionsaufrufe zu vermeiden ist nicht immer unsinnig.

    hat auch niemand behauptet.

    achso

    camper schrieb:

    Die Aufgabe ist von vornherein unsinnig, und gegebene Code lässt nicht auf eine Übnungsaufgabe schließen.

    "Nicht immer" != "Auf jeden Fall"



  • ich will aber nicht extra boost für diesen Code verwenden, da ich nie boost verwende 😕



  • Taddel schrieb:

    ich will aber nicht extra boost für diesen Code verwenden, da ich nie boost verwende 😕

    Ok.
    Hauptsache funzt!



  • unsigned dwFindPattern(unsigned dwAddress, unsigned dwLen, BYTE *bMask, char *szMask)
    {
    	const BYTE *pData=(BYTE*)dwAddress;
    	const char *szMaske=szMask;
    	BYTE *bMaske=bMask;
    	int i = 0;
    	while(dwLen-i)
    	{
    		switch(*szMaske)
    		{
    			default:
    				if(*szMaske == 'x' && *pData != *bMaske )
    					break;
    				++szMaske, ++pData, ++bMaske;
    				continue;
    			case 0:
    				return (unsigned)(dwAddress+i);
    		}
    		i++;
    		pData=(BYTE*)(dwAddress+i),szMaske=szMask,bMaske=bMask;
    	}
        return 0;
    }
    


  • mit einer schleife schrieb:

    //removed

    nenenene.
    für jedes i muss bMask und szMask von vorn durchlaufen werden, wenn der code das gleiche wie der von Taddel machen soll



  • wird mit der Zeile unter i++ erreicht.


Anmelden zum Antworten