Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Protección de Código > Dongles Microcontrolada (https://www.clubdelphi.com/foros/showthread.php?t=46001)

MaMu 20-07-2007 10:34:37

Protección de Código > Dongles Microcontrolada
 
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

Cita:

Empezado por Ñuño Martínez
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

Cita:

Empezado por seoane
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/show...61&postcount=5

MaMu 20-07-2007 20:16:54

Cita:

Empezado por seoane
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/show...61&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

Cita:

Empezado por mario2000 (Mensaje 247897)
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


La franja horaria es GMT +2. Ahora son las 09:59:08.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi