elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


  Mostrar Mensajes
Páginas: 1 ... 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 [18] 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 ... 192
171  Programación / Programación C/C++ / Re: Pasar de Static Linking a Dynamic Linking. en: 7 Agosto 2012, 17:20 pm
Si en vez de cargarlas en tiempo de diseño las APIs, lo cual se puede ver con depends o algún otro programa que vea las funciones que importa el programa, se cargan dinámicamente en tiempo de ejecución, estos ya no aparecen. Si uno abre con un editor hexadecimal el ejecutable, va a haber en la parte de los strings las apis. Si uno lo cifra y luego lo descifra en tiempo de ejecución, sólo se va a poder saber esto si se debuggea el programa, si uno evita que el programa se pueda debuggear o emular, no hay manera de saber qué APIs se cargan.

Tanto baile .... para hookear un par de funciones (o más fácil? correr el binario sobre wine con APIs modificadas, menos drama), y saltearse todo el asunto del depurador ... Apenas se vea LoadLibrary() y GetProcAddress() en la tabla y "garbage" en el editor, unx sabe en dónde esperar la versión descifrada de ese garbage.

Saludos.

P.S → Lo del cifrado no lo habías mencionado, aún así sigue siendo al pedo.
172  Foros Generales / Foro Libre / Re: ¿Que opinas de Bitcoins? en: 6 Agosto 2012, 17:49 pm
Citar
Alex Mtx eso no es especulación, la especulación es hacer que el precio de la moneda baje

Especular es eso ... ver el valor de la moneda y en base a eso comprar/vender para generar dinero del aire.
Hay miles de formas de llamar a la gente que hace negocio con el mercado cambiario ... pero cualquiera sirve para entender el mecanismo y para sobreentender sus consecuencias en particular con algo tan nuevo como BitCoin, donde no hay marco regulatorio más que un simple algoritmo

Saludos.
173  Programación / Programación C/C++ / Re: Ayuda con este codigo. en: 6 Agosto 2012, 17:03 pm
Citar
El mayor problema que tenia es que no he encontrado nada de informacion sobre el operador |=

Acá tenés un machete de los operadores y su precedencia → http://en.cppreference.com/w/c/language/operator_precedence
|= es como+=, pero es usando el "or" en vez que "+".

Citar
Bueno, voy a leer el articulo sobre el formato ELF, y a ver si me entero yo solo de lo que es el "endianess".

A medida de que vayas leyendo lo que linkee, lo que te mencioné, y el Google vaya fluyendo ... todo se vá a ir conectando, de todas formas, ante cualquier duda, postee nomás.

Saludos ♥
174  Programación / Programación C/C++ / Re: Calculadora con Interfaz Grafica (C/SDL) !! en: 6 Agosto 2012, 16:57 pm
Citar
Hola buenas, Alex Mtx : Si comprendo perfectamente, pierde portabilidad por los linkeos y la inclusion de las libs
En realidad desde que tenés que tipear el comando para compilar ... SDL es bastante multiplataforma como para que robe portabilidad :D
El hecho de tener que tipear un comando, roba comodidad y portabilidad .... pero que no tengas algo que lidie con que si es SDL.h o SDL/SDL.h es algo que también roba portabilidad (los otros .h están bajo SDL/ también), depende de cómo lo veas, es un proyecto chiquito igual, no es tanto drama ... pero la idea es que te agarres costumbre con la "forma correcta" para cuando te toquen proyectos más grandes :)

Citar
Muy buena tu correccion gracias Alex Mtx

Así se aprende, programando y mirando código de otros !!
Seguí programando, programando y programando ... compartí tu código y vamos a ir limando asperezas.

Suerte y no desanimes !

Saludos.

P.S → Agregar los otros eventos y otros operadores es un segundito, lo "más importante" ya está.
175  Programación / Programación C/C++ / Re: Ayuda con este codigo. en: 6 Agosto 2012, 16:37 pm
A ver .... vamos por partes, por que el código no tiene comentarios, lo que requiere leerlo más detenidamente.

1) elf_read_hdr()
Es una función que lee el encabezado de un fichero en formato binario ELF (el análogo en Windows es .exe o mejor dicho: PE), el código es medio feito por que tiene funciones helpers que no están descritas y con nombres "feos".
Pero básicamente esas funciones convierten de diversas notaciones (como un array de unsigned chars a un unsigned de 32 bits ... misma cantidad de bits y mismos bits per sé, diferente forma de almacenar en memoria .. por ejemplo)
 
Por lo que tendrías que leer, es algo sobre el formato ELF ( acá tenés una ayuda con eso ... pero nótese que es una lectura BÁSICA y que tenés que sumar otras)

2) be16(), be32(), be64()

2.A) Vamos a la declaración:

Código
  1. static inline u16 be16(u8 *p)

voy a ignorar static e inline, y vamos a lo que importa.
la función toma un puntero a u8 (u8 está definido como unsigned char ... lógico, u8 significa unsigned 8 bits, bits es justamente lo que pesa un char en memoria) y retorna un unsigned de 16 bits (un "short", 2 bytes, el doble de un char).

Así que, para juntar los 16 bits para retornarlos en u16, desde el vamos sabemos que necesitamos 2 u8 ... 2 elementos de 8 bits suman 16.
Ahora, ¿por qué unsigned pensarás? bien, acá quiero hacer un stop y primero hacemos una clase básica sobre los tipos de datos y el signo:

2.B) Hagamos un inciso sobre tipos y signos
Las variables que tienen signo (todas lo tienen, el compilador lo asume salvo que las marques unsigned), en memoria, se le "roba" un bit mara marcar el signo (ese bit si está como 1, o true, es negativo, sino no). Por ejemplo, un byte son 8 bits, y si tuviese o no signo, nos deja con esta situación:

0 0 0 0 0 0 0 0 = 8 bits para usar (2^8 es nuestro rango de números ... lógico, 256 !) ... y ni un bit usado para el signo

0 0 0 0 0 0 0 0 = 7 bits para usar y uno reservado para el signo (2^7 es nuestro "rango" de números ... con 7 bits representamos un rango de 128, sin importar el signo, que eso lo marca el bit restante )

Ese "bit reservado" para el signo puede estar de un lado y otro, depende del "endianess", y es algo que no pienso cubrir acá, pero te lo nombro para que lo busques.

2.C) Retomemos

Sabiendo que u8 representa 8 bits precisos (por eso el unsigned, no "robamos" un bit para el signo) y u16 representa 16. ahora pasemos a analizar el código:

1) u8 es un puntero, como ves más abajo, en realidad se espera que este puntero albergue dos elementos (algo equivalente a "u8 dato[2]"), bien ... 2 unsigned de 8 bits (son 16)

2) Operaciones con bits (lo resaltado)

Código
  1. u16 a;
  2.  
  3. a  = p[0] << 8;
  4. a |= p[1];
  5.  
  6. return a;

La primer línea resaltada lo que usa es el operador de bit shift, básicamente tenemos dos operadores de bit shift :

  • <<
  • >>

Básicamente, lo que hacen es "correr" los bits para un lado u otro (¿las flechitas te sugirieron algo?), y todo lo que "quede afuera" (por que podés correr hasta donde aguante el tipo de dato sin perder nada), se trunca, veamoslo de manera gráfica con este pseudocódigo con una variable de 8 bits:


Código:
X = 0 1 1 0 0 0 0 1
X << 3

Tenemos que "corremos" los bits de X tres lugares a la izquierda, el nuevo X vale esto:

Código:
 0 0 0 0 1 0 0 0 

Todos los otros 1, se corrieron "de más" a la izquierda, y se perdieron ... se entiende el concepto? Otro ejemplo menos radical con el destino de los bits:

Código:
X = 0 1 1 0 0 0 0 1
X << 1

X queda :

Código:
X = 1 1 0 0 0 0 1 0

Ok, avanzamos ... Como no podemos hacer  "a = p", tenemos que meter los dos 8 bits en la variable de 16 bits.
por lo que tenemos que "correr" bits para encajarlos en la parte izquierda y derecha de "a".
básicamente metemos los primeros 8 bits, los enviamos a la izquierda, y metemos los otros 8 bits, veamoslo:

Código
  1. A = 0 1 1 0 1 0 1 0 (8bits)
  2. B = 0 0 0 0 0 1 0 1 (8bits)
  3. C = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 (16 bits)
  4.  
  5. C = A (C vale A, y todos los bits de A pensa que estan a la derecha)
  6. C << 8 (los corremos a la izquierda, ahora A quedo en el lado izquierdo de C, el resto es 0, obvio)
  7.  
  8. C |= B // Esto nos interesa
  9.  
  10.  

Lo que marqué ahí es un operador con bits, y es un operador de suma (or), básicamente esto significa C es igual a C, más los bits ( | ) de B, que pensá que irían a la derecha ... vuelan los 8 bits de la derecha (que no tenían nada importante), y los 8 de la izquierda que dejamos desde el shift, quedan ... se entiende?
C quedaría compuesto de A y B ... A llendo a la izquierda y B a la derecha.

Un sumario de los operadores de bit y bit shift → http://www.cprogramming.com/tutorial/bitwise_operators.html
Y con eso podrías entender las otras funciones.

Saludos.
176  Sistemas Operativos / GNU/Linux / Re: como compilar inkscape en: 6 Agosto 2012, 14:56 pm
Si usás Ubuntu (derivada de Debian), esto es coser y cantar:

Código
  1. apt-get build-dep inkscape

Y con eso instalás TODAS las dependencias para compilar Inkscape.
Primero probá con eso ... después, ante cualquier duda posteá (pero agregá detalles !! como qué comandos ejecutás)

Saludos.
177  Programación / Programación C/C++ / Re: Calculadora con Interfaz Grafica (C/SDL) !! en: 6 Agosto 2012, 14:44 pm
En principio habría que sacarle todas esas DLLs que tiene ahí, incluído el compilado ... o debería ir a un directorio aparte.
Pensá que en un proyecto se separa por un lado el código, por otro los resources (como los JPG y fuentes TrueType), y por otro los compilados.

Un esquema muy común es el de:
Citar
src/
include/
resources/
bin/

etc ... mientras no se mezclen todas las cosas en un directorio, cualquier esquema vale.
Siguiendo en las líneas de los ficheros, también hay que señalar que las extensiones son de C++ (cpp) y no de C (.c), pero no sólo eso ... el uso de una extensión diferente, altera el comportamiento del compilador, que usualmente se pasa a un modo C++ y muchas cosas cambian (pero C99 puede perdonarlas), siendo la más visible la de los comentarios de una sóla línea (C99 creo que los incorpora, pero son originarios de C++), por lo que te aconsejo compilar usando una extensión válida, y si te animás, el flag -ansi.

Otra cosa que "se vé feo" es incluir cpp, uno diferencia ficheros fuente (.c, .cpp, .cxx, .cc, etc ... siendo .c de C, y todo lo demás de C++)  de los ficheros de encabezado (.h, .hh, .hpp, etc .. siendo .h de C, y todo lo demás C++) por que tienen diferentes funciones ... pero es una convención más que un requisito (a pesar de ser convención informal, se puede alterar el comportamiento del compilador)

Tendrías que repasar tus textos en cuanto a eso.
Revisar definición, declaracion, etc (acá tenés una ayuda) .... y entender que en  los encabezados van las declaraciones y los .c van las definiciones (en general)

Entendido eso, como lectura sugerida te daría este texto → http://www.thegeekstuff.com/2011/10/c-program-to-an-executable/
Para que vayas conectando las piezas en tu cabeza y veas uno de los "porqué" de esta convención.

