422 lines
15 KiB
ObjectPascal
Executable File
422 lines
15 KiB
ObjectPascal
Executable File
program cheatengine;
|
|
|
|
{$mode objfpc}{$H+}
|
|
|
|
uses
|
|
{$ifdef darwin}
|
|
cthreads,
|
|
|
|
|
|
{$endif}
|
|
first,
|
|
{$IFDEF UNIX}{$IFDEF UseCThreads}
|
|
cthreads,
|
|
{$ENDIF}{$ENDIF}
|
|
Interfaces, {CEInterfaces,} // this includes the LCL widgetset
|
|
{$ifdef darwin}
|
|
//
|
|
macport, macportdefines,coresymbolication, macexceptiondebuggerinterface,
|
|
macCreateRemoteThread, macumm, machotkeys, macPipe,
|
|
{$endif}
|
|
betterControls, controls, sysutils, Forms, LazUTF8, dialogs, SynCompletion,
|
|
MainUnit, CEDebugger, NewKernelHandler, CEFuncProc, ProcessHandlerUnit,
|
|
symbolhandler, Assemblerunit, hypermode, byteinterpreter, addressparser,
|
|
autoassembler, ProcessWindowUnit, MainUnit2, Filehandler,
|
|
dbvmPhysicalMemoryHandler, frameHotkeyConfigUnit, formsettingsunit,
|
|
HotkeyHandler, formhotkeyunit, AdvancedOptionsUnit, inputboxtopunit, plugin,
|
|
pluginexports, tlgUnit, aboutunit, frmProcesswatcherExtraUnit,
|
|
frmProcessWatcherUnit, ModuleSafetyUnit, frmExcludeHideUnit, HotKeys,
|
|
TypePopup, CommentsUnit, FoundCodeUnit, foundlisthelper, unrandomizer,
|
|
SaveFirstScan, savedscanhandler, memscan, KernelDebugger,
|
|
formDifferentBitSizeUnit, formAddressChangeUnit, Changeoffsetunit, speedhack2,
|
|
formPointerOrPointeeUnit, AccessCheck, formmemoryregionsunit, OpenSave,
|
|
formProcessInfo, frmautoinjectunit, MenuItemExtra, MemoryBrowserFormUnit,
|
|
disassemblerviewlinesunit, disassemblerviewunit, PasteTableentryFRM,
|
|
frmBreakpointlistunit, DissectCodeThread, DissectCodeunit, Valuechange,
|
|
FindWindowUnit, stacktrace2, frmstacktraceunit, frmBreakThreadUnit,
|
|
FormDebugStringsUnit, frmDissectwindowUnit, frmCapturedTimersUnit,
|
|
frmEnumerateDLLsUnit, frmThreadlistunit, frmMemoryAllocHandlerUnit,
|
|
circularBuffer, PEInfoFunctions, PEInfounit, FileMapping, frmFindstaticsUnit,
|
|
frmModifyRegistersUnit, frmHeapsUnit, savedisassemblyfrm,
|
|
frmSaveMemoryRegionUnit, frmLoadMemoryunit, formAddToCodeList,
|
|
frmFillMemoryUnit, frmCodecaveScannerUnit, frmSelectionlistunit,
|
|
symbolconfigunit, frmFloatingPointPanelUnit, frmTracerUnit, DriverList,
|
|
frmRegistersunit, formChangedAddresses, frmGDTunit, frmIDTunit,
|
|
frmDisassemblyscanunit, frmReferencedStringsUnit, StructuresAddElementfrm,
|
|
Structuresfrm, PointerscannerSettingsFrm, simpleaobscanner,
|
|
PointerscanresultReader, pointervaluelist, rescanhelper, pointerscannerfrm,
|
|
VirtualMemory, ValueFinder, frmRescanPointerUnit, SyncObjs2,
|
|
ManualModuleLoader, SynHighlighterAA, APIhooktemplatesettingsfrm,
|
|
frmAAEditPrefsUnit, disassembler, hexviewunit, guisafecriticalsection,
|
|
debugeventhandler, formFoundcodeListExtraUnit, debuggertypedefinitions,
|
|
addresslist, MemoryRecordUnit, ThreadlistExFRM, windows7taskbar, tablist,
|
|
frmStructuresConfigUnit, VEHDebugger, VEHDebugSharedMem, DebuggerInterface,
|
|
WindowsDebugger, DebuggerInterfaceAPIWrapper, frmDebugEventsUnit, changelist,
|
|
tableconverter, DBK32functions, debug, multicpuexecution, vmxfunctions,
|
|
frmPagingUnit, bigmemallochandler, KernelDebuggerInterface, CustomTypeHandler,
|
|
LuaHandler, frmLuaEngineUnit, frmMemviewPreferencesUnit,
|
|
frmBreakpointConditionUnit, frmTracerConfigUnit, frmStackViewUnit, luaJit,
|
|
ScrollBoxEx, fileaccess, ceguicomponents, formdesignerunit, LuaCaller,
|
|
LuaSyntax, cesupport, trainergenerator, genericHotkey,
|
|
frmExeTrainerGeneratorUnit, luafile, xmplayer_server, xmplayer_defines,
|
|
ExtraTrainerComponents, frmAdConfigUnit, IconStuff, cetranslator,
|
|
frmStringMapUnit, MemFuncs, frmStringPointerScanUnit,
|
|
frmStructPointerRescanUnit, sharedMemory, disassemblerComments,
|
|
frmFilePatcherUnit, LuaCanvas, LuaPen, LuaFont, LuaBrush, LuaPicture, LuaMenu,
|
|
LuaDebug, frmUltimapUnit, DBK64SecondaryLoader, frmHotkeyExUnit,
|
|
SymbolListHandler, networkInterface, networkInterfaceApi, networkConfig,
|
|
LuaThread, LuaGraphic, LuaProgressBar, d3dhookUnit, LuaOldD3DHook,
|
|
LuaWinControl, frmSetCrosshairUnit, StructuresFrm2, scrollTreeView,
|
|
frmStructures2ElementInfoUnit, frmStructureLinkerUnit, LuaMemoryRecord,
|
|
LuaStructure, LuaForm, regionex, LuaRegion, frmgroupscanalgoritmgeneratorunit,
|
|
vartypestrings, LuaXMPlayer, groupscancommandparser, LuaMemscan, LuaFoundlist,
|
|
LuaRadioGroup, RemoteMemoryManager, LuaRasterImage, multilineinputqueryunit,
|
|
LuaCheatComponent, LuaAddresslist, frmDriverLoadedUnit, memdisplay,
|
|
frmSortPointerlistUnit, LuaClassArray, LuaObject, LuaComponent, LuaControl,
|
|
LuaStrings, LuaStringlist, LuaCustomControl, LuaGraphicControl, LuaPanel,
|
|
LuaImage, LuaButton, LuaCheckbox, LuaClass, LuaGroupbox, LuaListbox,
|
|
LuaCombobox, LuaTrackbar, LuaCollectionItem, LuaListcolumn, LuaEdit, LuaMemo,
|
|
LuaCollection, LuaListColumns, LuaListItem, LuaListItems, LuaListview,
|
|
LuaTimer, LuaGenericHotkey, LuaFileDialog, LuaStream, LuaTableFile,
|
|
LuaMemoryRecordHotkey, LuaMemoryView, LuaD3DHook, CustomBase85,
|
|
frmMemoryViewExUnit, LuaDisassembler, LuaDissectCode, LuaByteTable, LuaBinary,
|
|
frmD3DHookSnapshotConfigUnit, frmsnapshothandlerUnit, frmSaveSnapshotsUnit,
|
|
frmD3DTrainerGeneratorOptionsUnit, lua_server, frmAssemblyScanUnit,
|
|
frmManualStacktraceConfigUnit, cvconst, NetworkDebuggerInterface,
|
|
DisassemblerArm, LastDisassembleData, elfsymbols, assemblerArm,
|
|
frmPointerscanConnectDialogUnit, PageMap, CELazySocket,
|
|
PointerscanNetworkCommands, frmpointerrescanconnectdialogunit,
|
|
frmMergePointerscanResultSettingsUnit, AddresslistEditor,
|
|
FrmMemoryRecordDropdownSettingsUnit, frmMemrecComboboxUnit, tracerIgnore,
|
|
DotNetPipe, DotNetTypes, LuaPipeServer, LuaPipe, LuaPipeClient,
|
|
CEListviewItemEditor, LuaTreeview, LuaTreeNodes, LuaTreeNode, LuaCalendar,
|
|
LuaSymbolListHandler, LuaFindDialog, LuaCommonDialog, LuaSettings,
|
|
frmReferencedFunctionsUnit, LuaPageControl, DebugHelper,
|
|
frmNetworkDataCompressionUnit, lazcontrols, LuaApplication, ProcessList,
|
|
pointeraddresslist, frmResumePointerscanUnit, frmSetupPSNNodeUnit,
|
|
PointerscanWorker, PointerscanStructures, PointerscanController, zstreamext,
|
|
PointerscanConnector, PointerscanNetworkStructures, AsyncTimer,
|
|
PointerscanSettingsIPConnectionList, MemoryStreamReader, commonTypeDefs,
|
|
Parsers, Globals, NullStream, RipRelativeScanner, LuaRIPRelativeScanner,
|
|
VirtualQueryExCache, disassemblerthumb, AccessedMemory, LuaStructureFrm,
|
|
MemoryQuery, pointerparser, GnuAssembler, binutils, dbvmLoadManual, mikmod,
|
|
frmEditHistoryUnit, LuaInternet, xinput, frmUltimap2Unit, cpuidunit, libipt,
|
|
DPIHelper, Graphics, fontSaveLoadRegistry, registry, frmWatchlistUnit,
|
|
frmWatchListAddEntryUnit, frmBusyUnit, FindDialogFix, LuaCustomType, LuaSQL,
|
|
bCrypt, feces, askToRunLuaScript, frmDBVMWatchConfigUnit,
|
|
frmStructuresNewStructureUnit, frmDotNetObjectListUnit, vextypedef,
|
|
frmFindDialogUnit, frmRearrangeStructureListUnit,
|
|
autoassemblerexeptionhandler, frmstructurecompareunit, addressedit,
|
|
frmChangedAddressesCommonalityScannerUnit, ceregistry, LuaRemoteThread,
|
|
LuaManualModuleLoader, symbolhandlerstructs, frmOpenFileAsProcessDialogUnit,
|
|
BetterDLLSearchPath, UnexpectedExceptionsHelper, frmExceptionRegionListUnit,
|
|
frmExceptionIgnoreListUnit, frmcodefilterunit, CodeFilterCallOrAllDialog,
|
|
frmBranchMapperUnit, frmSymbolEventTakingLongUnit, LuaCheckListBox,
|
|
textrender, diagramtypes, diagramblock, diagram, LuaDiagram, LuaDiagramBlock,
|
|
LuaDiagramLink, diagramlink, BreakpointTypeDef, frmFoundlistPreferencesUnit,
|
|
LuaHeaderSections, frmDebuggerAttachTimeoutUnit, cheatecoins,
|
|
frmMicrotransactionsUnit, frmSyntaxHighlighterEditor, LuaCustomImageList,
|
|
dotnethost, rttihelper, cefreetype, LuaDotNetPipe, LuaRemoteExecutor,
|
|
autoassemblercode, CSharpCompiler, newhintwindow, memrecDataStructures,
|
|
LuaCECustomButton, DBVMDebuggerInterface, frmCR3SwitcherUnit, tcclib,
|
|
sourcecodehandler, frmSourceDisplayUnit, disassemblerarm64, contexthandler,
|
|
DisAssemblerARM32, frmAnchorEditor, disassemblerArm32Thumb, iptnative,
|
|
iptlogdisplay, LuaVirtualStringTree, userbytedisassembler,
|
|
LuaNetworkInterface, libcepack, symbolsync, gdbserverconnectdialog,
|
|
GDBServerDebuggerInterface;
|
|
|
|
{$R cheatengine.res}
|
|
{$IFDEF windows}
|
|
//{$R manifest.res} //lazarus now has this build in (but sucks as it explicitly turns of dpi aware)
|
|
//{$R Sounds.rc}
|
|
//{$R images.rc}
|
|
{$ifdef cpu32}
|
|
{$SetPEFlags $20}
|
|
{$endif}
|
|
|
|
{$ENDIF}
|
|
|
|
{$R sounds.res}
|
|
{$ifdef altname}
|
|
{$R Images_alt.res}
|
|
{$else}
|
|
{$R Images.res}
|
|
{$endif}
|
|
|
|
|
|
|
|
|
|
procedure HandleParameters;
|
|
{Keep in mind: Responsible for not making the mainform visible}
|
|
var i: integer;
|
|
mainformvisible: boolean;
|
|
p: string;
|
|
tabletoload: string;
|
|
origin: string;
|
|
begin
|
|
tabletoload:='';
|
|
origin:='';
|
|
mainformvisible:=true;
|
|
|
|
try
|
|
|
|
for i:=1 to Paramcount do
|
|
begin
|
|
p:=paramstr(i);
|
|
|
|
//ShowMessage('Param '+inttostr(i)+' = '+p);
|
|
|
|
if p<>'' then
|
|
begin
|
|
{$ifdef darwin}
|
|
if p='hasrights' then continue;
|
|
{$endif}
|
|
|
|
if p[1]='-' then
|
|
begin
|
|
//could be -ORIGIN
|
|
if uppercase(copy(p,1,8))='-ORIGIN:' then
|
|
origin:=AnsiDequotedStr(copy(p,9, length(p)-8),'"');
|
|
|
|
end
|
|
else
|
|
if (pos('.CETRAINER', uppercase(p))>0) or (pos('.CT', uppercase(p))>0) then
|
|
begin
|
|
//add the path of this CT to the lua lookup
|
|
LUA_DoScript('package.path = package.path .. [[;'+ExtractFilePath(p)+'?.lua]];');
|
|
|
|
mainformvisible:=uppercase(ExtractFileExt(p))<>'.CETRAINER';
|
|
|
|
tabletoload:=p; //mark this trainer to be loaded
|
|
end;
|
|
end;
|
|
|
|
end;
|
|
|
|
if tabletoload<>'' then
|
|
begin
|
|
//it needs to load a table
|
|
if fileexists(tabletoload)=false then //try to fix this
|
|
begin
|
|
if fileexists(WinCPToUTF8(tabletoload)) then
|
|
tabletoload:=WinCPToUTF8(tabletoload)
|
|
else
|
|
if fileexists(UTF8ToWinCP(tabletoload)) then
|
|
tabletoload:=UTF8ToWinCP(tabletoload);
|
|
end;
|
|
|
|
if origin='' then
|
|
origin:=ExtractFilePath(tabletoload);
|
|
|
|
if origin<>'' then
|
|
LUA_DoScript('TrainerOrigin=[['+origin+']]');
|
|
|
|
try
|
|
try
|
|
if mainformvisible then LoadSettingsFromRegistry;
|
|
LoadTable(tabletoload,false);
|
|
MainForm.Savedialog1.FileName:=tabletoload;
|
|
finally
|
|
if ExtractFileName(tabletoload)='CET_TRAINER.CETRAINER' then //Let's just hope no-one names their trainer exactly this...
|
|
DeleteFile(tabletoload);
|
|
end;
|
|
except
|
|
on e: exception do
|
|
begin
|
|
MessageDlg('Failure loading the trainer. Reason :'+e.message, mterror, [mbok], 0);
|
|
application.Terminate;
|
|
end;
|
|
end;
|
|
end
|
|
else
|
|
LoadSettingsFromRegistry;
|
|
except
|
|
end;
|
|
|
|
|
|
for i:=0 to mainform.LuaForms.count-1 do
|
|
if tceform(mainform.luaforms[i]).visible then
|
|
begin
|
|
//first visible window in the formlist becomes the new taskbar window
|
|
try
|
|
tceform(mainform.luaforms[i]).ShowInTaskBar:=stAlways;
|
|
tceform(mainform.luaforms[i]).formstyle:=fsStayOnTop;
|
|
tceform(mainform.luaforms[i]).formstyle:=fsNormal;
|
|
|
|
application.title:=tceform(mainform.luaforms[i]).Caption;
|
|
application.icon:=tceform(mainform.luaforms[i]).Icon;
|
|
except
|
|
|
|
end;
|
|
|
|
break;
|
|
end;
|
|
|
|
{$ifdef darwin}
|
|
frmmacumm.visible:=true;
|
|
{$else}
|
|
mainform.visible:=mainformvisible;
|
|
{$endif}
|
|
end;
|
|
|
|
type TFormFucker=class
|
|
private
|
|
procedure addFormEvent(Sender: TObject; Form: TCustomForm);
|
|
end;
|
|
|
|
|
|
procedure TFormFucker.addFormEvent(Sender: TObject; Form: TCustomForm);
|
|
begin
|
|
//fuuuuucking time
|
|
if (form<>nil) and (overridefont<>nil) then
|
|
begin
|
|
if (form is TsynCompletionForm)=false then //dus nut wurk with this
|
|
form.Font:=overridefont;
|
|
end;
|
|
end;
|
|
|
|
procedure setScaledTrue;
|
|
begin
|
|
application.Scaled:=true; //put it here because the lazarus ide will just nuke it on setting change otherwise
|
|
end;
|
|
|
|
var
|
|
i: integer;
|
|
|
|
ff: TFormFucker;
|
|
r: TRegistry;
|
|
|
|
path: string;
|
|
noautorun: boolean;
|
|
|
|
begin
|
|
Application.Title:='Cheat Engine 7.5';
|
|
//'Cheat Engine 7.3';
|
|
{$ifdef darwin}
|
|
macPortFixRegPath;
|
|
{$endif}
|
|
outputdebugstring('start');
|
|
|
|
Application.Initialize;
|
|
|
|
{$ifdef windows}
|
|
registerDarkModeHintHandler;
|
|
{$endif}
|
|
|
|
|
|
overridefont:=nil;
|
|
noautorun:=false;
|
|
|
|
getcedir;
|
|
doTranslation;
|
|
|
|
|
|
//first check if this is a trainer.
|
|
istrainer:=false;
|
|
for i:=1 to Paramcount do
|
|
begin
|
|
if pos('.CETRAINER', uppercase(ParamStr(i)))>0 then
|
|
begin
|
|
istrainer:=true; //a trainer could give some extra parameters like dpiaware , but that is fine
|
|
|
|
if pos('CET_TRAINER.CETRAINER', uppercase(ParamStr(i)))>0 then
|
|
isExeTrainer:=true;
|
|
|
|
break;
|
|
end;
|
|
end;
|
|
|
|
if istrainer then setScaledTrue;
|
|
|
|
|
|
if not istrainer then
|
|
begin
|
|
//check the user preferences
|
|
{$ifdef darwin}
|
|
macPortFixRegPath;
|
|
{$endif}
|
|
|
|
r := TRegistry.Create;
|
|
|
|
r.RootKey := HKEY_CURRENT_USER;
|
|
|
|
if r.OpenKey('\Software\'+strCheatEngine,false) then
|
|
begin
|
|
if r.ValueExists('RunAsAdmin') then
|
|
begin
|
|
if r.readbool('RunAsAdmin') then
|
|
begin
|
|
askAboutRunningAsAdmin:=false;
|
|
requiresAdmin;
|
|
end;
|
|
end;
|
|
|
|
if r.ValueExists('Override Default Font') then
|
|
begin
|
|
if r.ReadBool('Override Default Font') then
|
|
begin
|
|
if r.OpenKey('Font', false) then
|
|
begin
|
|
overridefont:=TFont.create;
|
|
LoadFontFromRegistry(overridefont,r);
|
|
|
|
ff:=TFormFucker.Create;
|
|
screen.AddHandlerFormAdded(@ff.addFormEvent);
|
|
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
for i:=1 to Paramcount do
|
|
begin
|
|
if Copy(uppercase(ParamStr(i)),1,9)='FONTSIZE=' then
|
|
begin
|
|
try
|
|
if overridefont=nil then
|
|
overridefont:=TFont.create;
|
|
|
|
overridefont.size:=strtoint(copy(ParamStr(i), 10, length(ParamStr(i))));
|
|
ff:=TFormFucker.Create;
|
|
screen.AddHandlerFormAdded(@ff.addFormEvent);
|
|
|
|
except
|
|
end;
|
|
end;
|
|
|
|
if uppercase(ParamStr(i))='NOAUTORUN' then //don't load any extentions yet
|
|
noautorun:=true;
|
|
end;
|
|
|
|
|
|
|
|
symhandlerInitialize;
|
|
|
|
Application.ShowMainForm:=false;
|
|
Application.CreateForm(TMainForm, MainForm);
|
|
Application.CreateForm(TMemoryBrowser, MemoryBrowser);
|
|
Application.CreateForm(TformSettings, formSettings);
|
|
Application.CreateForm(TAdvancedOptions, AdvancedOptions);
|
|
Application.CreateForm(TComments, Comments);
|
|
Application.CreateForm(TTypeForm, TypeForm);
|
|
{$ifdef darwin}
|
|
Application.CreateForm(TfrmMacUmm, frmMacUmm);
|
|
{$endif}
|
|
|
|
initcetitle;
|
|
{$ifdef darwin}
|
|
macPortFixRegPath;
|
|
{$endif}
|
|
|
|
InitializeLuaScripts(noautorun);
|
|
|
|
handleparameters;
|
|
|
|
OutputDebugString('Starting CE');
|
|
|
|
|
|
Application.Run;
|
|
end.
|
|
|