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 - plataplomo2948

#1
Usted tiene razon, nunca mas usamos la memoria fisica! muy volatil esa memoria! siempre usa archivos! nunca puede usar memoria fisica! (sarcasmo). Y soy ruso, eso le molesta?

Ya vas a ver que he escribido mas drivers que usted tiene anos. Posteare eso en mi cuenta en el osr list (donde los expertos de verdad viven:) ). Vamos a reir mucho de ti, tendras verguenza.

he ayudado en un dia mas gente que usted ha ayudado en una semana en ese foro , pero me salgo! llena de mujeres zelosas como usted, buscando discutir.

"La mano invisible del mercado me robo la billetera"

mano invisible? es una polla muy visible que despues de tomar toda su pinche plata - va directemente en su culo y no hace nada, llora por su blog (pasioncris) waaa como la mujer que es.

jajjaja picnhe p**a adios
#2
esos direciones de memoria "virtual" estan mapeados directamente a la memoria fisica.

http://msdn.microsoft.com/en-us/library/windows/desktop/aa965226%28v=vs.85%29.aspx

" The nonpaged pool consists of virtual memory addresses that are guaranteed to reside in physical memory as long as the corresponding kernel objects are allocated. The paged pool consists of virtual memory that can be paged in and out of the system. "

Aun que dice que si, el PagedPool tampoco no es tan "virtual" por que es mas parecido al archivo.

No entiendo a que refiere con "IRQL >= DISPATCH_LEVEL" por que el IRQL no tiene nada que ver con la memoria fisica.

Solo sito68 dice 'memoria fisica' y hay varias tipos de memoria fisica. Esto no es la unica manera, hay bastantes otras.
#3
ASM / Re: Conversion de bases, consulta
9 Noviembre 2014, 01:16 AM
Exactamente que quiere hacer?. En ASM todo ya es base 2, pero lo leamos en base 16. En ASM todo lo siguente es igual


mov eax , 0xf

mov eax, 15d

mov eax, 00001111b


Si no refiere a eso, tendria que estar hablando de punteros del string asi? en ese caso puede usar strtol de libc



string = "12344321" // d
base = 2

push string
push NULL // no se necisita por convercion
push base
call strtol()

cmp eax, 0 // eax tendra la respuesta
jnz etc etc...



Seria mejor si postea su codigo pra mostrar su problema





fofaso - Recibi su mensaje privado, seria mejor si usted postea su codigo aqui para tener mas opiniones.
#4
Yo no sabia que es volatil... ; )

Generalmente, eso no es posible desde el espacio del usuario (sin IOCTL). Hay bastantes maneras de hacerlo desde el kernel, deberia impesar estudiando la diferencia entre Paged y NonPaged memoria pools con llamada a ExAllocPoolWithTag(). (NonPaged pool = memoria fisica)
#5
linux - cambiar /sys/class/backlight/acpi_video0/brightness (para ubuntu y arch me funciona)

como te dije, eso no funcionara con todos y todo depende del driver que usa. es mejor hablar directamente con el driver.
#6
Es cuestion de preferencia y estilo (pra mi es mas facil leer) - no hace diferencia en el ASM que compila. Cosas asi no van a afectar el comprtamiento del programa y en ese caso solo es estitica.

tambem se me olvido hacer el checkeo de errores en el malloc(). tiene que hacer algo asi despues de cada llamada a malloc()

if Primera.Trabajos o Primera == NULL
    goto FINAL;

tambien, despues de liberarlos, tiene que poner el valor a cada variable a NULL. es buena practica para evitar la explotacion "use after free"
#7
No puede ver un crash porque eso no es un buffer overflow. Si ponga una llamada a "printf("%s\n", string)" despues del strcpy va a mostrar exactamente lo que puso sin error, aun que el buffer es "demasiada pequena".

Un bufferoverflow no siempre va a pasar cuando hay un buffer demasiada pequena. Los overflows del stack solo pasan cuando hay otro data en el stack para borrar, en en ese caso debido al tomano de la programa, no hay otra informacion, y la programa sigue normalmente. Si ponga mas variables, y hace mas operaciones dentro de su programa, antes de la llamada a strcpy, tal vez puede ver un overflow.

Yo le recomendaria practicar con otras programas que ya son explotadas para aprender.
#8
En windows y linux - eso dependaria en cual driver esta usando y la respuesta va a ser diferente por sistemas diferentes. En windows, GetDeviceGammaRamp y SetDeviceGammaRamp podria funcionar en bastantes sistemas, pero no todas.

