IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Lazarus Pascal Discussion :

Probable problème de passage de paramètres en cascade [Lazarus]


Sujet :

Lazarus Pascal

  1. #1
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 858
    Points : 11 301
    Points
    11 301
    Billets dans le blog
    6
    Par défaut Probable problème de passage de paramètres en cascade
    Bonsoir,

    Soit une fonction de test cryptant/décryptant un buffer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    function TestCrypt(var Buffer: TByteArray; Size: integer; Position: int64; PassWord: string; Write: Boolean): Boolean;
    var
      i, j, l: integer;
    begin
    {$o-}
    //Result:=True; Exit;
      l:=Length(PassWord);
      for i:=1 to Size
      do begin
        j := (Position + i)  mod l ;
        if j=0 then j:=l;
        Buffer[i-1] := Buffer[i-1] xor Ord(PassWord[j]) ;
      end;
      Result:=True;
    {$o+}
    end;
    dont l'adresse est passée dans la variable lyCryptAlg aux fonctions de lecture/écriture de fichiers suivantes, qui encapsulent les fonctions Windows WinRead et WinWrite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    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
    function lyCryptRead(hFile: integer; var Buffer: TByteArray; Size: integer; var Done: integer; var OLapd: OverLapped ):Boolean; stdcall;
    var
      Offset: int64;
    begin
    {$o-}
      Result:=WinRead(hFile, Buffer, Size, Done, OLapd); // on laisse faire WinVFS...
      if Result and MustCrypt
      then begin // on décrypte le Buffer
        Offset := OLapd.Offset + OLapd.OffsetHigh shl 32 ;
        if not lyCryptAlg(Buffer, Done, Offset, lyPassWord, False)
        then Done:=0; // renverra le Buffer vide et ShortRead alors que c'est un problème de décryptage...
      end;
    {$o+}
    end;  
     
    function lyCryptWrite(hFile: integer; var Buffer: TByteArray; Size: integer; var Done: integer; var OLapd: OverLapped ): Boolean; stdcall;
    var
      Offset: int64;
    begin
    {$o-}
      if MustCrypt
      then begin // on crypte le Buffer
        Offset := OLapd.Offset + OLapd.OffsetHigh shl 32 ;
        Result:=lyCryptAlg(Buffer, Size, Offset, lyPassWord, True);
      end
      else Result:=True;
      if Result
      then Result:=WinWrite(hFile, Buffer, Size, Done, OLapd) // on laisse faire WinVFS...
      else Done:=-1; // indiquera une erreur d'écriture alors que c'est un problème de cryptage...
    {$o+}
    end;
    L'exécution provoque une erreur, probablement de gestion de mémoire, dans la bibliothèque SQLite qui alloue le buffer et définit les fonctions WinRead et WinWrite.

    Si je shunte le travail de la fonction de cryptage en décommentant la 1° ligne, plus d'erreur (mais plus de cryptage !)

    Voyez-vous une explication liée au passage de paramètres ? Ou une autre : je suis preneur !
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  2. #2
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Hia,

    Je ne vois pas d'appel à TestCrypt, il est donc impossible de répondre.
    Si les cons volaient, il ferait nuit à midi.

  3. #3
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 858
    Points : 11 301
    Points
    11 301
    Billets dans le blog
    6
    Par défaut
    L'adresse de TestCrypt est stockée dans la variable lyCryptAlg.

    Je précise que j'ai essayé plusieurs conventions pour TestCrypt (cdecl, stcall), sans différence à l'exécution, et que j'ai désactivé les optimisations suite à des soucis de variation de la valeur de paramètres entiers constants dans des fonctions similaires...

    Je travaille sous Lazarus 32 sous CT 2.8 sous Win7 64 bits avec la dll SQLite 3.7.13
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  4. #4
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 858
    Points : 11 301
    Points
    11 301
    Billets dans le blog
    6
    Par défaut
    Finalement, en mettant le code de cryptage directement dans les fonctions d'accès, j'obtiens la même erreur en supprimant un niveau d'appel...
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  5. #5
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Citation Envoyé par tourlourou Voir le message
    Finalement, en mettant le code de cryptage directement dans les fonctions d'accès, j'obtiens la même erreur en supprimant un niveau d'appel...
    La fonction de cryptage me parait correcte (=testée à part )
    Vous auriez un mini projet pour tester plus avant ?
    Philippe.

  6. #6
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 858
    Points : 11 301
    Points
    11 301
    Billets dans le blog
    6
    Par défaut
    Merci de vous être penché sur mon problème, qui me semble résolu aux derniers tests.

    Je ne m'explique pas bien la chose, mais n'exclus pas la responsabilité du cryptage dans le buffer d'écriture fourni, qui l'aurait dès lors rendu illisible par la bibliothèque appelante (j'avais imaginé qu'elle n'en avait plus besoin...)

    Il me semble pourtant avoir testé lors d'une des nombreuses phases d'élaboration du code une version avec recopie dans un buffer dédié au cryptage.

    Mais il a pu y avoir des erreurs qui se sont remplacées, au cours des innombrables essais !

    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 19
    Dernier message: 09/06/2006, 10h03
  2. Problème de passage de paramètres à une procedure
    Par momo62 dans le forum x86 16-bits
    Réponses: 2
    Dernier message: 22/12/2005, 15h22
  3. [template] problème de passage de paramètres
    Par vinny_the_true dans le forum C++
    Réponses: 2
    Dernier message: 14/12/2005, 01h15
  4. Réponses: 9
    Dernier message: 13/05/2005, 03h13
  5. problème de passage de paramêtre sous mozilla
    Par mat10000 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 27/09/2004, 10h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo