public ARefStringArray AllSymbols; //filled at the end with all known symbols (allocs, labels, kallocs, aobscan results, defines that are addresses, etc...) #endregion #region Constructor public ADisableInfo() { Allocs = new AAllocArray(); RegisteredSymbols = new AStringArray(); Exceptions = new UArrayManager <Exception>(); CCodeSymbols = new ASymbolHandler(); DoNotFreeCCodeSymbols = false; AllSymbols = new ARefStringArray(); }
public static void InitTools(ASymbolHandler symbolHandler) { if (Initiated) { return; } Initiated = true; SymbolHandler = symbolHandler; Assembler = new AAssembler(SymbolHandler); AutoAssembler = new AAutoAssembler(Assembler); Disassembler = new ADisassembler(SymbolHandler); ByteInterpreter = new AByteInterpreter(SymbolHandler); SelfSymbolHandler = new ASymbolHandler(); SelfSymbolHandler.Process = new AProcessSharp(System.Diagnostics.Process.GetCurrentProcess().Id, AMemoryType.Remote); }
public AAssembler(ASymbolHandler symbolHandler) { SymbolHandler = symbolHandler; Is64Bit = ANative.IsProcessId64Bit(System.Diagnostics.Process.GetCurrentProcess().Id) == 1; OpCodes = AOpCodes.GetOpCodes(); Parameter1 = 0; Parameter2 = 0; Parameter3 = 0; OpCodeNr = 0; AssemblerIndex = new AIndexArray(LETTER_COUNT); var lastEntry = 0; AIndex lastIndex = null; for (var i = 0; i < AssemblerIndex.Length; i++) { AssemblerIndex[i].StartEntry = -1; AssemblerIndex[i].NextEntry = -1; AssemblerIndex[i].SubIndex = null; for (var j = lastEntry; j < OpCodeCount; j++) { if (OpCodes[j].Mnemonic[0] == 'A' + i) { // found the first entry with this as first character if (lastIndex != null) { lastIndex.NextEntry = j; } lastIndex = AssemblerIndex[i]; AssemblerIndex[i].StartEntry = j; AssemblerIndex[i].SubIndex = null; // default initialization lastEntry = j; break; } if (OpCodes[j].Mnemonic[0] > 'A' + i) { break; // passed it } } } if (AssemblerIndex.Last.StartEntry != -1) { AssemblerIndex.Last.NextEntry = OpCodeCount; } // fill in the subIndexes for (var i = 0; i < AssemblerIndex.Length; i++) { if (AssemblerIndex[i].StartEntry == -1) { continue; } // initialize subIndex AssemblerIndex[i].SubIndex = new AIndexArray(LETTER_COUNT); for (var j = 0; j < AssemblerIndex.Length; j++) { AssemblerIndex[i].SubIndex[j].StartEntry = -1; AssemblerIndex[i].SubIndex[j].NextEntry = -1; AssemblerIndex[i].SubIndex[j].SubIndex = null; } lastIndex = null; if (AssemblerIndex[i].NextEntry == -1) // last one in the list didn't get a assignment { AssemblerIndex[i].NextEntry = OpCodeCount + 1; } for (var j = 0; j < AssemblerIndex.Length; j++) { for (var k = AssemblerIndex[i].StartEntry; k < AssemblerIndex[i].NextEntry - 1; k++) { if (OpCodes[k].Mnemonic[1] == 'A' + j) { if (lastIndex != null) { lastIndex.NextEntry = k; } lastIndex = AssemblerIndex[i].SubIndex[j]; AssemblerIndex[i].SubIndex[j].StartEntry = k; break; } } } } Assembler = new ASingleLineAssembler(this); }
public AByteInterpreter(ASymbolHandler symbolHandler) { IsDisposed = false; SymbolHandler = symbolHandler; }