Autor Téma: HEX editor komponenta, která funguje pro 64b prostředí  (Přečteno 400 krát)

Offline Jan Fiala

  • Plnoletý
  • ***
  • Příspěvků: 179
  • Karma: 2
    • Verze Delphi: 10.4.1
    • PSPad editor
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ý.

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 2867
  • Karma: 106
    • Verze Delphi: D2007, DXE + 2 poslední
    • O Delphi v češtině
Embarcadero MVP - Czech republic

Offline Jan Fiala

  • Plnoletý
  • ***
  • Příspěvků: 179
  • Karma: 2
    • Verze Delphi: 10.4.1
    • PSPad editor
Re:HEX editor komponenta, která funguje pro 64b prostředí
« Odpověď #2 kdy: 06-03-2021, 17:01:28 »
Díky, podívám se, co to umí.

Offline Jan Fiala

  • Plnoletý
  • ***
  • Příspěvků: 179
  • Karma: 2
    • Verze Delphi: 10.4.1
    • PSPad editor
Re:HEX editor komponenta, která funguje pro 64b prostředí
« Odpověď #3 kdy: 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.

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 2867
  • Karma: 106
    • Verze Delphi: D2007, DXE + 2 poslední
    • O Delphi v češtině
Re:HEX editor komponenta, která funguje pro 64b prostředí
« Odpověď #4 kdy: 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.
Embarcadero MVP - Czech republic

Offline Jan Fiala

  • Plnoletý
  • ***
  • Příspěvků: 179
  • Karma: 2
    • Verze Delphi: 10.4.1
    • PSPad editor
Re:HEX editor komponenta, která funguje pro 64b prostředí
« Odpověď #5 kdy: 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.
« Poslední změna: 07-03-2021, 17:17:05 od Jan Fiala »

Offline Jan Fiala

  • Plnoletý
  • ***
  • Příspěvků: 179
  • Karma: 2
    • Verze Delphi: 10.4.1
    • PSPad editor
Re:HEX editor komponenta, která funguje pro 64b prostředí
« Odpověď #6 kdy: 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.

Offline Jan Fiala

  • Plnoletý
  • ***
  • Příspěvků: 179
  • Karma: 2
    • Verze Delphi: 10.4.1
    • PSPad editor
Re:HEX editor komponenta, která funguje pro 64b prostředí
« Odpověď #7 kdy: 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