Форум: "Основная";
Текущий архив: 2003.03.20;
Скачать: [xml.tar.bz2];
Внизпросмотр и редактирование HEX дампа памяти Найти похожие ветки
← →
Dmitriy_R (2003-02-26 06:21) [0]Как и при помощи чего лучше и проще просматривать и редактировать HEX дамп памяти. Тоесть типо как в фаре при просмотре по F3 клавишей F4 можно смотреть и текст и код.
Надо все это сделать у себя в программе.
← →
Dmitriy_R (2003-02-28 07:34) [1]Ну неужели некто не подскажет? Надо мне в прогу затолкать этот редактор...
← →
Anatoly Podgoretsky (2003-02-28 08:08) [2]ShellExecute
← →
Dmitriy_R (2003-03-04 13:00) [3]А если мне надо в своей программе сделать такой редактор?
← →
Anatoly Podgoretsky (2003-03-04 13:05) [4]StringList
← →
Dmitriy_R (2003-03-06 13:16) [5]Так ничего не получается. Ну попытаюсь объяснить по другому.
Пишу программу для программатора, мне надо встроить в нее Hex редактор, чтобы в нем все выглядело примерно вот так:
0000: 00 01 02 03 04 .....0D 0E 0F !@#$%^&*()_
0010: 00 01 02 03 04 .....0D 0E 0F !@#$%^&*()_
но как реализовать и с помощью чего не знаю.
Может кто подскажет или примеры есть чего нибудь подобного.
← →
han_malign (2003-03-06 13:24) [6]WinHex - редактирует - все что угодно, от памяти Kernel32 до Boot record...
← →
Anatoly Podgoretsky (2003-03-06 13:25) [7]StringGrid 18 колонок, вместо StringGrid можно любой другой Grid
← →
Игорь Шевченко (2003-03-06 13:38) [8]
unit SmDataInspector;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Grids, Buttons, StdCtrls, ExtCtrls;
type
TSmDumpMode = (sdByte, sdWord, sdLong);
TfrmDataInspector = class(TForm)
Panel1: TPanel;
emAddress: TEdit;
Label1: TLabel;
SpeedButton1: TSpeedButton;
gr: TStringGrid;
Label2: TLabel;
emSize: TEdit;
SpeedButton2: TSpeedButton;
SpeedButton3: TSpeedButton;
SpeedButton4: TSpeedButton;
procedure SpeedButton1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure SpeedButton2Click(Sender: TObject);
procedure SpeedButton3Click(Sender: TObject);
procedure SpeedButton4Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
FSmDumpMode: TSmDumpMode;
procedure RebuildView();
procedure SetSmDumpMode(const Value: TSmDumpMode);
public
property SmDumpMode : TSmDumpMode read FSmDumpMode write SetSmDumpMode;
end;
var
frmDataInspector: TfrmDataInspector;
implementation
uses
SmDef, Segment, SmUtils;
{$R *.DFM}
procedure TfrmDataInspector.RebuildView;
var ASeg : Integer;
AOfs : LongInt;
ASize : LongInt;
S : TSegment;
S1, S2 : String;
A1, A2 : String[8];
I : LongInt;
Loops{, Rem }: LongInt;
Loc : LongInt;
procedure printPart (Part : Integer);
var S0 : String;
A : String[8];
J : Integer;
C : Byte;
begin
S0 := "";
A := "........";
case SmDumpMode of
sdByte:
for J:=0 to 7 do
if (Part = 1) then
S0 := S0 + Format("%.2x ", [S.GetB(Loc+J)])
else
S0 := S0 + Format("%.2x ", [S.GetB(Loc+J+8)]);
sdWord:
for J:=0 to 3 do
if (Part = 1) then
S0 := S0 + Format("%.4x ", [S.GetW(Loc+J*2)])
else
S0 := S0 + Format("%.4x ", [S.GetW(Loc+8+J*2)]);
sdLong:
for J:=0 to 1 do
if (Part = 1) then
S0 := S0 + Format("%.8x ", [S.GetL(Loc+J*4)])
else
S0 := S0 + Format("%.8x ", [S.GetL(Loc+8+J*4)]);
end;
for J:=0 to 7 do begin
if (Part = 1) then
C := S.at[Loc+J]
else
C := S.at[Loc+J+8];
if (C >= 32) AND (C <= 126) then
A[J+1] := Char(C);
end;
if (Part = 1) then begin
S1 := S0;
A1 := A;
end else begin
S2 := S0;
A2 := A;
end;
end;
begin
if NOT ParseAddress(emAddress.Text, ASeg, AOfs) then begin
ShowMessageFmt("Illegal address: %s",[emAddress.Text]);
Exit;
end;
ASize := StrToIntDef(emSize.Text, 0);
if ASize = 0 then begin
ShowMessageFmt("Illegal size: %s",[emSize.Text]);
Exit;
end;
S := SegTab[ASeg-1];
{V1.0-002}
if NOT S.Probe(AOfs) then begin
ShowMessageFmt("Start address %.8x out of segment %.2x: %s",[AOfs, ASeg, emAddress.Text]);
Exit;
end;
if NOT S.Probe(AOfs+ASize-1) then begin
ShowMessageFmt("End address %.8x out of segment %.2x: %s",[AOfs+ASize, ASeg, emAddress.Text]);
Exit;
end;
{/V1.0-002}
Loops := ASize DIV 16;
if (ASize MOD 16) = 0 then
Inc(Loops);
gr.RowCount := Loops + 1;
gr.Cells[0,0] := "Loc";
gr.Cells[1,0] := "Data";
gr.Cells[2,0] := "Text";
for I:=0 to Pred(Loops) do begin
Loc := AOfs + (I SHL 4);
PrintPart(1);
PrintPart(2);
gr.Cells[0,I+1] := MakeAddress(ASeg, Loc);
gr.Cells[1,I+1] := Format("%s %s", [S1,S2]);
gr.Cells[2,I+1] := Format("%s %s", [A1,A2]);
end;
end;
procedure TfrmDataInspector.SetSmDumpMode(const Value: TSmDumpMode);
begin
if (FSmDumpMode <> Value) then begin
FSmDumpMode := Value;
RebuildView();
end;
end;
procedure TfrmDataInspector.SpeedButton1Click(Sender: TObject);
begin
RebuildView();
end;
procedure TfrmDataInspector.FormCreate(Sender: TObject);
begin
FSmDumpMode := sdByte;
end;
procedure TfrmDataInspector.SpeedButton2Click(Sender: TObject);
begin
SmDumpMode := sdByte;
end;
procedure TfrmDataInspector.SpeedButton3Click(Sender: TObject);
begin
SmDumpMode := sdWord;
end;
procedure TfrmDataInspector.SpeedButton4Click(Sender: TObject);
begin
SmDumpMode := sdLong;
end;
procedure TfrmDataInspector.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
Action := caFree;
end;
end.
← →
Dmitriy_R (2003-03-07 06:26) [9]Спасибо Игорь Шевченко, на исходнике разобратся легче. За исключением одного в строках:
uses
SmDef, Segment, SmUtils;
у меня ошибка, либо я что то не положил либо .....
поясни пожалуйста.
← →
sevylor (2003-03-11 05:41) [10]Есть компонент HEXGRID автор Александр Елисеев, брал здесь:
http://www.telesys.ru/projects/proj014/index.shtml
Проект программатора для Amtel & PIC, на Delphi 5.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.03.20;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c