Rein theoretisch kann man das auch einfach rauspatchen, dass der ShortHint auf diese Weise ermittelt wird. Allerdings ist das dann sehr spezifisch und bei einer neuen Delphiversion muss man das ggf. ändern...
Deshalb würde ich es nicht empfehlen.
So funktioniert es jedenfalls mit XE... (den LongHint entsprechend zu ändern überlasse ich dem geneigten Leser, wie es geht sieht man ja.
)
Trennzeichen ganz rauspatchen:
Delphi-Quellcode:
const
cNewValue: Word = $DB31; // xor ebx, ebx
var
Dummy: Cardinal;
begin
if PWord(PByte(@GetShortHint) + 21)^ = $DB85 then // test ebx, ebx
WriteProcessMemory(GetCurrentProcess, PByte(@GetShortHint) + 21, @cNewValue, SizeOf(cNewValue), Dummy);
Anderes Zeichen als Trennzeichen setzen:
Delphi-Quellcode:
const
cNewChar: Char = 'ä';
var
Dummy: Cardinal;
begin
if PWord(PInteger(PByte(@GetShortHint) +10)^)^ = Ord('|') then
WriteProcessMemory(GetCurrentProcess, PWord(PInteger(PByte(@GetShortHint) +10)^), @cNewChar, SizeOf(cNewChar), Dummy);