Forum Delphi.cz

Delphi => Obecné => Téma založeno: Jan Fiala 06-03-2021, 16:08:08

Název: HEX editor komponenta, která funguje pro 64b prostředí
Přispěvatel: Jan Fiala 06-03-2021, 16:08:08
Zdravím
Zatím používám pro HEX editor starou komponentu MPHexEditor. Pro 32b prostředí je v pořádku, v 64b prostředí jsou problémy, protože se obsah adresuje přes pointry. Snažím se s tím bojovat ale je tam toho na opravování spousta.
Pokud vy někdo věděl o nějaké komponentě, která by byla použitelná, byl bych vděčný.
Název: Re:HEX editor komponenta, která funguje pro 64b prostředí
Přispěvatel: Radek Červinka 06-03-2021, 16:30:18
Napada mne z CnPacku - https://github.com/cnpack/cnvcl/blob/master/Source/Graphics/CnHexEditor.pas (https://github.com/cnpack/cnvcl/blob/master/Source/Graphics/CnHexEditor.pas)
Název: Re:HEX editor komponenta, která funguje pro 64b prostředí
Přispěvatel: Jan Fiala 06-03-2021, 17:01:28
Díky, podívám se, co to umí.
Název: Re:HEX editor komponenta, která funguje pro 64b prostředí
Přispěvatel: Jan Fiala 06-03-2021, 19:29:32
Tak jsem se koukal a ve srovnáni s MPHexEditorem je to hodně chudý bezdomovec  :-( Musel bych tam polovinu funkčnosti dopsat.

Docela dost práce dalo vlastní překompilování CNVCL - problémy s typy - string vs Widestring vs vlastní typ... Tohle asi hodně dlouho nikdo nekompiloval.
Název: Re:HEX editor komponenta, která funguje pro 64b prostředí
Přispěvatel: Radek Červinka 06-03-2021, 23:50:50
Dival jsem se a v jednom nasem 64bit projektu se pouziva verze MPHexEditoru z https://launchpad.net/dcr/+milestone/dcr-public-2011-10 ale nevim zda to jeste neni nejak pozdeji upraveno. Jinak nevim.
Název: Re:HEX editor komponenta, která funguje pro 64b prostředí
Přispěvatel: Jan Fiala 07-03-2021, 17:14:01
dcrHexEditor mám a koukám, že ten samý. Dokonce to mám pomocí podmíněné kompilace udělané, že zkompiluju dcrHexEditor nebo MPHexEditor.

Jediný rozdíl mezi tím, co mám a co je v tom odkazu je, ze tam není kód podmíněný pro x64, ale je to tam rovnou. Zkusím to a uvidím.
Název: Re:HEX editor komponenta, která funguje pro 64b prostředí
Přispěvatel: Jan Fiala 07-03-2021, 20:47:22
Tak jsem se dostal k testovani. Ta verze, na kterou jsi daval odkaz ani nemohla jit prelozit. Je tam pouzity ASM a to 64b překladač nezkousne.
Verze, kterou jsem měl už to měla ošetřeno pomocí direktiv a pro 64b překladač to bylo nahrazeno standardním Pascalem.
Ale zase tam byly problémy s UNDO/REDO buffery při hromadném nahrazování.
Takže mám teď 2 možnosti - buď se mi podaří přepsat práci s interním úložištěm MPHexEditu a jeho adresováním s 64b překladačem nebo opravit dcrHexEditor.
Název: Re:HEX editor komponenta, která funguje pro 64b prostředí
Přispěvatel: Jan Fiala 08-03-2021, 18:34:33
Díky Radku Červinkovi a Michalu Mutlovi byl odhalen problém.

V obou komponentách, které vychází ze stejného základu je třeba opravit následující:

Kód: Delphi [Vybrat]
  1. function TMPHMemoryStream.GetAddress(const Index, Count: integer): PByte;
  2. begin
  3.   if (Index < 0) or ((Index+Count) > Size) then
  4.     raise EMPHexEditor.Create(ERR_DATA_BOUNDS);
  5.   Result := Pointer(NativeInt(Memory)+NativeInt(Index));
  6. end;

Podstatný je řádek:
Kód: Delphi [Vybrat]
  1. Pointer(NativeInt(Memory)+NativeInt(Index));

Pak už se chová komponenta bez dalších potřebných změn slušně i po překompilace v 64b