Poster une réponse à un sujet: Hash ELF en PHP
Attention, ce sujet est un sujet ancien (5863 jours sans réponse)
zion
L'unsigned n'existe pas en PHP
Encore une nouvelle raison de moins en faire
![:dawa: :dawa:](images/smileys/dawa.gif)
Encore une nouvelle raison de moins en faire
![:tinostar: :tinostar:](images/smileys/tinostar.gif)
ovh
zion
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!
Donc avec un : (($x >> 24) & 0x000000FF)
Ca roule!
zion
Je dois convertir un code simplissime de pascal en PHP:
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 ...
- function ELFHash(const Str : String) : Cardinal;
- var
- i : Cardinal;
- x : Cardinal;
- begin
- Result := 0;
- for i := 1 to Length(Str) do
- begin
- Result := (Result shl 4) + Ord(Str[i]);
- x := Result and $F0000000;
- if (x <> 0) then
- begin
- Result := Result xor (x shr 24);
- end;
- Result := Result and (not x);
- end;
- end;
- function GenerateELF($AFile)
- {
- $result = 0;
- $i = 0;
- $x = 0;
- $str = file_get_contents($AFile);
- for ($i=0; $i<strlen($str); $i++)
- {
- $chr = $str[$i];
- $result = ($result & 0xFFFFFFF) << 4;
- $result = ($result + ord($chr)) & 0xFFFFFFFF;
- $x = $result & 0xF0000000;
- if ($x != 0)
- $result = ($result ^ ($x >> 24)) & 0xFFFFFFFF;
- $result = (int)($result & (~$x));
- }
- return $result;
- }
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 ...