Sujet: Hash ELF en PHP
11/08/2008 @ 17:22:37: zion: Hash ELF en PHP
Je dois convertir un code simplissime de pascal en PHP:

  1.   function ELFHash(const Str : String) : Cardinal; 
  2. var 
  3.   i : Cardinal; 
  4.   x : Cardinal; 
  5. begin 
  6.   Result := 0
  7.   for i := 1 to Length(Str) do 
  8.   begin 
  9.     Result := (Result shl 4) + Ord(Str[i]); 
  10.     x      := Result and $F0000000; 
  11.     if (x <> 0then 
  12.     begin 
  13.       Result := Result xor (x shr 24); 
  14.     end
  15.     Result := Result and (not x); 
  16.   end
  17. end;


  1.   function GenerateELF($AFile
  2.   { 
  3.     $result = 0
  4.     $i = 0
  5.     $x = 0
  6.     $str = file_get_contents($AFile); 
  7.     for ($i=0$i<strlen($str); $i++) 
  8.     { 
  9.       $chr = $str[$i]; 
  10.       $result = ($result & 0xFFFFFFF) << 4
  11.       $result = ($result + ord($chr)) & 0xFFFFFFFF
  12.       $x = $result & 0xF0000000
  13.       if ($x != 0
  14.         $result = ($result ^ ($x >> 24))  & 0xFFFFFFFF
  15.       $result = (int)($result & (~$x)); 
  16.     } 
  17.     return $result
  18.   }


Et apparemment je me plante qqpart. Déjà avec ce le typage en PHP je rajoute quelques petits & 0xFFFFFFFF pour m'assurer que l'on reste sur 32 bits mais il me manque inévitablement quelque chose ...
11/08/2008 @ 18:28:15: zion: Hash ELF en PHP
Trouvé, c'est le $x >> 24 qui pose soucis vu que PHP traitant tout comme du signed, si on arrive en négatif le signe est récupéré à chaque >>...

Donc avec un : (($x >> 24) & 0x000000FF)

Ca roule!
11/08/2008 @ 18:35:17: ovh: Hash ELF en PHP
PHP traitant tout comme du signed

P'tain c'est bon à savoir ça :fouyaya:

Merci pour l'info :dawa:
11/08/2008 @ 18:52:46: zion: Hash ELF en PHP
L'unsigned n'existe pas en PHP :dawa:

Encore une nouvelle raison de moins en faire :tinostar:
Retour