📄 formaddresschangeunit.pas
字号:
with pointerinfo[length(pointerinfo)-1].address do
begin
top:=110;
left:=92;
width:=105;
onkeypress:=editAddress.onkeypress;
parent:=self;
end;
pointerinfo[length(pointerinfo)-1].offsettext:=Tlabel.create(self);
with pointerinfo[length(pointerinfo)-1].offsettext do
begin
top:=112;
left:=212;
caption:='Offset (Hex)';
parent:=self;
end;
pointerinfo[length(pointerinfo)-1].offset:=TEdit.create(self);
with pointerinfo[length(pointerinfo)-1].offset do
begin
top:=110;
left:=275;
width:=70;
text:='0';
hint:='Fill in the nr. of bytes after the location the pointer points to';
showhint:=true;
onkeypress:=offsetKeyPress;
parent:=self;
end;
pointerinfo[length(pointerinfo)-1].ValueAtAddressText:=TLabel.Create(self);
with pointerinfo[length(pointerinfo)-1].ValueAtAddressText do
begin
top:=96;
left:=4;
// width:=57;
caption:='This pointer points to address ????????.';// The offset you chose brings it to ????????';
showhint:=true;
onkeypress:=offsetKeyPress;
parent:=self;
end;
pointerinfo[length(pointerinfo)-1].FinalDestination:=TLabel.Create(self);
with pointerinfo[length(pointerinfo)-1].FinalDestination do
begin
top:=96;
left:=212;
// width:=57;
caption:='The offset you chose brings it to ????????';
showhint:=true;
onkeypress:=offsetKeyPress;
parent:=self;
end;
height:=height+66;
end
else
begin
if mainform.memrec[index].VarType=5 then
begin
bitpanel.Visible:=true;
width:=288;
end else width:=158;
height:=134;
editaddress.enabled:=true;
button3.visible:=false;
button4.visible:=false;
for i:=0 to length(PointerInfo)-1 do
begin
pointerinfo[i].addresstext.free;
pointerinfo[i].address.Free;
pointerinfo[i].offsettext.Free;
pointerinfo[i].offset.Free;
end;
setlength(pointerinfo,0);
end;
end;
procedure TformAddressChange.Button4Click(Sender: TObject);
begin
if length(pointerinfo)=1 then cbPointer.checked:=false
else
begin
pointerinfo[length(pointerinfo)-1].addresstext.free;
pointerinfo[length(pointerinfo)-1].address.free;
pointerinfo[length(pointerinfo)-1].offsettext.free;
pointerinfo[length(pointerinfo)-1].offset.free;
pointerinfo[length(pointerinfo)-2].address.enabled:=true;
pointerinfo[length(pointerinfo)-2].address.text:='';
setlength(pointerinfo,length(pointerinfo)-1);
height:=height-25;
end;
end;
procedure TformAddressChange.Button3Click(Sender: TObject);
begin
pointerinfo[length(pointerinfo)-1].address.text:='result of next pointer';
pointerinfo[length(pointerinfo)-1].address.enabled:=false;
setlength(pointerinfo,length(pointerinfo)+1);
pointerinfo[length(pointerinfo)-1].addresstext:=Tlabel.Create(self);
with pointerinfo[length(pointerinfo)-1].addresstext do
begin
top:=pointerinfo[length(pointerinfo)-2].addresstext.top+36;
left:=4;
caption:='Address of pointer';
parent:=self;
end;
pointerinfo[length(pointerinfo)-1].address:=TEdit.create(self);
with pointerinfo[length(pointerinfo)-1].address do
begin
top:=pointerinfo[length(pointerinfo)-2].address.top+36;
left:=92;
width:=105;
onkeypress:=editAddress.onkeypress;
parent:=self;
end;
pointerinfo[length(pointerinfo)-1].offsettext:=Tlabel.create(self);
with pointerinfo[length(pointerinfo)-1].offsettext do
begin
top:=pointerinfo[length(pointerinfo)-2].offsettext.top+36;
left:=212;
caption:='Offset (Hex)';
parent:=self;
end;
pointerinfo[length(pointerinfo)-1].offset:=TEdit.create(self);
with pointerinfo[length(pointerinfo)-1].offset do
begin
top:=pointerinfo[length(pointerinfo)-2].offset.top+36;
left:=275;
width:=70;
text:='0';
hint:='Fill in the nr. of bytes after the location the pointer points to';
showhint:=true;
onkeypress:=offsetKeyPress;
parent:=self;
end;
pointerinfo[length(pointerinfo)-1].ValueAtAddressText:=TLabel.Create(self);
with pointerinfo[length(pointerinfo)-1].ValueAtAddressText do
begin
top:=pointerinfo[length(pointerinfo)-2].ValueAtAddressText.top+36;
left:=4;
caption:='This pointer points to address ????????.';// The offset you chose brings it to ????????';
showhint:=true;
onkeypress:=offsetKeyPress;
parent:=self;
end;
pointerinfo[length(pointerinfo)-1].FinalDestination:=TLabel.Create(self);
with pointerinfo[length(pointerinfo)-1].FinalDestination do
begin
top:=pointerinfo[length(pointerinfo)-2].FinalDestination.top+36;
left:=212;
caption:='The offset you chose brings it to ????????';
showhint:=true;
onkeypress:=offsetKeyPress;
parent:=self;
end;
height:=height+36;
end;
procedure TformAddressChange.Button1Click(Sender: TObject);
var bit: integer;
address: dword;
err:integer;
paddress: dword;
offsets: array of integer;
i: integer;
begin
if RadioButton1.checked then bit:=0 else
if RadioButton2.checked then bit:=1 else
if RadioButton3.checked then Bit:=2 else
if RadioButton4.checked then Bit:=3 else
if RadioButton5.checked then Bit:=4 else
if RadioButton6.checked then Bit:=5 else
if RadioButton7.checked then Bit:=6 else
Bit:=7;
if cbpointer.Checked then
begin
address:=0;
paddress:=symhandler.getaddressfromname(pointerinfo[length(pointerinfo)-1].address.text);
end
else
begin
paddress:=0;
addresS:=symhandler.getaddressfromname(editaddress.text);
end;
setlength(offsets,length(pointerinfo));
for i:=0 to length(pointerinfo)-1 do
begin
if length(pointerinfo[i].offset.Text)>0 then
begin
if pointerinfo[i].offset.Text[1]='-' then
val('-$'+copy(pointerinfo[i].offset.Text,2,length(pointerinfo[i].offset.Text)-1),offsets[i],err)
else
val('$'+pointerinfo[i].offset.Text,offsets[i],err);
if error<>0 then raise exception.Create(pointerinfo[i].offset.Text+' is not a valid offset');
end else raise exception.Create('Not all offsets have been filled in');
end;
mainform.memrec[index].Address:=address;
mainform.memrec[index].Bit:=bit;
setlength(mainform.memrec[index].pointers,length(offsets));
for i:=0 to length(offsets)-1 do
begin
mainform.memrec[index].pointers[i].Address:=paddress;
mainform.memrec[index].pointers[i].offset:=offsets[i];
end;
mainform.memrec[index].IsPointer:=cbpointer.Checked;
mainform.memrec[index].Frozen:=false;
if mainform.memrec[index].ispointer then
mainform.memrec[index].pointers[length(mainform.memrec[index].pointers)-1].Interpretableaddress:=pointerinfo[length(pointerinfo)-1].address.text
else
mainform.memrec[index].interpretableaddress:=editaddress.text;
modalresult:=mrok;
end;
procedure TformAddressChange.editAddressKeyPress(Sender: TObject;
var Key: Char);
begin
hexadecimal(key);
if cbpointer.Checked then timer1.Interval:=1;
end;
procedure TformAddressChange.Timer1Timer(Sender: TObject);
begin
timer1.Interval:=1000;
if visible and cbpointer.checked then
processaddress;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -