PDA

Ver la Versión Completa : Protección de Código > Dongles Microcontrolada


MaMu
20-07-2007, 10:34:37
Estoy desarrollando una mochila para el puerto Serie, microcontrolada, para proteger mi aplicación Delphi de usos piratas. Me preguntaba, a que frecuencia me conviene trabajar el uControlador puesto a que, no se como medir la frecuencia de mi aplicación, es decir, el tiempo real de cada instruccion. Lo que yo hago es relativamente sencillo, mi aplicación envia el puerto serie, una serie de datos en hexadecimal, y al cabo de cierto tiempo, recibe ese dato transformado por el uControlador, ambos hacen lo mismo, es decir, mi aplicacion ya conoce cual debe ser el dato recibido, puesto que lo calcula al enviarlo, y si lo que recibe es identico, entonces continua la ejecucion del programa. Si la proteccion es removida durante su uso, se cierra. Al uControlador, se lo somete a cierta radiacion para evitar ser clonado por ingenieria inversa, eso si, si logran remover el baño de vacrel-brea-acrilato con el que esta bañado.

PD: mi pregunta es lo que se lee en rojo.

Saludos

Ñuño Martínez
20-07-2007, 11:16:28
¡Ahí, ahí, haciendo preguntas fáciles! ;)

Recordando mis lecciones sobre electrónica, te diría que agarrases un potenciómetro digital portátil o un osciloscópio, lo conectases a ciertas patillas del microprocesador, te armases de paciencia y cruzases los dedos encomendándote a San Microsistems...

Ahora en serio.

GNU tiene una herramienta llamada "gprof" que, entre otras cosas, devuelve tiempos de ejecución de las funciones. Ahora mismo no recuerdo si Delphi tiene algo similar, creo que sí pero no sé ni cómo se llama ni cómo utilizarlo. En realidad no sé si realmente te serviría, ya que devuelve información en forma estadística más que datos precisos, pero tal vez pueda ayudarte.

También puede ser que no me haya enterado de nada de lo que has escrito. :rolleyes:

MaMu
20-07-2007, 11:23:26
GNU tiene una herramienta llamada "gprof" que, entre otras cosas, devuelve tiempos de ejecución de las funciones. Ahora mismo no recuerdo si Delphi tiene algo similar, creo que sí pero no sé ni cómo se llama ni cómo utilizarlo. En realidad no sé si realmente te serviría, ya que devuelve información en forma estadística más que datos precisos, pero tal vez pueda ayudarte.


Todo se reduce a codigo binario, pero un compilador "A" transforma una sentencia en por ejemplo 8 lineas de instruccion maquina, y un compilador "B" traduce la misma sentencia en "6" lineas de instruccion maquina. No hay forma de determinar para que frecuencia queda compilado? O tengo que basarme en la administracion de todo tipo de memoria, particular de cada PC, sea RAM, HDD, nucleos del procesador, etc. etc. No es que quiera un timming exacto, pero intento hacerlo como un proceso paralelo, sin que afecte en lo mas minimo a la aplicacion en si.

Saludos

seoane
20-07-2007, 11:45:26
Hola mamu, creo que no lo estas enfocando bien. Medir cuanto va a tardar en ejecutarse un determinado código es complicado, piensa que tiene que compartir la CPU con los demás procesos así que, aunque cojas el código de instrucciones de un pentium y vayas sumando los ciclos de cada instrucción, lo único que conseguirás es el tiempo mínimo que necesita para ejecutarse. Aun así, el tiempo seria en ciclos de reloj, pero dependiendo de la velocidad del micro el tiempo "real" sera diferente.

Yo intentaría enfocar el problema de otra manera, ¿para que necesitas saber el tiempo exacto que tarda en ejecutarse? ¿te valdría medir el tiempo, en microsegundo, con el contador de alta precisión del micro? ¿has pensado en usar threads?

MaMu
20-07-2007, 11:48:49
Hola mamu, creo que no lo estas enfocando bien. Medir cuanto va a tardar en ejecutarse un determinado código es complicado, piensa que tiene que compartir la CPU con los demás procesos así que, aunque cojas el código de instrucciones de un pentium y vayas sumando los ciclos de cada instrucción, lo único que conseguirás es el tiempo mínimo que necesita para ejecutarse. Aun así, el tiempo seria en ciclos de reloj, pero dependiendo de la velocidad del micro el tiempo "real" sera diferente.

Yo intentaría enfocar el problema de otra manera, ¿para que necesitas saber el tiempo exacto que tarda en ejecutarse? ¿te valdría medir el tiempo, en microsegundo, con el contador de alta precisión del micro? ¿has pensado en usar threads?

Si, ya estoy emulando trabajar en uSegundos. El tiempo lo necesito lo mas exacto posible para poder sincronizar el uControlador con la aplicacion. Lo que pienso es utilizar los ticks y hacerlo mediante algun thread de forma paralela a la ejecucion principal.

Saludos

seoane
20-07-2007, 11:57:17
Si necesitas precisión no uses GetTickCount, utiliza mejor un contador de alta precisión.

Aquí tienes un ejemplo de Lepe:
http://www.clubdelphi.com/foros/showpost.php?p=144561&postcount=5

MaMu
20-07-2007, 20:16:54
Si necesitas precisión no uses GetTickCount, utiliza mejor un contador de alta precisión.

Aquí tienes un ejemplo de Lepe:
http://www.clubdelphi.com/foros/showpost.php?p=144561&postcount=5

Perfect!!!

mario2000
23-11-2007, 02:32:03
Se ve que no sabes mucho de electronica y menos de microcontroladores por que no contratas a un amigo tullo que sepa y entre los dos hasen el trabajo y cada quien se consentra en lo sullo. :D

MaMu
23-11-2007, 15:53:04
Se ve que no sabes mucho de electronica y menos de microcontroladores por que no contratas a un amigo tullo que sepa y entre los dos hasen el trabajo y cada quien se consentra en lo sullo. :D

JajJAjJaj :D