Т.е. подкючает автоаттач getAutoAttachList().add("Tutorial-i386.exe")
А после обработка события аттача
function onOpenProcess()
autoAssemble(aa_script)
end
Т.е. подкючает автоаттач getAutoAttachList().add("Tutorial-i386.exe")
А после обработка события аттача
function onOpenProcess()
autoAssemble(aa_script)
end
тогда так
local aa_script =
[[aobscan(_step_1_,81xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxB2xx8Bxxxxxxxxxx8BxxFFxxxxxxxxxx8BxxxxxxxxxxB2xx8Bxxxxxxxxxx8BxxFFxxxxxxxxxxxxxx00xx00xxxx89)
alloc(newmem_step_1_,$1000)
alloc(constant,$1000)
label(code_step_1_)
label(return_step_1_)
label(f_step_1_)
label(address_step_1_)
registersymbol(_step_1_)
registersymbol(f_step_1_)
registersymbol(address_step_1_)
constant:
f_step_1_:
dd 0
address_step_1_:
dd db 00 00 00 00
newmem_step_1_:
pushad
lea eax,[ebx+00000480]
mov [address_step_1_],eax
cmp [f_step_1_],1
jne code_step_1_
mov [ebx+00000480],#1000
code_step_1_:
cmp [ebx+00000480],000003E8
popad
jmp return_step_1_
_step_1_:
jmp newmem_step_1_
db 90 90 90 90 90
return_step_1_:
]]
getAutoAttachList().add("Tutorial-i386.exe")
function onOpenProcess()
autoAssemble(aa_script)
end
т.е. смысл какой.
getAutoAttachList().add("Tutorial-i386.exe")
добавляет в поиск процесс "Tutorial-i386.exe
А это сработает при подключении
function onOpenProcess()
getAddressList().getMemoryRecordByDescription('f_step_1_').Active = true
end
Все, готово
[Tutorial-i386_pitronic.CT](Похоже, что-то пошло не так в процессе обработки ответа сервера.)
getAutoAttachList().add("Tutorial-i386.exe")
function onOpenProcess()
getAddressList().getMemoryRecordByDescription('f_step_1_').Active = true
end
local aa_script =
[[
aobscan(_step_1_,81xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxB2xx8Bxxxxxxxxxx8BxxFFxxxxxxxxxx8BxxxxxxxxxxB2xx8Bxxxxxxxxxx8BxxFFxxxxxxxxxxxxxx00xx00xxxx89)
alloc(newmem_step_1_,$1000)
alloc(constant,$1000)
label(code_step_1_)
label(return_step_1_)
label(f_step_1_)
label(address_step_1_)
registersymbol(_step_1_)
registersymbol(f_step_1_)
registersymbol(address_step_1_)
constant:
f_step_1_:
dd 0
address_step_1_:
dd db 00 00 00 00
newmem_step_1_:
pushad
lea eax,[ebx+00000480]
mov [address_step_1_],eax
cmp [f_step_1_],1
jne code_step_1_
mov [ebx+00000480],#1000
code_step_1_:
cmp [ebx+00000480],000003E8
popad
jmp return_step_1_
_step_1_:
jmp newmem_step_1_
db 90 90 90 90 90
return_step_1_:
]]
autoAssemble(aa_script)
А, ну да. Вижу свои строки. Т.е. тебе надо активирующий скрипт перенести в главную таблицу
Можно оставить одно из двух

Возможно, очень нужный прием, если пользоваться активирующим скриптом. Полностью можно понять если посмотреть таблицу и запустить тутор cheatengine-i386.exe
cheatengine-i386_active_example.CT
Запуск первой записи в таблице (активирующий скрипт)
getAutoAttachList().add("Tutorial-i386.exe")
function onOpenProcess()
getAddressList()[0].Active = true
end
Сам активирующий скрипт пример
{$lua}
function onOpenProcess()
memrec.Active = true
end
[ENABLE]
print("Активирующий скрипт. Включен ")
// здесь пишем AA-код или иной
[DISABLE]
print("Активирующий скрипт. Выключен")
// здесь пишем AA-код отмены или иной
Когда сработал активирующий скрипт