Pasemos a compilar:
Citar
alex@Sylbit:~/Downloads/Calculadora_con_SDL_puro_C$ clang Untitled1.cpp
Untitled1.cpp:3:10: fatal error: 'SDL.h' file not found
#include <SDL.h>
         ^
1 error generated.

En mi caso, el encabezado SDL.h está en /usr/include/SDL, así que tengo que cambiarlo a esto:

Código
  1. #include <SDL/SDL.h>

Como verás, el código no es portable ... báh, el código y el sistema con el que se compila (no lo hay), por lo que deberías usar un IDE que lidie con el tema de los encabezados y ajuste eso o mejor, usar algo como cmake que es mucho más configurable y multiplataforma .... pero pensá de este párrafo como algo opcional que sumaría mucho a la calidad del paquete, pero que no es obligatorio.

Citar
alex@Sylbit:~/Downloads/Calculadora_con_SDL_puro_C$ clang Untitled1.cpp  -lSDL -lSDL_ttf -lSDL_image

Genial, compila !!! (compilado como código C puro  .... no compila)
En principio sería eso, la sumadora está bien ... no opiné sobre el código fuente por que se hace muy denso (memory leaks, identado, nombrado de variables y funciones, valores sin inicializar,  uso abusivo de else if en vez de switchs, falta despedazar algunas funciones en otras más chicas y así así así así ) y largo esto, pero tratá de corregir lo que señalé acá primero

Saludos.
178  Foros Generales / Foro Libre / Re: ¿Que opinas de Bitcoins? en: 6 Agosto 2012, 14:02 pm
Citar
Yo diria que con los bitcoins lo unico que puede hacer es comprarlos, esperar que cambie su valor y volver a pasarlo a tu moneda para ganar la diferencia.

Eso es especulación, y gracias a eso (en los foros vas a ver el uso de la palabra "hoarding") Bitcoin no despega y no tiene amplia aceptación (además de tener un valor inestable) ... por que no hay mucho circulante, y quien conoce el diseño de BitCoin sabe que eso es un GRAN problema.
La comunidad más comprometida con Bitcoin ODIA a lxs especuladorxs (y yo tengo un repertorio de palabras mucho más fuertes dedicadas a esta gente que estanca bitcoin ... por que lo estancan)

Citar
la deep web darknet

FFY ... WTF?

Saludos.
179  Programación / Programación C/C++ / Re: Pasar de Static Linking a Dynamic Linking. en: 6 Agosto 2012, 03:20 am
Pero .... es al pedo, estás cambiando de donde hay que fijarse que APIs usás.
No lo estás ni ocultando ni ofuscando.

Saludos.
180  Foros Generales / Noticias / Re: Se anuncia GaymerCon, una feria de videojuegos para jugadores homosexuales en: 5 Agosto 2012, 05:37 am
No sabía que eras gay.

¿Cuando dije que era gay? primero, soy una persona queer/trans (digo que soy "gay" a veces para simplificar, pero no significa que sea así) ... además dije que me resulta muy abrasivo el machismo/heterosexismo en el ámbito informático (que no tiene nada que ver con ser o no gay)
El sábado pasado un amigo me llevó a un HackLab local por primera vez, y a los 20 minutos me puse rré mal y me quería ir, no sabía cómo disimular la cara de incomodidad ... un flaco me empezó a tratar de "novia" de mi amigo con el que fui, andaba diciendo cosas como que "afeminado" que soy, que era un "balín" y un montón de cosas FUERA DE LUGAR ... yo no me estaba riendo :S

No es la primera vez que tengo una experiencia así en el ámbito informático, y eso me hizo plantear si dejo las computadoras por una carrera como derecho, ciencias políticas u abogacía (dado que algo de afinidad tengo con estas carreras por que tengo algo de activismo encima)
Páginas: 1 ... 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 [18] 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 ... 192
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines