Forum: Win32/Win64 API (native code)
by himitsu,
8. Nov 2022
NEIN, weil es effektiv SO arbeitet:
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)
Forum: Win32/Win64 API (native code)
by himitsu,
8. Nov 2022
Das CONST mit {$J+} könnte man als "private globale Inlinevariable" betrachten.
https://docwiki.embarcadero.com/RADStudio/Sydney/en/Writeable_typed_constants_(Delphi)
Vom besseren "Verständnis" her, würde ich aber vom {$J+} bzw. {$WRITEABLECONST ON} abraten.
-> also stattdessen eine "richtige" globale Variable, bzw. als Private in eine Klasse, oder Dergleichen.
Aber wenn doch, wäre es...
Forum: Win32/Win64 API (native code)
by himitsu,
8. Nov 2022
Ja, das perverse da dran ist {$J+}.
-> schreibbare Konstanten ... sowas wie eine globale Variable
typisierte Konstanten sind eigentlich schreibgeschützte Variablen, nur dass der Compiler den Schreibzugriff normalerweise verbietet ... außer man schaltet es ab.
aber mathematisch dürfte ein
{global} var
counter: Byte = 0;
begin
Forum: Win32/Win64 API (native code)
by himitsu,
6. Nov 2022
Das hat nicht direkt mit ASLR zu tun.
OK, indirekt schon, weil Speicher/Pointer normal vorwiegend unten liegen, aber nun auch über alle Adressen besser verteilt sind.
Object/Pointer zu LongInt casten?
Rate mal, was da aus dem 64 Bit-Zeiger wird, wenn du ihn in 32 Bit rein quetschst.
NativeInt