Creo que ese funcion no va a ser muy documentada, porque muchos manufactores solo quieren que su software hace eso, y tendria que hacer el ingeniera reversa para averiguar el IOCTL que corresponde al driver.
#9
Bueno, me parece que usted sabe de lo que habla aun que no entiendo exactamente cual es su objectivo final, pero eso es como hacer el codigo para que compila bien. Eso imprima hasta 32.

La proxima vez, deberia poner su error de compilicaion y decir que quiere hacer "un array de int dentro de un array de struct" : ) suerte


typedef struct Humano
{
   int* Trabajos;          
} HUMANO, *PHUMANO;    
   
int main ()
{
      int CantidadDeTrabajos = 4; //
      int CantidadDePersonas = 8;    // personas
      int Cont = 0;
     
      // declarar espacio por un array de struct
      PHUMANO Primera = (PHUMANO)malloc(sizeof(HUMANO) * CantidadDePersonas);
     
      // por cada persona, declara un array dentro el struct
      for (int i = 0; i < CantidadDePersonas; i++)
          Primera[i].Trabajos = (int*)malloc(sizeof(int) * CantidadDeTrabajos);
     
      for (int i = 0; i < CantidadDePersonas; i++)
      {
          for (int j = 0; j < CantidadDeTrabajos; j++)
          {
              Cont += 1;
                 
              Primera[i].Trabajos[j] = Cont;
          }    
      }
     
      for (int i = 0; i < CantidadDePersonas; i++)
          for (int j = 0; j < CantidadDeTrabajos; j++)
              printf("Trabajo#%i\n", Primera[i].Trabajos[j]);
             
             
      //Primera[0].Trabajos[0] = 248;

      //printf("Primera->Trabajos = %i\n", Primera[0].Trabajos[0]);
     
     
      for (int i = 0; i < CantidadDePersonas; i++)
          free((int*)Primera[i].Trabajos);
     
      free(Primera);
      _getch ();
      return 0;
}



Modificacion - Al respecto a 1 - no estamos trabajando con los vectores, estos son arrayes (son parecidos pero hay diferencias). Todavia si estariamos trabajando con vectores, la alocacion dinamica no seria necesario por ese codigo. Tambien, los vectores son de C++, asi que si quiere usar vectores - seria mejor usar new/delete en vez de malloc/free (eso no va a cambiar el comportamiento de su programa, solo para notar la diferencia entre C y C++ y por que no es mejor practica a mezclarlos).

Generalmente, la alocacion dinamica es necesario solo cuando acepta algun tipo de input, sea de un archivo, stdin, socket, etc. Cuando hace un inicilizacion estatica (int i = 0), esa secion de memoria (los 4 bytes) SIEMPRE va a ser libre para manipular, si o si. 
#10
1. Estas usando un puntero doble... por que?

2. El tomano del int siempre va a ser 4 bytes. Por cada persona, hay que allocar otro struct. Si no quiere hacer eso, hay que poner mas variables dentro de su struct.

Trata eso, pra mi funciono


typedef struct Humano
{
   int Trabajos;          
} HUMANO, *PHUMANO;    
   
int main ()
{
     
      PHUMANO Primera = (PHUMANO)malloc(sizeof(HUMANO));

      Primera->Trabajos = (int)malloc(sizeof(int));
     
      // nunca debe hacer eso por que es allocacion dinamica y eso es un valor estatico pero
     // solo es pra mostrar como funciona
      Primera->Trabajos = 248;

      printf("Primera->Trabajos = %i\n", Primera->Trabajos);
     
      free((int*)Primera->Trabajos);
      free(Primera);
      return 0;
}





Acabo de ver eso, y en ese caso no es necesario usar la alocacion dinamica porque en linea 10 "cont" es un valor estatico. Es decir que ya esta en el stack y la memora ya viene allocada del imagen.

modificacion - disculpe - en linea 11 es la declaracion estatica y en linea 23 pongas un valor dinamica a un valor estatica.



Ok, veo porque usa un puntero doble. Quiere hacer un int array dentro de un struct. Debe hacer asi:


typedef struct Humano
{
    int* Trabajos;         
} HUMANO, *PHUMANO;   
   
int main ()
{
       // eso coresponde al tomano de su array
       int NumeroDeElementos = 30;
       PHUMANO Primera = (PHUMANO)malloc(sizeof(HUMANO));

       Primera->Trabajos = (int*)malloc(sizeof(int) * NumeroDeElementos);
       
       // nunca debe hacer eso por que es allocacion dinamica y eso es un valor estatico pero
      // solo es pra mostrar como funciona
       Primera->Trabajos[15] = 248;

       printf("Primera->Trabajos = %i\n", Primera->Trabajos[15]);
       
       free((int*)Primera->Trabajos);
       free(Primera);
       return 0;
}




modificaion - se me olvido poner un *