Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - 0xDani

#781
Umm... no se como no lo he pensado xD. Perdon por haberte hecho escribir tanto, y gracias por las respuestas. En cuanto a las mascaras, creia que te referias a los valores hexadecimales, ya conocia los operadores de bits.

Saludos.
#782
Cita de: xiruko en 23 Octubre 2012, 23:43 PM
una pregunta que es lo que quieres hacer exactamente? modificar los bits de un byte? esto se suele hacer aplicando mascaras al byte. por ejemplo, si tienes un byte inicial:
a = 10000001
y quieres poner a 0 el MSB para que quede asi:
b = 00000001
lo que deberias hacer es aplicar la siguiente mascara:
b = a & 0x7F
con lo que estarias poniendo a 0 el bit mas significativo, y dejando igual a los demas. si ahora quisieras volver a ponerlo a 1, deberias aplicar la siguiente mascara:
c = b | 0x80

lo digo porque no creo que hagan falta librerias externas y demas para acceder a los bits, ya que con los operadores que trae hay mas que suficiente para muchisimas aplicaciones. si tienes alguna pregunta ya diras...

espero que te sirva de ayuda, un saludo!

stdlib es una libreria del estandar, no es nada externo. Y si tengo una pregunta, ¿de donde sacas las mascaras? Si no utilizo ni siquiera la libreria del estandar pues mejor.

Saludos.
#783
Cita de: rir3760 en 23 Octubre 2012, 17:50 PM
El desplazamiento dentro del byte depende de como lo interpretes lo usual es no hacerlo. Esa función se puede acortar un poco. Por ejemplo:
#include <stdio.h>
#include <stdlib.h> /* div_t, div */
#include <limits.h> /* CHAR_BIT */

_Bool bit(unsigned char *a, int pos);

int main(void)
{
   unsigned char test = 131;
   int i;
   
   for (i = CHAR_BIT - 1; i >= 0; i--)
      printf("%2d", i);
   putchar('\n');
   for (i = CHAR_BIT - 1; i >= 0; i--)
      printf("%2d", bit(&test, i));
   putchar('\n');
   
   return EXIT_SUCCESS;
}

_Bool bit(unsigned char *a, int pos)
{
   div_t d = div(pos, CHAR_BIT); /* .quot = byte, .rem = bit */
   
   return a[d.quot] >> d.rem & 1;
}


Y su salida (con lo usual, ocho bits por byte) es:
7 6 5 4 3 2 1 0
1 0 0 0 0 0 1 1


Otra opción es utilizar directamente los operadores de división y modulo.

Un saludo

Gracias por la respuesta, muy buena.
#784
Programación C/C++ / Acceder a bits de un array.
23 Octubre 2012, 16:27 PM
¿Es correcta esta forma de acceder a los bits de un array?

_Bool bit(char *a, int b)
{
  int index = (b/8)-1;
  if(b%8) index++;
  if((a[index]>>(8-(b%8)))%2) return true;
  return false;
}


a es un puntero a un array de chars a cuyos bits se quiere acceder y b el numero del byte al que se quiere acceder.
Seguramente se puede hacer mas facil, ultimamente he tenido examenes y ando un poco espeso xD

Saludos.
#785
Cita de: ankora45 en 23 Octubre 2012, 12:13 PM
Hola, puedes crear una cadena char menu[50]y pasarle a switch(menu[0])
asi lee solo el primer caracter asi si pones asdf siempre te lleva al defaul sin pasar por todas las letras

Ocupar 50 bytes para solo utilizar uno... digamos que no es la mejor solucion.
#786
Apenas he leido nada, pero en el cuarto trozo de codigo tienes esta linea:
temp=999999999;
donde temp es una variable de tipo int, asi que ahi te estas saliendo del rango.

Saludos.
#787
Es que el otro dia encontre el truco de la variable de entorno LD_PRELOAD: http://systemadmin.es/2009/09/capturar-llamadas-al-sistema-con-ld_preload / http://jjmora.es/sabias-que-la-variable-ld_preload/ y lo estuve probando cambiando esta variable desde la terminal, y no sabia como hacerlo desde codigo. Gracias y saludos ;)

EDITO: He echo un pequeño codigo de prueba:

#include <stdlib.h>

int main()
{
  setenv("LD_PRELOAD", "/home/user/libprueba.so", 1);
  system("echo $LD_PRELOAD");
  return 0;
}


Y en la terminal:


$ gcc prueba.c -o prueba
./prueba
/home/user/libprueba.so //Hasta aqui bien
//Ahora saco por pantalla esta variable
echo $LD_PRELOAD
                               //En esta linea no sale nada, la variable ha cambiado su valor a 0 :(
$
#788
Análisis y Diseño de Malware / Re: Duda
22 Octubre 2012, 15:55 PM
Cita de: $Edu$ en 21 Octubre 2012, 18:55 PM
Concluyendo te digo que si buscaste en internet y encontraste que decian en C/C++ es porque son los mas comunes a usar en "virus" o troyanos porque no dependen de ninguna plataforma, son multiplataforma, correran en Linux como en Windows. Sin embargo Batch es solo para Windows, y los demas necesitan su maquina virtual instalada en el sistema operativo para que corran los programas con esos lenguajes, asi como VB.NET que necesitara que tengas instalado el NetFramework en tu pc, cosa que los windows nuevos ya tienen el ultimo NetFramework, por lo que no habria problemas, pero si es corrido en Linux ya no funcionaria.

Tengo entendido que ya hay algunas aplicaciones para Linux hechas en C# o VB.NET, corren sobre Mono.
#789
Donde este C/C++...
#790
SkyNET? El de terminator? Deberia tener capacidad para disparar todas las bombas nucleares del mundo y para diseñar robots asesinos  :xD