docs(control): recover AniMesh config provenance
This commit is contained in:
@@ -265,6 +265,17 @@ AniMesh/unit components, а не с одной глобальной настро
|
||||
private objects и per-tick update slots пока не восстановлены; порядок
|
||||
создания не доказывает скорость, collision algorithm или AI semantics.
|
||||
|
||||
Headless Ghidra call-site decompile уточняет configuration provenance:
|
||||
AniMesh передаёт в `LoadControlSystem` шесть 32-byte strings из одного
|
||||
configuration block по offsets `+0x80`, `+0xa0`, `+0xc0`, `+0xe0`, `+0x100` и
|
||||
`+0x120`, затем resource context и mode из owner `+0x6d8`. Returned Control
|
||||
interface сразу получает пять virtual calls, связывающих его с owner slots
|
||||
`+0x158`, `+0x160`, `+0x164`, `+0x168` и `+0x18c`; collision object затем
|
||||
связывается с `+0x170`. Это достаточное основание хранить будущий Control
|
||||
component как ordered raw-string/resource provenance, но не для присвоения
|
||||
этим строкам смысловых имён до трассировки private update methods. Extractor:
|
||||
`tools/ghidra/ExportAniMeshControlCaller.java`.
|
||||
|
||||
### Control system и physical model
|
||||
|
||||
`LoadControlSystem` загружает настройки controller-а: ограничения скорости,
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
// Emits the function containing the observed AniMesh Control-loader sequence.
|
||||
import ghidra.app.decompiler.DecompInterface;
|
||||
import ghidra.app.script.GhidraScript;
|
||||
import ghidra.program.model.address.Address;
|
||||
import ghidra.program.model.listing.Function;
|
||||
|
||||
public class ExportAniMeshControlCaller extends GhidraScript {
|
||||
@Override
|
||||
public void run() throws Exception {
|
||||
Address address = currentProgram.getAddressFactory().getDefaultAddressSpace()
|
||||
.getAddress(0x100032e7L);
|
||||
Function function = currentProgram.getFunctionManager().getFunctionContaining(address);
|
||||
println("===== AniMesh Control caller =====");
|
||||
if (function == null) { println("missing"); return; }
|
||||
println("entry=" + function.getEntryPoint());
|
||||
DecompInterface decompiler = new DecompInterface();
|
||||
decompiler.openProgram(currentProgram);
|
||||
println(decompiler.decompileFunction(function, 60, monitor).getDecompiledFunction().getC());
|
||||
decompiler.dispose();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user