[Turbo Pascal 7] Optimisation trunc() et écriture dans le code

Optimisation trunc() et écriture dans le code [Turbo Pascal 7] - Delphi/Pascal - Programmation

Marsh Posté le 10-09-2007 à 23:28:32    

Salut à tous,
 
J'suis tombé sur un truc à la con avec la bibliothèque standard du TP7, j'aimerais savoir si vous en avez déja fait l'expérience ou si vous avez des infos la dessus...
 
Environnement :
Programme en Turbo Pascal 7 (sous DOS, à l'ancienne).
 
Problème :
Modification du code
 
Description :
J'écris un programme qui doit réaliser des traitements sensibles (système de sécurité). J'aimerais surveiller l'intégrité de mon programme. Solution : lors du chargement, parcourir le code du programme, en faire un hash quelconque (ou se le copier en ninja en mémoire), et recalculer périodiquement ce hash (ou comparer la version executée avec la version sauvegardée). Problème : différence systématique entre le code chargé et le code exécuté. Après investigation aujourd'hui, on dirait que la fonction trunc modifie le code de l'appellant :o !
 
Question :
Est ce que quelqu'un a une doc ou une référence sur les unités livrées avec le TP7 et sur leur capacité à modifier dynamiquement leur code ou celui de leurs appellants, car ca me gène légèrement, comme comportement :o !
 
 
Merci !
 

Reply

Marsh Posté le 10-09-2007 à 23:28:32   

Reply

Marsh Posté le 11-09-2007 à 13:37:00    

lors du chargement

Chargement par qui ? Chargement vers quelle destination ?
 
En supposant que ce serait un chargement en mémoire fait par le système d'xploitation, il n'est pas du tout étonnant que le hash ne donne pratiquement jamais deux fois la même chose, car les programmes sont chargés là où il y a de la mémoire disponible, et c'est rarement au même endroit qu'une fois précédente. Toutes les adresses sont recalculées par le loader en se servant de la table que l'éditeur de liens a mis dans l'executable. (Je connais un peu le sujet, car j'ai écrit un éditeur de liens pour DOS disponible su mon site).

Reply

Marsh Posté le 11-09-2007 à 19:09:53    

Le hash de référence est calculé par le programme lui même, après le chargement par le système. Donc pas de problème à ce niveau (spas un hash précalculé).
Et sinon j'ai viré les appels à trunc (cay du caca de faire un calcul en flottant pour avoir juste un pauv' modulo, de toute facon :o ), et isolé les unités chiantes qui modifient ce qui est contenu dans leur segment de code (BGIFONT :o ) et celles dont je ne sais pas ce qu'elles peuvent faire (en général : toutes celles dont j'ai pas les sources :P ).
Résultat : ca marche, le programme vérifie son intégrité (code) à peu pres toutes les secondes, manque plus que faire un truc pour vérifier les données sensibles (plus chaud, la, je sais pas s'il me reste le temps de faire le con avec le descripteur de segment pour intercepter tous les accès mémoire, j'suis même pas sur que ca marche en mode réel :whistle: ...)
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed