Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.049 Beiträge
 
Delphi 12 Athens
 
#10

AW: ASLR und HighEntropy - Probleme

  Alt 8. Nov 2022, 16:53
NEIN, weil es effektiv SO arbeitet:
Delphi-Quellcode:
var
  Counter: Byte = 0;

procedure DrawDots (x, y: Integer; c: TCanvas); StdCall;
begin

Es wird ein BIT in jedem Durchlauf reihum durch das Byte geschoben ... ähnlich einem ROL (wegen dem IF =0)

Delphi-Quellcode:
var
  Counter: Byte = 0;

procedure DrawDots (x, y: Integer; c: TCanvas); StdCall;
begin
  counter := counter shl 1;

  if counter = 0 then counter := 1;

  case counter of
    1, 2, 4, 8 : C.pixels[x,y] := clWhite;
  else
    C.pixels[x, y] := clBlack;
  end;
end;
Delphi-Quellcode:
var
  Counter: Byte = $1;

procedure DrawDots (x, y: Integer; c: TCanvas); StdCall;
begin
  case counter of
    1, 2, 4, 8 : C.pixels[x,y] := clWhite;
  else
    C.pixels[x, y] := clBlack;
  end;

  counter := counter rol 1;
end;
Delphi-Quellcode:
var
  Counter: Byte = 0; // oder Integer oder egal (weil alles durch 8 teilbar)

procedure DrawDots (x, y: Integer; c: TCanvas); StdCall;
begin
  Inc(Counter)
  if not Ord(Counter shr 2) of
    C.pixels[x,y] := clWhite;
  else
    C.pix

Zusammen mit dem CASE ergibt es
* es wird von 1 bis 8 gezählt (1 Byte = 8 Bits)
* und wenn es 1 bis 4 ist, wird es weiß

-> 4 Mal Weiß, 4 Mal Schwarz, 4 Mal Weiß, 4 Mal Schwarz usw.

(mein Beispiel oben zählt von 0 bis 7, weil es so einfacher zu berechnen ist, aber effektiv kommt es auf's Gleiche raus)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu ( 8. Nov 2022 um 17:01 Uhr)
  Mit Zitat antworten Zitat