Опции, которые были выставлены для сворачивания внутрь записей под активирующий

"Активирующий скрипт" — главный скрипт, который вытаскивает адрес начала структуры игрока и помещает его в зарегистрированную метку. После активации разворачивает и показывает внутренние скрытые записи под собой. Это очень удобно показывать именно после подключения к процессу
Также активирующий скрипт содержит однобайтовые регистрируемые метки читов, по которым происходит запись по offsets от начала структуры. По меткам другие скрипты записывают однобайтовые значения 1 или 0.
Характерно для активирующего скрипта большой размер, много регистрируемых однобайтовых меток и активируется он до запуска читов, чтобы метки успели зарегистрироваться и их "увидели" другие скрипты.

Посмотрел. Что-то быстро ответить не получается. Лучше завтра, на свежую голову. У тебя уже скрипты идут все сложнее и сложнее. Сегодня понакидаю статеек, а завтра на свежую голову попробую снова глянуть
Скрипт позволит вывести иерархию компонентов CE в виде текста.

Иерархия компонентов CE нужна для написания плагинов.
Например, для ColorPicker и для смены шрифта (подобротнее об этом было где-то было в блоге).
print("Controls list for CE "..getCEVersion()..'\n')
function PrintComponents(obj, tabCount)
local tabLine = string.rep(' ', tabCount)
local componentCount = obj.ComponentCount
if obj.Caption == nil then
print(tabLine..obj.Name..'('..obj.ClassName..')')
else
print(tabLine..obj.Name..'('..obj.ClassName..') -> "'..obj.Caption..'"')
end
for i = 0, componentCount - 1 do
local subObject = obj.Component[i]
PrintComponents(subObject, tabCount + 1)
end
end
PrintComponents(MainForm, 1)
Результат
Controls list for CE 7.4
MainForm(TMainForm) -> "Cheat Engine 7.4"
Splitter1(TSplitter)
Panel1(TPanel) -> ""
Panel4(TPanel) -> ""
advancedbutton(TSpeedButton) -> "Advanced Options"
CommentButton(TSpeedButton) -> "Table Extras"
lblSigned(TLabel) -> "This table has been signed by
Someone"
Panel5(TPanel) -> ""
ProcessLabel(TLabel) -> "No Process Selected"
foundcountlabel(TLabel) -> "0"
ScanText(TLabel) -> "Value:"
lblScanType(TLabel) -> "Scan Type"
lblValueType(TLabel) -> "Value Type"
LoadButton(TSpeedButton) -> ""
SaveButton(TSpeedButton) -> ""
Label6(TLabel) -> "Found:"
SpeedButton2(TSpeedButton) -> ""
SpeedButton3(TSpeedButton) -> ""
btnNewScan(TButton) -> "First Scan"
gbScanOptions(TGroupBox) -> "Memory Scan Options"
ScanOptionsModuleList(TComboBox)
Panel2(TPanel) -> ""
cbCopyOnWrite(TCheckBox) -> "CopyOnWrite"
cbWritable(TCheckBox) -> "Writable"
cbExecutable(TCheckBox) -> "Executable"
Panel3(TPanel) -> ""
Label2(TLabel) -> "Stop"
Label1(TLabel) -> "Start"
ToAddress(TEdit)
FromAddress(TEdit)
Panel6(TPanel) -> ""
cbFastScan(TCheckBox) -> "Fast Scan"
edtAlignment(TEdit)
cbPauseWhileScanning(TCheckBox) -> "Pause the game while scanning"
Panel8(TPanel) -> ""
rbfsmLastDigts(TRadioButton) -> "Last Digits"
rbFsmAligned(TRadioButton) -> "Alignment"
btnNextScan(TButton) -> "Next Scan"
ScanType(TComboBox)
VarType(TComboBox)
ProgressBar(TProgressBar)
UndoScan(TButton) -> "Undo Scan"
scanvalue(TEdit)
Panel7(TPanel) -> ""
sbOpenProcess(TSpeedButton) -> ""
btnFirst(TButton) -> "First Scan2"
btnNext(TButton) -> "Next scan 2"
LogoPanel(TPanel) -> ""
Logo(TImage)
SettingsButton(TSpeedButton) -> "Settings"
pnlScanValueOptions(TPanel) -> ""
rbBit(TRadioButton) -> "Bits"
rbDec(TRadioButton) -> "Decimal"
cbHexadecimal(TCheckBox) -> "Hex"
Panel9(TPanel) -> ""
pnlScanOptions(TPanel) -> ""
pnlFloat(TPanel) -> ""
rt3(TRadioButton) -> "Truncated"
rt1(TRadioButton) -> "Rounded (default)"
rt2(TRadioButton) -> "Rounded (extreme)"
cbUnicode(TCheckBox) -> "UTF-16"
cbCaseSensitive(TCheckBox) -> "Case sensitive"
cbFloatSimple(TCheckBox) -> "Simple values only"
cbpercentage(TCheckBox) -> "Percent"
cbNot(TCheckBox) -> "Not"
cbCodePage(TCheckBox) -> "Codepage"
cbRepeatUntilStopped(TCheckBox) -> "Repeat"
cbLuaFormula(TCheckBox) -> "Lua formula"
cbNewLuaState(TCheckBox) -> "Separate Lua state"
Panel10(TPanel) -> ""
cbUnrandomizer(TCheckBox) -> "Unrandomizer"
cbSpeedhack(TCheckBox) -> "Enable Speedhack"
Panel14(TPanel) -> ""
Label54(TLabel) -> "Speed"
lblSH0(TLabel) -> "0"
lblSH20(TLabel) -> "500"
btnSetSpeedhack2(TButton) -> "Apply"
editSH2(TEdit)
tbSpeed(TTrackBar)
scanvalue2(TEdit)
ScanText2(TLabel) -> "Scan Value"
andlabel(TLabel) -> "and"
Foundlist3(TListView)
(TCustomListViewEditor)
btnAddAddressManually(TButton) -> "Add Address Manually"
btnMemoryView(TButton) -> "Memory View"
cbCompareToSavedScan(TCheckBox) -> "Compare to first/saved scan"
lblcompareToSavedScan(TLabel) -> "<xxxx>"
UpdateTimer(TTimer)
FreezeTimer(TTimer)
PopupMenu2(TPopupMenu)
(TMenuItem) -> ""
(TMenuItem) -> "Add to new group"
miAutoAssembleErrorMessage(TMenuItem) -> "<Error message here>"
Deletethisrecord1(TMenuItem) -> "Delete this record"
Change1(TMenuItem) -> "Change record"
Description1(TMenuItem) -> "Description"
Address1(TMenuItem) -> "Address"
Type1(TMenuItem) -> "Type"
Value1(TMenuItem) -> "Value"
miUndoValue(TMenuItem) -> "Undo last edit"
Smarteditaddresses1(TMenuItem) -> "Smart edit address(es)"
Browsethismemoryregion1(TMenuItem) -> "Browse this memory region"
miDisassemble(TMenuItem) -> "Disassemble this memory region"
miShowAsSigned(TMenuItem) -> "Show as signed"
Showashexadecimal1(TMenuItem) -> "Show as hexadecimal"
miZeroTerminate(TMenuItem) -> "Zero-Terminate string"
miShowAsBinary(TMenuItem) -> "Show as binary"
miChangeColor(TMenuItem) -> "Change Color"
SetHotkey1(TMenuItem) -> "Assign Hotkey"
miSetDropdownOptions(TMenuItem) -> "Set/Change dropdown selection options"
Freezealladdresses2(TMenuItem) -> "Toggle Selected Records"
miFreezePositive(TMenuItem) -> "Freeze Positive"
miFreezeNegative(TMenuItem) -> "Freeze Negative"
Changescript1(TMenuItem) -> "Change script"
miAsyncScript(TMenuItem) -> "Execute asynchronous"
N5(TMenuItem) -> "-"
miGeneratePointermap(TMenuItem) -> "Generate pointermap"
Pointerscanforthisaddress1(TMenuItem) -> "Pointer scan for this address"
Findoutwhataccessesthisaddress1(TMenuItem) -> "Find out what accesses this address"
Setbreakpoint1(TMenuItem) -> "Find out what writes to this address"
sep2(TMenuItem) -> "-"
miDBVMFindWhatWritesOrAccesses(TMenuItem) -> "DBVM Find out what writes or accesses this address"
sep1(TMenuItem) -> "-"
Calculatenewvaluepart21(TMenuItem) -> "Recalculate new addresses"
Forcerechecksymbols1(TMenuItem) -> "Force recheck symbols"
N4(TMenuItem) -> "-"
Cut1(TMenuItem) -> "Cut"
Copy1(TMenuItem) -> "Copy"
Paste1(TMenuItem) -> "Paste"
MenuItem1(TMenuItem) -> "Select All"
N1(TMenuItem) -> "-"
CreateGroup(TMenuItem) -> "Create Header"
miGroupconfig(TMenuItem) -> "Group config"
miHideChildren(TMenuItem) -> "Hide children when deactivated"
miBindActivation(TMenuItem) -> "Activating this entry activates it's children"
miBindDeactivation(TMenuItem) -> "Deactivating this entry deactivates it's children"
miRecursiveSetValue(TMenuItem) -> "Setting a value to this entry sets same value to children"
miAllowCollapse(TMenuItem) -> "Allow left and right arrow keys to collapse and expand"
miManualExpandCollapse(TMenuItem) -> "Manual expand/collapse"
miAlwaysHideChildren(TMenuItem) -> "Always hide children"
Plugins1(TMenuItem) -> "Plugins"
foundlistpopup(TPopupMenu)
(TMenuItem) -> ""
miAddAddress(TMenuItem) -> "Add selected addresses to the addresslist"
miChangeValue(TMenuItem) -> "Change value of selected addresses"
miChangeValueBack(TMenuItem) -> "Change value of selected addresses back to previous/saved value"
Browsethismemoryarrea1(TMenuItem) -> "Browse this memory region"
Browsethismemoryregioninthedisassembler1(TMenuItem) -> "Disassemble this memory region"
Removeselectedaddresses1(TMenuItem) -> "Remove selected addresses"
Copyselectedaddresses1(TMenuItem) -> "Copy selected addresses"
Selectallitems1(TMenuItem) -> "Select all items"
MenuItem4(TMenuItem) -> "-"
miShowPreviousValue(TMenuItem) -> "Show previous value column(s)"
miOnlyShowCurrentCompareToColumn(TMenuItem) -> "Only show current "compare to" column"
MenuItem13(TMenuItem) -> "-"
miForgotScan(TMenuItem) -> "Reload the previous value list (Forgot value scan)"
MenuItem14(TMenuItem) -> "-"
miFlFindWhatAccesses(TMenuItem) -> "Find out what accesses this address"
miFlFindWhatWrites(TMenuItem) -> "Find out what writes to this address"
N2(TMenuItem) -> "-"
miFoundListPreferences(TMenuItem) -> "Preferences"
MenuItem19(TMenuItem) -> "-"
miDisplayHex(TMenuItem) -> "Hexadecimal"
miDisplayDefault(TMenuItem) -> "Default"
miDisplayByte(TMenuItem) -> "Byte"
miDisplay2Byte(TMenuItem) -> "2 Bytes"
miDisplay4Byte(TMenuItem) -> "4 Bytes"
miDisplay8Byte(TMenuItem) -> "8 Bytes"
miDisplayFloat(TMenuItem) -> "Float"
miDisplayDouble(TMenuItem) -> "Double"
OpenDialog1(TOpenDialog)
SaveDialog1(TSaveDialog)
TopDisabler(TTimer)
emptypopup(TPopupMenu)
(TMenuItem) -> ""
MenuItem2(TMenuItem) -> "New Item1"
ccpmenu(TPopupMenu)
(TMenuItem) -> ""
Cut2(TMenuItem) -> "Cut"
Copy2(TMenuItem) -> "Copy"
Paste2(TMenuItem) -> "Paste"
ActionList1(TActionList)
actSave(TAction) -> ""
actOpen(TAction) -> ""
actAutoAssemble(TAction) -> "actAutoAssemble"
actMemoryView(TAction) -> "actMemoryView"
actOpenProcesslist(TAction) -> ""
actOpenDissectStructure(TAction) -> "actOpenDissectStructure"
actOpenLuaEngine(TAction) -> "actOpenLuaEngine"
UpdateFoundlisttimer(TTimer)
AutoAttachTimer(TTimer)
MainMenu1(TMainMenu)
(TMenuItem) -> ""
(TMenuItem) -> "English"
(TMenuItem) -> "Save scan session"
(TMenuItem) -> "Load scan session"
(TMenuItem) -> "-"
File1(TMenuItem) -> "&File"
miAddTab(TMenuItem) -> "Add scan tab"
New1(TMenuItem) -> "Clear list"
MenuItem8(TMenuItem) -> "Open Process"
miOpenFile(TMenuItem) -> "Open File"
miSaveFile(TMenuItem) -> "Save File"
N7(TMenuItem) -> "-"
miSave(TMenuItem) -> "Save"
Save1(TMenuItem) -> "Save As..."
Load1(TMenuItem) -> "Load"
miLoadRecent(TMenuItem) -> "Load Recent"
miSignTable(TMenuItem) -> "Sign table"
MenuItem3(TMenuItem) -> "-"
miSaveScanresults(TMenuItem) -> "Save current scanresults"
miDeleteSavedScanResults(TMenuItem) -> "Delete scanresult"
MenuItem6(TMenuItem) -> "-"
MenuItem9(TMenuItem) -> "Generate generic trainer lua script from table"
MenuItem5(TMenuItem) -> "-"
MenuItem7(TMenuItem) -> "Quit"
Edit3(TMenuItem) -> "&Edit"
Settings1(TMenuItem) -> "Settings"
Process1(TMenuItem) -> "&Process"
OpenProcess1(TMenuItem) -> "Open Process window"
CreateProcess1(TMenuItem) -> "Create Process"
N6(TMenuItem) -> "-"
a1(TMenuItem) -> "a"
b1(TMenuItem) -> "b"
c1(TMenuItem) -> "c"
d1(TMenuItem) -> "d"
e1(TMenuItem) -> "e"
miTable(TMenuItem) -> "Table"
miShowLuaScript(TMenuItem) -> "Show Cheat Table Lua Script"
MenuItem10(TMenuItem) -> "-"
miCreateLuaForm(TMenuItem) -> "Create form"
miResyncFormsWithLua(TMenuItem) -> "Resynchronize forms with Lua"
miLuaFormsSeperator(TMenuItem) -> "-"
miAddFile(TMenuItem) -> "Add file"
mi3d(TMenuItem) -> "D3D"
miHookD3D(TMenuItem) -> "Hook Direct3D"
MenuItem11(TMenuItem) -> "-"
miSetCrosshair(TMenuItem) -> "Set custom crosshair"
miWireframe(TMenuItem) -> "Toggle wireframe mode"
miZbuffer(TMenuItem) -> "Toggle disabled zbuffer"
miLockMouseInGame(TMenuItem) -> "Lock mouse in game window"
miSetupSnapshotKeys(TMenuItem) -> "Start and configure snapshot recording"
miSnapshothandler(TMenuItem) -> "Snapshot handler"
ools1(TMenuItem) -> "&Tools"
miDotNET(TMenuItem) -> ".Net"
miGetDotNetObjectList(TMenuItem) -> "Get object list"
miNetwork(TMenuItem) -> "Network"
miCompression(TMenuItem) -> "Compression"
miScanDirtyOnly(TMenuItem) -> "Scan changed regions only"
miScanPagedOnly(TMenuItem) -> "Scan paged (physical) memory only"
Plugins2(TMenuItem) -> "P&lugins"
miLanguages(TMenuItem) -> "Languages"
miHelp(TMenuItem) -> "&Help"
Helpindex1(TMenuItem) -> "Cheat Engine Help"
miLuaDocumentation(TMenuItem) -> "Lua documentation"
miTutorial(TMenuItem) -> "Cheat Engine Tutorial"
MenuItem12(TMenuItem) -> "Cheat Engine Tutorial (64-Bit)"
MenuItem15(TMenuItem) -> "Cheat Engine Tutorial Games"
miEnableLCLDebug(TMenuItem) -> "Generate errorlogs"
N8(TMenuItem) -> "-"
miAbout(TMenuItem) -> "About"
pmTablist(TPopupMenu)
(TMenuItem) -> ""
miRenameTab(TMenuItem) -> "Rename"
miTablistSeperator(TMenuItem) -> "-"
miCloseTab(TMenuItem) -> "Close tab"
pmValueType(TPopupMenu)
(TMenuItem) -> ""
miDefineNewCustomType(TMenuItem) -> "Define new custom type (Auto Assembler)"
miDefineNewCustomTypeLua(TMenuItem) -> "Define new custom type (LUA)"
miEditCustomType(TMenuItem) -> "Edit selected custom type"
miDeleteCustomType(TMenuItem) -> "Delete selected custom type"
miShowCustomTypeDebug(TMenuItem) -> "Show custom type debug info"
ColorDialog1(TColorDialog)
pmResetRange(TPopupMenu)
(TMenuItem) -> ""
miResetRange(TMenuItem) -> "Reset range"
pmScanRegion(TPopupMenu)
(TMenuItem) -> ""
miPresetAll(TMenuItem) -> "Preset: Scan all memory"
miPresetWritable(TMenuItem) -> "Preset: Scan writable memory"
MainMenu2(TMainMenu)
(TMenuItem) -> ""
tLuaGCPassive(TTimer)
tLuaGCActive(TTimer)
mfImageList(TImageList)
frmAutoInject(TfrmAutoInject) -> "Lua script: Cheat Table"
Panel1(TPanel) -> ""
Panel3(TPanel) -> ""
btnExecute(TButton) -> "Execute script"
Panel2(TPanel) -> ""
MainMenu1(TMainMenu)
(TMenuItem) -> ""
File1(TMenuItem) -> "File"
miNewWindow(TMenuItem) -> "New Window"
miNewTab(TMenuItem) -> "New Tab"
Load1(TMenuItem) -> "Open"
Save1(TMenuItem) -> "Save"
SaveAs1(TMenuItem) -> "Save As..."
miLuaSyntaxCheck(TMenuItem) -> "Syntax Check"
Assigntocurrentcheattable1(TMenuItem) -> "Assign to current cheat table"
N2(TMenuItem) -> "-"
Exit1(TMenuItem) -> "Exit"
View1(TMenuItem) -> "View"
Syntaxhighlighting1(TMenuItem) -> "Syntax highlighting"
MenuItem3(TMenuItem) -> "Auto assembler syntax highlighting preferences"
MenuItem2(TMenuItem) -> "Lua syntax highlighting preferences"
MenuItem1(TMenuItem) -> "C highlighting preferences"
AAPref1(TMenuItem) -> "Preferences"
emplate1(TMenuItem) -> "Template"
Codeinjection1(TMenuItem) -> "Code injection"
APIHook1(TMenuItem) -> "API Hook"
Coderelocation1(TMenuItem) -> "Code relocation"
miCallLua(TMenuItem) -> "Call CE lua function"
menuAOBInjection(TMenuItem) -> "AOB Injection"
menuFullInjection(TMenuItem) -> "Full Injection"
CheatTablecompliantcodee1(TMenuItem) -> "Cheat Table framework code"
Inject1(TMenuItem) -> "Inject"
Injectincurrentprocess1(TMenuItem) -> "Inject into current process"
Injectintocurrentprocessandexecute1(TMenuItem) -> "Inject into current process and execute"
OpenDialog1(TOpenDialog)
SaveDialog1(TSaveDialog)
PopupMenu1(TPopupMenu)
(TMenuItem) -> ""
miCut(TMenuItem) -> "Cu&t"
miCopy(TMenuItem) -> "&Copy"
miPaste(TMenuItem) -> "&Paste"
miUndo(TMenuItem) -> "&Undo"
miRedo(TMenuItem) -> "Redo"
N6(TMenuItem) -> "-"
miFind(TMenuItem) -> "&Find..."
mifindNext(TMenuItem) -> "Find Next"
mifindPrevious(TMenuItem) -> "Find Previous"
miReplace(TMenuItem) -> "Replace"
TabMenu(TPopupMenu)
(TMenuItem) -> ""
miMoveLeft(TMenuItem) -> "Move left"
miMoveRight(TMenuItem) -> "Move right"
miRenameTab(TMenuItem) -> "Rename"
Close1(TMenuItem) -> "Close"
FindDialog1(TFindDialog)
undotimer(TTimer)
ReplaceDialog1(TReplaceDialog)
aaImageList(TImageList)
(TSynAASyn)
(TSynCppSyn)
(TSynLuaSyn)
Assemblescreen(TSynEditPlus)
(TSynBeautifier)
SynLeftGutterPartList1(TSynGutterPartList)
SynGutterMarks1(TSynGutterMarks)
SynGutterLineNumber1(TSynGutterLineNumber)
SynGutterChanges1(TSynGutterChanges)
SynGutterSeparator1(TSynGutterSeparator)
SynGutterCodeFolding1(TSynGutterCodeFolding)
SynRightGutterPartList1(TSynRightGutterPartList)
(TTimer)
(TAddresslist) -> ""
List(TTreeviewWithScroll)
(TTimer)
(TTimer)
Header(THeaderControl)
(TPopupMenu)
(TMenuItem) -> ""
(TMenuItem) -> "Sort on click"
(TTimer)
Информация по созданию плагинов для CE или связанная с ними. Плагины CE — это различные инструменты, которые позволяют расширить функционал CE.
Иногда Lua-код слишком медленный, а на asm писать слишком много, тогда на помощь придет CCODE
C inline вставки позволяют писать C-код вместо ассемблера
Справочник по C-коду можно найти в Интернете.
Примерчик будет:
{$CCODE base=EBX}
int* myHealth=base+0x4B0;
*myHealth = 999;
{$asm}
[ENABLE]
aobscanmodule(INJECT_test,Tutorial-i386.exe,29 83 B0 04 00 00)
alloc(newmem,$1000)
label(code)
label(return)
newmem:
{$CCODE base=EBX}
int* myHealth=base+0x4B0;
*myHealth = 999;
{$asm}
code:
//sub [ebx+000004B0],eax
jmp return
INJECT_test:
jmp newmem
nop
return:
registersymbol(INJECT_test)
[DISABLE]
INJECT_test:
db 29 83 B0 04 00 00
unregistersymbol(INJECT_test)
dealloc(newmem)
{
// ORIGINAL CODE - INJECTION POINT: Tutorial-i386.exe+25A6F
Tutorial-i386.exe+25A49: 8D 55 DC - lea edx,[ebp-24]
Tutorial-i386.exe+25A4C: 8D 4D F4 - lea ecx,[ebp-0C]
Tutorial-i386.exe+25A4F: E8 8C 7D FE FF - call Tutorial-i386.exe+D7E0
Tutorial-i386.exe+25A54: E8 37 E4 FD FF - call Tutorial-i386.exe+3E90
Tutorial-i386.exe+25A59: 50 - push eax
Tutorial-i386.exe+25A5A: 85 C0 - test eax,eax
Tutorial-i386.exe+25A5C: 0F 85 CE 00 00 00 - jne Tutorial-i386.exe+25B30
Tutorial-i386.exe+25A62: B8 05 00 00 00 - mov eax,00000005
Tutorial-i386.exe+25A67: E8 C4 93 FE FF - call Tutorial-i386.exe+EE30
Tutorial-i386.exe+25A6C: 83 C0 01 - add eax,01
// ---------- INJECTING HERE ----------
Tutorial-i386.exe+25A6F: 29 83 B0 04 00 00 - sub [ebx+000004B0],eax
// ---------- DONE INJECTING ----------
Tutorial-i386.exe+25A75: 8D 45 D4 - lea eax,[ebp-2C]
Tutorial-i386.exe+25A78: E8 53 DF FD FF - call Tutorial-i386.exe+39D0
Tutorial-i386.exe+25A7D: 8B 83 B0 04 00 00 - mov eax,[ebx+000004B0]
Tutorial-i386.exe+25A83: 68 FF 00 00 00 - push 000000FF
Tutorial-i386.exe+25A88: 8D 8D D4 FE FF FF - lea ecx,[ebp-0000012C]
Tutorial-i386.exe+25A8E: BA FF FF FF FF - mov edx,FFFFFFFF
Tutorial-i386.exe+25A93: E8 68 F2 FD FF - call Tutorial-i386.exe+4D00
Tutorial-i386.exe+25A98: 8D 4D D4 - lea ecx,[ebp-2C]
Tutorial-i386.exe+25A9B: 66 31 D2 - xor dx,dx
Tutorial-i386.exe+25A9E: 8D 85 D4 FE FF FF - lea eax,[ebp-0000012C]
}
\-- если процесс не открыт, то подкючиться к нему
if (getProcessIDFromProcessName("Pet Show Craze.exe")==nil) then
OpenProcess("Pet Show Craze.exe")
И здесь останови таймер пока
end
Тем самым ты подключишь процесс.
Далее жди события подключения процесса. Как его ждать? Ищем в справке
onOpenProcess(processid):
После подключения вызввай активацию записи
function onOpenProcess(processid)
SetStateRecord("Activation", true)
end
Попробуй сам расписать на бумаги логику.
Сначала проверяем открыт ли процесс.
Если нет, то открыть его. Перед тем как его открыть, то, наверно, надо подождать события его открытия onOpenProcess(processid), а после этого события активировать запись.
Или подожди до вечера пятницы. Как дома буду запущу ce 7.5. За 5 минут разберешься.
Я сейчас, пока не могу ответить нормально без cheat engibe с телефона
Наверно CE у меня 6.8.3 была на старом ноуте, с которого писал. А сейчас я с телефона, уставший с работы. С 8ми утра кодили до позднего вечера. Позже, наверно, напишу, как отдохну. Можешь написать больше вопросов
P.s Пиши, пожалуйста, мне на "ты", а то не удобно себя чувствую.
Судя по названию ошибки нет закрывающих скобок для текста.
local aa_script =
[[
Здесь текст
]]
Да, можно. Скорее всего, желательно для флагов отдельную память делать. Чтобы флаги были выровнены по адресам и не смешивались с опкодами. Можно, этого и не делать. На твое усмотрение.