Underc0de

Programación General => C / C++ => Códigos Fuentes => Mensaje iniciado por: Karcrack en Junio 16, 2013, 06:32:03 PM

Título: [SNIPPET-CONFIG] Lectura de configuración binaria
Publicado por: Karcrack en Junio 16, 2013, 06:32:03 PM
Comparto este pequeño código para obtener un bit de una array.

Yo lo uso para almacenar una cantidad indeterminada de bits de configuración. Obviamente configuración de estado: verdadero/falso.

Código (cpp) [Seleccionar]

struct OPTIONS{
private:
    unsigned long* config;
public:
    OPTIONS(unsigned long* config){
        this->config = config;
    }
    bool getOpt(unsigned long index){
        unsigned int    iIdx;
        unsigned long   dwCfg;

        dwCfg   = *(unsigned long*)(this->config + index/(sizeof(unsigned long)*8));
        iIdx    = index%(sizeof(unsigned long)*8);

        return ((dwCfg>>iIdx)&0x1);
    }
};


Ejemplo de uso:
Código (cpp) [Seleccionar]
void main(){
    unsigned long cfg[] = {0xBABA, 0xDEADBEEF};

    OPTIONS o(cfg);

    for(int i = 0; i<64; i++)
        printf("%d", o.getOpt(i));
}


Ejemplo real de uso:
Código (cpp) [Seleccionar]
#define INYECT_CODE 0x0
#define MUTEX       0x1
#define FORCE_ADMIN 0x2

void main(){
    OPTIONS o(GetModuleHandle(0));

    if(o.getOpt(INYECT_CODE))
        //Whatever
    if(o.getOpt(MUTEX))
        //Whatever
    if(o.getOpt(FORCE_ADMIN))
        //Whatever
    else
        //Whatever
}


Saludos 8)