add a deviate option for pointers must end with offset. (Handy for fixing pointers after an update)
This commit is contained in:
parent
2e1107b7a2
commit
a75bb09eb3
@ -12,7 +12,7 @@ object frmPointerScannerSettings: TfrmPointerScannerSettings
|
||||
OnDestroy = FormDestroy
|
||||
OnShow = FormShow
|
||||
Position = poScreenCenter
|
||||
LCLVersion = '2.0.6.0'
|
||||
LCLVersion = '2.2.2.0'
|
||||
object cbValueType: TComboBox
|
||||
AnchorSideLeft.Control = cbAddress
|
||||
AnchorSideLeft.Side = asrBottom
|
||||
@ -831,11 +831,11 @@ object frmPointerScannerSettings: TfrmPointerScannerSettings
|
||||
Left = 0
|
||||
Height = 48
|
||||
Top = 44
|
||||
Width = 214
|
||||
Width = 216
|
||||
AutoSize = True
|
||||
BevelOuter = bvNone
|
||||
ClientHeight = 48
|
||||
ClientWidth = 214
|
||||
ClientWidth = 216
|
||||
TabOrder = 4
|
||||
Visible = False
|
||||
object edtBaseFrom: TEdit
|
||||
@ -844,11 +844,12 @@ object frmPointerScannerSettings: TfrmPointerScannerSettings
|
||||
AnchorSideTop.Control = Panel12
|
||||
AnchorSideRight.Control = Panel12
|
||||
AnchorSideRight.Side = asrBottom
|
||||
Left = 28
|
||||
Left = 30
|
||||
Height = 23
|
||||
Top = 0
|
||||
Width = 186
|
||||
Anchors = [akTop, akRight]
|
||||
BorderSpacing.Left = 2
|
||||
TabOrder = 0
|
||||
end
|
||||
object Label2: TLabel
|
||||
@ -882,11 +883,12 @@ object frmPointerScannerSettings: TfrmPointerScannerSettings
|
||||
AnchorSideTop.Side = asrBottom
|
||||
AnchorSideRight.Control = Panel12
|
||||
AnchorSideRight.Side = asrBottom
|
||||
Left = 28
|
||||
Left = 30
|
||||
Height = 23
|
||||
Top = 25
|
||||
Width = 186
|
||||
Anchors = [akTop, akRight]
|
||||
BorderSpacing.Left = 2
|
||||
BorderSpacing.Top = 2
|
||||
TabOrder = 1
|
||||
end
|
||||
@ -1005,71 +1007,44 @@ object frmPointerScannerSettings: TfrmPointerScannerSettings
|
||||
Left = 720
|
||||
Top = 232
|
||||
Bitmap = {
|
||||
4C69020000001000000010000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF006360
|
||||
F80AFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF007774FF1F7774
|
||||
FF2BFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00625FF82B5D5B
|
||||
F76F5956F53EFFFFFF00FFFFFF00FFFFFF00FFFFFF007774FF1F7A77FFFF7976
|
||||
FEFF726FFD2BFFFFFF00FFFFFF00FFFFFF00FFFFFF00615EF82B6461F8FF6A68
|
||||
F9FF5451F3A84F4DF229FFFFFF00FFFFFF007774FF1F7A77FFFF817EFFFF817E
|
||||
FEFF7471FDFF6C69FB2BFFFFFF00FFFFFF00605DF72B625FF8FF6F6DFBFF7E7C
|
||||
FFFF625FF8FF4A47F06F4542EE02FFFFFF007673FF087471FEFD7D7AFEFF8A87
|
||||
FFFF7C79FDFF6C69FBFF6361F92B5F5CF72B615EF8FF6E6CFAFF7D7AFFFF615F
|
||||
F7FF4946F0FC4441EE05FFFFFF00FFFFFF00FFFFFF00716EFD086E6BFCFC7774
|
||||
FDFF8682FFFF7673FCFF6462F8FF605DF7FF6D6AFAFF7B79FFFF605DF7FF4845
|
||||
EFFC4341EE08FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF006967FB086663
|
||||
F9FC706DFBFF807EFFFF7E7BFFFF7C79FFFF7977FFFF5E5CF7FF4744EFFC4240
|
||||
EE08FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00615E
|
||||
F8085D5AF6FD7D79FFFF5E5BFFFF5B58FFFF7674FFFF4643EFFD413FED08FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF005C59
|
||||
F62B5D5BF7FF7976FFFF5956FFFF5754FFFF7270FFFF4846F0FF3C39EB2BFFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF005B58F62B5C5A
|
||||
F6FF6764FAFF7472FFFF7370FFFF706EFFFF6E6CFFFF5755F7FF3F3DEEFF3230
|
||||
E82BFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF005A57F52B5B59F6FF6663
|
||||
FAFF7471FFFF5A58F6FF4341EEFC3E3CECFD504DF4FF6867FFFF504EF5FF3634
|
||||
EBFF2A27E52BFFFFFF00FFFFFF00FFFFFF005956F52B5B58F6FF6562FAFF7170
|
||||
FFFF5956F6FF4240EEFC3E3BEC083937EB083532E9FC4745F2FF6362FFFF4A48
|
||||
F4FF2F2DE9FF2220E32BFFFFFF00FFFFFF005451F3415856F5FF6361FAFF5855
|
||||
F6FF413FEDFC3D3AEC08FFFFFF00FFFFFF00302DE7082C2AE6FC413FF1FF4C4A
|
||||
F6FF312FEAFF1F1DE241FFFFFF00FFFFFF00FFFFFF004A47F0414F4CF2FF403E
|
||||
EDFD3C39EB08FFFFFF00FFFFFF00FFFFFF00FFFFFF002725E5082422E4FC312F
|
||||
EAFF1F1DE241FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF003F3DED413B38
|
||||
EB08FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00211FE3081E1C
|
||||
E241FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00EAC39DFFE6BF96FFE4BB92FFE4BB92FFD1A06CF5D09E6DF6CC96
|
||||
5FDAC479427EB2673C09FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00E5BE96FFFFFFFEFFFDF3E9FFFDF3EAFFFCF2E8FFFAEFE3FFFAF2
|
||||
E7FFEABB88FFCF8555B3B4693D0CFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00E4BB93FFFEF5EDFFFCDEC5FFFBE0C7FFF9DCC2FFF5D3B4FFFEF9
|
||||
F3FFFAE2C4FFECC193FFC37D4893FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00E4BB92FFFEF6F0FFFCE2CDFFFCE3CDFFFADFC8FFF7D9BCFFF5E9
|
||||
DDFFFAF3EBFFFBF8F3FFCA8353FEFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00E4BB92FFFEF7F1FFFCE5D2FFFCE4D1FFFBE2CCFFF9DDC4FFF6D7
|
||||
BBFFF3D1AFFFFAEFE4FFCC8758FE34B4D9D05EC2E1FA60C3E2FA60C3E2FA60C3
|
||||
E2FA5FC3E2FAE4BB91FFFFF7F2FFFEE7D5FFFEE7D5FFFDE5D1FFFAE0CAFFF9DE
|
||||
C4FFF7D9BCFFFDF2E7FFCC8757FE36B3DAF8FDFEFEFFFEFFFFFFFEFEFFFFFDFE
|
||||
FFFFFEFFFFFFE4BA91FFFFF7F0FFFFE7D5FFFDE7D6FFFDE6D4FFFCE4D0FFFBE3
|
||||
CBFFFADCC2FFFEF3E8FFCC8656FE35AFDAF0F7FCFEFF8EE4F8FF91DEF5FF9FE0
|
||||
F5FFACE1F6FFCA8452FFFFF7F1FFFFE9D9FFFFEADBFFFFE9D9FFFFE7D7FFFFE5
|
||||
D2FFFFE2CBFFFFF7F1FFCB8555FE36AADAF2F1FAFDFF94DEF5FF93DCF4FF64BC
|
||||
E9FF3594DAFF3594DAFF3594DAFF3594DAFF3594DAFF3594DAFF3594DAFF3594
|
||||
DAFF3594DAFFFBF6EFFFCC8355FE35ABDAFAE8F6FBFF70BCE7FF55AAE2FF4DA5
|
||||
E0FF91C9EBFFFAF3EFFFFDFEFDFFFFFDFCFFFFFDFCFFFEFDFCFFFEFCFBFFFEFE
|
||||
FDFF3594DAFFEFF2E8FFCE8156FF37A6DAFAFEFFFFFFF8FDFFFFF6FDFFFFF5FC
|
||||
FFFFF3FCFEFF9AE4F4FF9AE6F7FF9BE6F6FF9DE5F5FF9EE5F5FF9FE5F4FFDAF3
|
||||
F8FF3594DAFFFDF4EEFFCA8054F936A1DAF9F6FCFEFF94E5F8FF93E5F8FF93E5
|
||||
F8FF91E5F8FF93DBE9FF93D7E3FF93D2DCFF90CED7FF8CC8CFFF86C1C6FFC9D8
|
||||
D6FF3594DAFFC57444E8CA7F53F1369ADAF8F2FAFDFF94E6F8FF92E5F8FF90E5
|
||||
F8FF8BE3F8FF86E2F7FF7FE1F7FF77DEF6FF6CDCF6FF5ED9F4FF4FD5F3FFCCF2
|
||||
FBFF3594DAFFFFFFFF00FFFFFF003594DAF7EFFAFEFF93E5F8FF8FE4F8FF89E3
|
||||
F8FF82E1F7FF7ADFF7FF71DEF6FF67DBF5FF5BD8F4FF4DD4F3FF40D1F2FFCAF2
|
||||
FBFF3594DAFFFFFFFF00FFFFFF00338ED9FBDCF0FAFF98E1F6FF95E0F6FF92DF
|
||||
F6FF8EDEF5FF89DCF5FF85DAF4FF80D9F4FF7AD7F3FF74D5F3FF70D3F2FFC2EA
|
||||
F8FF3594DAFFFFFFFF00FFFFFF002C86D8002D88D8F72D87D8F72D88D8F72D88
|
||||
D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D87D8F72D88
|
||||
D8F72C86D800FFFFFF00FFFFFF00
|
||||
4C7A020000001000000010000000940400000000000078DAAD92EB6F936518C6
|
||||
89894935FE092A4A3444CA02221B223B95E3244C50E8E8D61DD8410638B6161A
|
||||
960D364EB20D35C856240603E8078D411312D92747348CA1500A6C9CB6953246
|
||||
8F6BBBAD5DDBF7D0F77479BF15160E1DC4C40F579E27799EDF7DB8EE1BC034FC
|
||||
07556EE05F9EEAADDE82E924ED54EF1565BCB6C4C8D5151630D9A9D8C67AA061
|
||||
87826D75F25331CA4B796D55398F2D9B1258F771ECE7D5F9D1779E64F736AB52
|
||||
6031CBA8D92C4EC6D850C2692937EAB68A68DE05A8F7952B2275CB168FBFA0BE
|
||||
EFD80E8DC5ACC84D8D0ABE680576352479549627B465C59C9672A3B646405323
|
||||
505EC6E1C3E51169A96EFCC547EB33D7CA9ADACF24A9DE22A3651FB063BB84AA
|
||||
0A1E941B5BB708D8D980E43D6F59585AA21BD7A4F26773B5A8D95899904C54E7
|
||||
1EEAA579A75A0B7942BD95167358B1342C2DCE4DCD3EE293A6A488959B882B35
|
||||
024603D56201962F09CBBA9C31CDF3E65B5CC8AA33A239008505C0FA75C03613
|
||||
90B73C82CC8521EDB358A381D51617B1A8AE1260D9066C27CE540BF28EE2E839
|
||||
E4648D63DEDC9194318AD6335A63218B8D95C49A8122030BF249CACE1C95D7E4
|
||||
C7B1A91A58F311838CF921CC9AE97D2C06ED939672E3D30A0166935A370BF249
|
||||
CA5E34AA59B820A4499F1790562C8BA2B202589917C79CB40066BCE19E8C41FB
|
||||
A4331430346F01063D0BF249CAFA6074D2ABB9697ECDEC593E49973381552B59
|
||||
BC3B2788E9AFB9748FD640FBA45BBD2A8ADCEC31997C7ACAE7996F7B356FCDF0
|
||||
48A9D887CAC91AD32D7A3F34E58CDE9CEED6BCFE6A6AF6FF56F0FC71F8FE3C0A
|
||||
4F5747527DDFD730BD27B6B2F6A3658E9E86C5CDBF5567BEF42CDEFBC7513A14
|
||||
C8B1002908293A0221EC8610F523D8D5866B07F4673A3767BD3215EFE9B24261
|
||||
C6200D5D8038FC3712CE6E30373AA12462105C3D183D67C5F9A63CEBD47C0714
|
||||
3602C9750592FB0A847B17C10D9E0513B80B211682C8C760DBBF567926CF4D40
|
||||
F25E87E4E983E8B22371B7076C7F17627DA7A9170FECAD06657EE7606F69F77D
|
||||
61C379D7A4CA489EAE76808B42F1DF4A4AF6F64118B62131D493AC43261FECAD
|
||||
EB958C330E5E5614A885D0015941F2EEF95DE52380CAFA6F43F6DDA43A7A21BA
|
||||
2F43202F94D808EC2D054AFA69478493141CF2F0681F62707298C1AFF759D83E
|
||||
FF84F80920300804EFFC7BFAFB01EA07AECBC9B7CB07F44AC629477442907184
|
||||
58AB338EAAB301A41F713C57221B867DBF5E49FFC5218CB0224C67FDD09F7221
|
||||
FFC761B45F0A91C761EA45A686A4A4145592483DCA493E4CFB70756F0116FCE4
|
||||
10D47E79FACA9218FA1EA37E8E79E238E6E3F09D8FC5712F8313A493DE381C31
|
||||
3EC9CBF171D8F6AC4B64FCE048B0F4FF889787F581DAD5F34E00D67E37ACD79D
|
||||
387CB51F5F5DBC8696737FE1D2C0ED247FC1B274C4B67BED44C631071F55FBF7
|
||||
F1E820EE30E94B378F161787DDF739D40FB1A871B2281D8C63F5AD18EC5131C9
|
||||
3FDC13BA7361EA40CDFB35CDE020B1FB886BBCC7C14C6CF51D06C68138F26FC6
|
||||
90DB1785ED09FEBD4383A23322E05B9AD937C32C3AEEB13844B338E86470C011
|
||||
C71ECADBD81F8385729B6E44D11DE41FE367B70C4C4B6B1BE0D25A496DCFD183
|
||||
3F2AF390FF072C5CDE8E
|
||||
}
|
||||
end
|
||||
object odLoadRegionFile: TOpenDialog
|
||||
|
@ -84,6 +84,7 @@ type TOffsetEntry=class(Tedit)
|
||||
procedure setOffset(x: dword);
|
||||
protected
|
||||
procedure KeyPress(var Key: Char); override;
|
||||
procedure SetParent(NewParent: TWinControl); override;
|
||||
public
|
||||
constructor create(AOwner: TComponent); override;
|
||||
published
|
||||
@ -222,9 +223,13 @@ type
|
||||
codescan: boolean;
|
||||
threadcount: integer;
|
||||
|
||||
maxOffsetDeviation: integer;
|
||||
|
||||
|
||||
baseAddressRange: TComponentList;
|
||||
|
||||
lblOffsetListMaxDeviation: TLabel;
|
||||
edtOffsetListMaxDeviation: tedit;
|
||||
offsetlist: TComponentList;
|
||||
btnAddOffset: TButton;
|
||||
btnRemoveOffset: TButton;
|
||||
@ -282,6 +287,9 @@ resourcestring
|
||||
rsLastOffset = 'Last offset';
|
||||
rsHasNotBeenGivenAValidAddress = '%s has not been given a valid address';
|
||||
rsLimitScanToSpecifiedRegionFile = 'Limit scan to specified region file';
|
||||
rsMaxDeviation = 'Max deviation';
|
||||
rsMaxDeviationExplentation = 'The maximum offset size by which the ending '
|
||||
+'offset can differ';
|
||||
|
||||
|
||||
//helper
|
||||
@ -498,6 +506,9 @@ begin
|
||||
|
||||
if assigned(fonsetfilename) then
|
||||
fonSetFileName(self);
|
||||
|
||||
if (cbAddress.Text='') and (cbAddress.items.count=1) then
|
||||
cbAddress.ItemIndex:=0;
|
||||
end;
|
||||
|
||||
|
||||
@ -684,6 +695,14 @@ begin
|
||||
key:=#0;
|
||||
end;
|
||||
|
||||
procedure TOffsetEntry.SetParent(NewParent: TWinControl);
|
||||
begin
|
||||
inherited SetParent(newparent);
|
||||
|
||||
if (newparent<>nil) and (newparent is TCustomControl) then
|
||||
Constraints.MinWidth:=TCustomControl(newparent).canvas.TextWidth(' XXX ');
|
||||
end;
|
||||
|
||||
function TOffsetEntry.getOffset: dword;
|
||||
var o: integer;
|
||||
begin
|
||||
@ -703,6 +722,9 @@ var
|
||||
comparecount: integer=0;
|
||||
reg: TRegistry=nil;
|
||||
begin
|
||||
if edtOffsetListMaxDeviation<>nil then
|
||||
maxOffsetDeviation:=strtoint('$'+edtOffsetListMaxDeviation.Text);
|
||||
|
||||
if cbMaxOffsetsPerNode.checked then
|
||||
begin
|
||||
maxOffsetsPerNode:=strtoint(edtMaxOffsetsPerNode.text);
|
||||
@ -979,6 +1001,33 @@ begin
|
||||
btnAddOffset.Width:=i;
|
||||
btnRemoveOffset.Width:=i;
|
||||
|
||||
lblOffsetListMaxDeviation:=TLabel.create(Self);
|
||||
lblOffsetListMaxDeviation.parent:=panel10;
|
||||
lblOffsetListMaxDeviation.Caption:=rsMaxDeviation;
|
||||
lblOffsetListMaxDeviation.AutoSize:=true;
|
||||
lblOffsetListMaxDeviation.AnchorSideLeft.Control:=cbMustEndWithSpecificOffset;
|
||||
lblOffsetListMaxDeviation.AnchorSideLeft.Side:=asrRight;
|
||||
lblOffsetListMaxDeviation.BorderSpacing.Left:=8;
|
||||
|
||||
|
||||
edtOffsetListMaxDeviation:=TEdit.Create(self);
|
||||
edtOffsetListMaxDeviation.parent:=panel10;
|
||||
edtOffsetListMaxDeviation.AnchorSideLeft.Control:=lblOffsetListMaxDeviation;
|
||||
edtOffsetListMaxDeviation.AnchorSideLeft.Side:=asrLeft;
|
||||
edtOffsetListMaxDeviation.AnchorSideTop.Control:=offsetentry;
|
||||
edtOffsetListMaxDeviation.AnchorSideTop.Side:=asrtop;
|
||||
edtOffsetListMaxDeviation.Text:='0';
|
||||
edtOffsetListMaxDeviation.Hint:=rsMaxDeviationExplentation;
|
||||
edtOffsetListMaxDeviation.ShowHint:=true;
|
||||
|
||||
edtOffsetListMaxDeviation.Constraints.MinWidth:=canvas.TextWidth(' xxx ');
|
||||
|
||||
lblOffsetListMaxDeviation.AnchorSideBottom.Control:=edtOffsetListMaxDeviation;
|
||||
lblOffsetListMaxDeviation.AnchorSideBottom.Side:=asrTop;
|
||||
|
||||
lblOffsetListMaxDeviation.Anchors:=[akLeft, akBottom];
|
||||
edtOffsetListMaxDeviation.Anchors:=[akTop, akLeft];
|
||||
|
||||
end
|
||||
else
|
||||
begin
|
||||
@ -988,6 +1037,12 @@ begin
|
||||
btnAddOffset.Visible:=false;
|
||||
btnRemoveOffset.Visible:=false;
|
||||
lblInfoLastOffset.Visible:=false;
|
||||
|
||||
if edtOffsetListMaxDeviation<>nil then
|
||||
edtOffsetListMaxDeviation.free;
|
||||
|
||||
if lblOffsetListMaxDeviation<>nil then
|
||||
lblOffsetListMaxDeviation.free;
|
||||
end;
|
||||
|
||||
updatepositions;
|
||||
@ -1046,6 +1101,9 @@ begin
|
||||
begin
|
||||
tstrings(cbAddress.tag).LoadFromFile(odLoadPointermap.FileName+'.addresslist');
|
||||
UpdateAddressList(cbAddress);
|
||||
|
||||
if (cbAddress.Text='') and (cbAddress.Items.Count=1) then
|
||||
cbAddress.ItemIndex:=0;
|
||||
end;
|
||||
|
||||
end
|
||||
|
@ -9,7 +9,7 @@ interface
|
||||
|
||||
uses
|
||||
{$ifdef windows}
|
||||
windows, Classes, SysUtils, Sockets, winsock, ssockets, NewKernelHandler;
|
||||
windows, Classes, SysUtils, Sockets, winsock, ssockets, NewKernelHandler, syncobjs2;
|
||||
{$endif}
|
||||
{$ifdef darwin}
|
||||
Classes, SysUtils, Sockets, ssockets, NewKernelHandler, ctypes, baseunix, macport;
|
||||
@ -155,7 +155,13 @@ var
|
||||
i: integer;
|
||||
t: TTimeVal;
|
||||
fdset: TFDSet;
|
||||
{$ifdef THREADNAMESUPPORT}
|
||||
tname: string;
|
||||
{$endif}
|
||||
begin
|
||||
{$ifdef THREADNAMESUPPORT}
|
||||
tname:=GetThreadName;
|
||||
{$endif}
|
||||
{$ifdef DEBUGPROTOCOL}
|
||||
timeout:=0; //just let me test in peace
|
||||
{$endif}
|
||||
@ -201,18 +207,18 @@ begin
|
||||
i:={$ifdef unix}fpselect{$else}select{$endif}(socket, nil, @fdset, nil, nil);
|
||||
|
||||
if i=0 then
|
||||
raise TSocketException.create(rsTimeoutWhileSendingData);
|
||||
raise TSocketException.create({$ifdef THREADNAMESUPPORT}'Thread '+tname+':'+{$endif}rsTimeoutWhileSendingData);
|
||||
|
||||
if i<0 then
|
||||
raise TSocketException.create(rsErrorWhileSendingData+inttostr(socketerror));
|
||||
raise TSocketException.create({$ifdef THREADNAMESUPPORT}'Thread '+tname+':'+{$endif}rsErrorWhileSendingData+inttostr(socketerror));
|
||||
|
||||
i:=0;
|
||||
end
|
||||
else
|
||||
raise TSocketException.Create(rsErrorWhileSendingData+inttostr(i));
|
||||
raise TSocketException.Create({$ifdef THREADNAMESUPPORT}'Thread '+tname+':'+{$endif}rsErrorWhileSendingData+inttostr(i));
|
||||
end
|
||||
else
|
||||
raise TSocketException.Create(rsDisconnectedWhileSendingData);
|
||||
raise TSocketException.Create({$ifdef THREADNAMESUPPORT}'Thread '+tname+':'+{$endif}rsDisconnectedWhileSendingData);
|
||||
end;
|
||||
|
||||
inc(result, i);
|
||||
@ -224,13 +230,20 @@ var
|
||||
i: integer;
|
||||
t: TTimeVal;
|
||||
fdset: TFDSet;
|
||||
{$ifdef THREADNAMESUPPORT}
|
||||
tname: string;
|
||||
{$endif}
|
||||
begin
|
||||
{$ifdef THREADNAMESUPPORT}
|
||||
tname:=GetThreadName;
|
||||
{$endif}
|
||||
|
||||
{$ifdef DEBUGPROTOCOL}
|
||||
timeout:=0;
|
||||
{$endif}
|
||||
|
||||
if debug_connectionfailure then
|
||||
raise TSocketException.Create(rsWhoopdeedoo);
|
||||
raise TSocketException.Create({$ifdef THREADNAMESUPPORT}'Thread '+tname+':'+{$endif}rsWhoopdeedoo);
|
||||
|
||||
result:=0;
|
||||
while (result<size) do
|
||||
@ -267,20 +280,22 @@ begin
|
||||
if i=0 then
|
||||
begin
|
||||
OutputDebugString('Timeout');
|
||||
raise TSocketException.create(rsTimeoutWhileReceivingData);
|
||||
raise TSocketException.create({$ifdef THREADNAMESUPPORT}'Thread '+tname+':'+{$endif}rsTimeoutWhileReceivingData);
|
||||
end;
|
||||
|
||||
if i<0 then
|
||||
raise TSocketException.create(rsErrorWhileReceivingData+inttostr(i));
|
||||
raise TSocketException.create({$ifdef THREADNAMESUPPORT}'Thread '+tname+':'+{$endif}rsErrorWhileReceivingData+inttostr(i));
|
||||
|
||||
i:=0;
|
||||
|
||||
end
|
||||
else
|
||||
raise TSocketException.Create(rsErrorWhileReceivingData+inttostr(i));
|
||||
begin
|
||||
raise TSocketException.Create({$ifdef THREADNAMESUPPORT}'Thread '+tname+':'+{$endif}rsErrorWhileReceivingData+inttostr(i));
|
||||
end;
|
||||
end
|
||||
else
|
||||
raise TSocketException.Create(rsDisconnectedWhileReceivingData);
|
||||
raise TSocketException.Create({$ifdef THREADNAMESUPPORT}'Thread '+tname+':'+{$endif}rsDisconnectedWhileReceivingData);
|
||||
end;
|
||||
|
||||
inc(result, i);
|
||||
|
@ -309,6 +309,7 @@ type
|
||||
|
||||
|
||||
mustEndWithSpecificOffset: boolean;
|
||||
mustEndWithSpecificOffsetMaxDeviation: dword;
|
||||
mustendwithoffsetlist: array of dword;
|
||||
onlyOneStaticInPath: boolean;
|
||||
noReadOnly: boolean;
|
||||
@ -551,7 +552,11 @@ begin
|
||||
|
||||
if fcontroller.compressedptr then
|
||||
begin
|
||||
EntrySize:=fcontroller.MaxBitCountModuleOffset+fcontroller.MaxBitCountModuleIndex+fcontroller.MaxBitCountLevel+fcontroller.MaxBitCountOffset*(fcontroller.maxlevel-length(fcontroller.mustendwithoffsetlist));
|
||||
if fcontroller.mustEndWithSpecificOffsetMaxDeviation=0 then
|
||||
EntrySize:=fcontroller.MaxBitCountModuleOffset+fcontroller.MaxBitCountModuleIndex+fcontroller.MaxBitCountLevel+fcontroller.MaxBitCountOffset*(fcontroller.maxlevel-length(fcontroller.mustendwithoffsetlist))
|
||||
else
|
||||
EntrySize:=fcontroller.MaxBitCountModuleOffset+fcontroller.MaxBitCountModuleIndex+fcontroller.MaxBitCountLevel+fcontroller.MaxBitCountOffset*(fcontroller.maxlevel);
|
||||
|
||||
EntrySize:=(EntrySize+7) div 8;
|
||||
end
|
||||
else
|
||||
@ -801,6 +806,7 @@ begin
|
||||
s.WriteQWord(BaseStop);
|
||||
s.WriteByte(ifthen(onlyOneStaticInPath,1,0));
|
||||
s.writebyte(ifthen(mustEndWithSpecificOffset,1,0));
|
||||
s.writeDword(mustEndWithSpecificOffsetMaxDeviation);
|
||||
s.writeWord(length(mustendwithoffsetlist));
|
||||
for i:=0 to length(mustendwithoffsetlist)-1 do
|
||||
s.WriteDWord(mustendwithoffsetlist[i]);
|
||||
@ -3505,7 +3511,11 @@ begin
|
||||
MaxBitCountModuleOffset:=32;
|
||||
|
||||
|
||||
MaxBitCountLevel:=getMaxBitCount(maxlevel-length(mustendwithoffsetlist) , false); //counted from 1. (if level=4 then value goes from 1,2,3,4) 0 means no offsets. This can happen in case of a pointerscan with specific end offsets, which do not get saved.
|
||||
if mustEndWithSpecificOffsetMaxDeviation=0 then
|
||||
MaxBitCountLevel:=getMaxBitCount(maxlevel-length(mustendwithoffsetlist) , false) //counted from 1. (if level=4 then value goes from 1,2,3,4) 0 means no offsets. This can happen in case of a pointerscan with specific end offsets, which do not get saved.
|
||||
else
|
||||
MaxBitCountLevel:=getMaxBitCount(maxlevel, false);
|
||||
|
||||
MaxBitCountOffset:=getMaxBitCount(sz, false);
|
||||
if unalligned=false then MaxBitCountOffset:=MaxBitCountOffset - 2;
|
||||
|
||||
@ -3599,6 +3609,7 @@ begin
|
||||
BaseStop:=ReadQword;
|
||||
onlyOneStaticInPath:=readByte=1;
|
||||
mustEndWithSpecificOffset:=readbyte=1;
|
||||
mustEndWithSpecificOffsetMaxDeviation:=ReadDWord;
|
||||
setlength(mustendwithoffsetlist, ReadWord);
|
||||
for i:=0 to length(mustendwithoffsetlist)-1 do
|
||||
mustendwithoffsetlist[i]:=ReadDWord;
|
||||
@ -4711,9 +4722,14 @@ begin
|
||||
result.writeByte(MaxBitCountLevel);
|
||||
result.writeByte(MaxBitCountOffset);
|
||||
|
||||
result.writeByte(length(mustendwithoffsetlist));
|
||||
for i:=0 to length(mustendwithoffsetlist)-1 do
|
||||
result.writeDword(mustendwithoffsetlist[i]);
|
||||
if mustEndWithSpecificOffsetMaxDeviation=0 then
|
||||
begin
|
||||
result.writeByte(length(mustendwithoffsetlist));
|
||||
for i:=0 to length(mustendwithoffsetlist)-1 do
|
||||
result.writeDword(mustendwithoffsetlist[i]);
|
||||
end
|
||||
else
|
||||
result.writeByte(0);
|
||||
end;
|
||||
|
||||
result.writebyte(ifthen(mustStartWithBase,1,0));
|
||||
@ -5198,6 +5214,7 @@ begin
|
||||
scanner.OutOfDiskSpace:=@outofdiskspace;
|
||||
|
||||
scanner.mustEndWithSpecificOffset:=mustEndWithSpecificOffset;
|
||||
scanner.mustEndWithSpecificOffsetMaxDeviation:=mustEndWithSpecificOffsetMaxDeviation;
|
||||
scanner.mustendwithoffsetlist:=mustendwithoffsetlist;
|
||||
scanner.useHeapData:=useHeapData;
|
||||
scanner.useOnlyHeapData:=useHeapData;
|
||||
@ -5338,6 +5355,7 @@ LimitToMaxOffsetsPerNode: byte //boolean
|
||||
onlyOneStaticInPath: byte; //boolean
|
||||
instantrescan: byte //boolean (not really needed, but it's a nice padding)
|
||||
mustEndWithSpecificOffset: byte; //boolean ( ^ ^ )
|
||||
mustEndWithSpecificOffsetMaxDeviation: dword;
|
||||
maxoffsetspernode: integer;
|
||||
basestart: qword;
|
||||
basestop: qword;
|
||||
@ -5374,6 +5392,7 @@ begin
|
||||
s.writebyte(ifthen(onlyOneStaticInPath,1,0));
|
||||
s.writebyte(ifthen(instantrescan,1,0));
|
||||
s.writebyte(ifthen(mustEndWithSpecificOffset,1,0));
|
||||
s.WriteDword(mustEndWithSpecificOffsetMaxDeviation);
|
||||
s.WriteDWord(maxoffsetspernode);
|
||||
s.WriteQWord(basestart);
|
||||
s.WriteQWord(basestop);
|
||||
|
@ -1123,6 +1123,8 @@ begin
|
||||
setlength(staticscanner.mustendwithoffsetlist, frmpointerscannersettings.offsetlist.count);
|
||||
for i:=0 to frmpointerscannersettings.offsetlist.count-1 do
|
||||
staticscanner.mustendwithoffsetlist[i]:=TOffsetEntry(frmpointerscannersettings.offsetlist[i]).offset;
|
||||
|
||||
staticscanner.mustEndWithSpecificOffsetMaxDeviation:=frmpointerscannersettings.maxOffsetDeviation;
|
||||
end;
|
||||
|
||||
staticscanner.instantrescan:=frmpointerscannersettings.cbCompareToOtherPointermaps.checked;
|
||||
|
@ -52,6 +52,7 @@ type
|
||||
OutOfDiskSpace: ^boolean;
|
||||
|
||||
mustEndWithSpecificOffset: boolean;
|
||||
mustEndWithSpecificOffsetMaxDeviation: dword;
|
||||
mustendwithoffsetlist: array of dword;
|
||||
|
||||
useHeapData: boolean;
|
||||
@ -358,7 +359,11 @@ begin
|
||||
try
|
||||
Initialize;
|
||||
|
||||
compressedEntrySize:=MaxBitCountModuleOffset+MaxBitCountModuleIndex+MaxBitCountLevel+MaxBitCountOffset*(maxlevel-mustendwithoffsetlistlength);
|
||||
if mustEndWithSpecificOffsetMaxDeviation=0 then
|
||||
compressedEntrySize:=MaxBitCountModuleOffset+MaxBitCountModuleIndex+MaxBitCountLevel+MaxBitCountOffset*(maxlevel-mustendwithoffsetlistlength)
|
||||
else
|
||||
compressedEntrySize:=MaxBitCountModuleOffset+MaxBitCountModuleIndex+MaxBitCountLevel+MaxBitCountOffset*maxlevel;
|
||||
|
||||
compressedEntrySize:=(compressedEntrySize+7) div 8;
|
||||
|
||||
getmem(compressedEntry, compressedEntrySize+4); //+4 so there's some space for overhead (writing using a dword pointer to the last byte)
|
||||
@ -501,6 +506,7 @@ var
|
||||
bd8, bm8: dword;
|
||||
|
||||
bit: integer;
|
||||
endlevel: integer;
|
||||
begin
|
||||
if instantrescan and (not DoRescan(level, moduleid, offset)) then exit;
|
||||
|
||||
@ -549,7 +555,8 @@ begin
|
||||
|
||||
//so, the compressed version should be almost 3 times as small on a default scan (the shifting and alignment might cause a slightly slower scan)
|
||||
|
||||
if level<(mustendwithoffsetlistlength-1) then exit; //on a multi offset end scan, entries with a partial match resulting in a static are saved as well. Don't as they are not what the user wished, and would cause problems
|
||||
|
||||
if (mustEndWithSpecificOffsetMaxDeviation=0) and (level<(mustendwithoffsetlistlength-1)) then exit; //on a multi offset end scan, entries with a partial match resulting in a static are saved as well. Don't as they are not what the user wished, and would cause problems
|
||||
|
||||
|
||||
bit:=0;
|
||||
@ -565,13 +572,22 @@ begin
|
||||
bd8:=bit shr 3; //bit div 8;
|
||||
bm8:=bit and $7; //bit mod 8;
|
||||
|
||||
pdword(@compressedEntry[bd8])^:=pdword(@compressedEntry[bd8])^ and (not (MaskLevel shl bm8)) or ((1+(level-mustendwithoffsetlistlength)) shl bm8);
|
||||
if mustEndWithSpecificOffsetMaxDeviation=0 then
|
||||
pdword(@compressedEntry[bd8])^:=pdword(@compressedEntry[bd8])^ and (not (MaskLevel shl bm8)) or ((1+(level-mustendwithoffsetlistlength)) shl bm8)
|
||||
else
|
||||
pdword(@compressedEntry[bd8])^:=pdword(@compressedEntry[bd8])^ and (not (MaskLevel shl bm8)) or ((1+(level)) shl bm8);
|
||||
|
||||
bit:=bit+MaxBitCountLevel; //next section
|
||||
|
||||
|
||||
|
||||
//compress the offsets
|
||||
for i:=mustendwithoffsetlistlength to level do
|
||||
if mustEndWithSpecificOffsetMaxDeviation=0 then
|
||||
endlevel:=mustendwithoffsetlistlength
|
||||
else
|
||||
endlevel:=0;
|
||||
|
||||
for i:=endlevel to level do
|
||||
begin
|
||||
bd8:=bit shr 3; //bit div 8;
|
||||
bm8:=bit and $7; //bit mod 8;
|
||||
@ -627,6 +643,7 @@ var p: ^byte;
|
||||
mae: TMemoryAllocEvent;
|
||||
{$endif}
|
||||
|
||||
ev: ptruint;
|
||||
startvalue: ptrUint;
|
||||
stopvalue: ptrUint;
|
||||
plist: PPointerlist;
|
||||
@ -649,8 +666,12 @@ begin
|
||||
|
||||
if exactOffset then
|
||||
begin
|
||||
startvalue:=valuetofind-mustendwithoffsetlist[level];
|
||||
stopvalue:=startvalue;
|
||||
ev:=valuetofind-mustendwithoffsetlist[level];
|
||||
|
||||
startvalue:=ev-mustEndWithSpecificOffsetMaxDeviation;
|
||||
stopvalue:=ev+mustEndWithSpecificOffsetMaxDeviation;
|
||||
if stopvalue>valuetofind then
|
||||
stopvalue:=valuetofind;
|
||||
end
|
||||
else
|
||||
begin
|
||||
|
Loading…
Reference in New Issue
Block a user