public void Setup() { arch = new IntelArchitecture(ProcessorMode.Real); platform = new MsdosPlatform(null, arch); sigser = new X86ProcedureSerializer(arch, new TypeLibraryLoader(platform, true), "stdapi"); argser = new ArgumentSerializer(sigser, arch, arch.CreateFrame(), null); }
public override ProcedureSignature Deserialize(SerializedSignature ss, Core.Frame frame) { if (ss == null) { return(null); } var argser = new ArgumentSerializer(this, Architecture, frame, ss.Convention); Identifier ret = null; if (ss.ReturnValue != null) { ret = argser.DeserializeReturnValue(ss.ReturnValue); } var args = new List <Identifier>(); this.gr = 0; if (ss.Arguments != null) { for (int iArg = 0; iArg < ss.Arguments.Length; ++iArg) { var sArg = ss.Arguments[iArg]; Identifier arg = DeserializeArgument(argser, sArg); args.Add(arg); } } var sig = new ProcedureSignature(ret, args.ToArray()); return(sig); }
public void Setup() { this.sc = new ServiceContainer(); sc.AddService <IFileSystemService>(new FileSystemServiceImpl()); this.arch = new X86ArchitectureReal("x86-real-16"); this.platform = new MsdosPlatform(sc, arch); ArgumentSerializer argSer = new ArgumentSerializer(arch); svc = new SerializedService { Name = "msdos_ioctl_get_device_info", SyscallInfo = new SyscallInfo_v1 { Vector = "21", RegisterValues = new[] { new SerializedRegValue("ah", "44"), new SerializedRegValue("al", "00"), } }, Signature = new SerializedSignature { ReturnValue = argSer.Serialize( new Identifier("C", PrimitiveType.Bool, new FlagGroupStorage(Registers.eflags, (uint)FlagM.CF, "C", PrimitiveType.Byte))) } }; }
public ProcedureSignature Deserialize(SerializedSignature ss, Frame frame) { ArgumentSerializer argser = new ArgumentSerializer(this, arch, frame); Identifier ret = null; if (ss.ReturnValue != null) { ret = argser.Deserialize(ss.ReturnValue); } ArrayList args = new ArrayList(); if (ss.Arguments != null) { foreach (SerializedArgument arg in ss.Arguments) { args.Add(argser.Deserialize(arg)); } } ProcedureSignature sig = new ProcedureSignature( ret, (Identifier [])args.ToArray(typeof(Identifier))); ApplyConvention(ss, sig); return(sig); }
public void Boolean_property_with_no_value_is_set_to_true_by_default() { var serializer = new ArgumentSerializer(); var result = serializer.Deserialize<TestArgs1>(@"-switch"); Assert.IsNotNull(result); Assert.IsTrue(result.Switch); }
public void Filename() { var serializer = new ArgumentSerializer(); var result = serializer.Deserialize<TestArgs1>(@"-switch -genericstring=blah C:\filename.txt"); Assert.IsNotNull(result); Assert.IsTrue(result.Switch); Assert.AreEqual("blah", result.GenericString); }
public override ProcedureSignature Deserialize(SerializedSignature ss, Frame frame) { if (ss == null) { return(null); } this.argser = new ArgumentSerializer(this, Architecture, frame, ss.Convention); Identifier ret = null; int fpuDelta = FpuStackOffset; FpuStackOffset = 0; if (ss.ReturnValue != null) { ret = argser.DeserializeReturnValue(ss.ReturnValue); fpuDelta += FpuStackOffset; } FpuStackOffset = 0; var args = new List <Identifier>(); if (ss.Arguments != null) { if (ss.Convention == "pascal") { for (int iArg = ss.Arguments.Length - 1; iArg >= 0; --iArg) { var sArg = ss.Arguments[iArg]; var arg = DeserializeArgument(sArg, iArg, ss.Convention); args.Add(arg); } args.Reverse(); } else { for (int iArg = 0; iArg < ss.Arguments.Length; ++iArg) { var sArg = ss.Arguments[iArg]; var arg = DeserializeArgument(sArg, iArg, ss.Convention); args.Add(arg); } } fpuDelta -= FpuStackOffset; } FpuStackOffset = fpuDelta; var sig = new ProcedureSignature(ret, args.ToArray()); ApplyConvention(ss, sig); return(sig); }
public void Setup() { svc = new SerializedService(); svc.Name = "msdos_ioctl_get_device_info"; svc.SyscallInfo = new SerializedSyscallInfo(); svc.SyscallInfo.Vector = "21"; svc.SyscallInfo.RegisterValues = new SerializedRegValue[2]; svc.SyscallInfo.RegisterValues[0] = new SerializedRegValue("ah", "44"); svc.SyscallInfo.RegisterValues[1] = new SerializedRegValue("al", "00"); svc.Signature = new SerializedSignature(); ArgumentSerializer argSer = new ArgumentSerializer(null, arch, null, null); svc.Signature.ReturnValue = argSer.Serialize(new Identifier("C", PrimitiveType.Bool, new FlagGroupStorage((uint)FlagM.CF, "C", PrimitiveType.Byte))); }
public void PCEFromClientCall() { string filePath = "C:\\workspace\\FX_Project\\MTM_test\\strip_test\\Strip2\\xxx.xml"; string outPath = "C:\\workspace\\FX_Project\\MTM_test\\strip_test\\Strip2\\blob.xml"; string result = null; ArgumentContainer <string, object> argumentList = new ArgumentContainer <string, object>(); try { //deserialize from file argumentList = ArgumentSerializer.Deserialize(LoadXMLFileToString(filePath)); var settleDates = ArrayOrItemToList <DateTime>((Array)argumentList["SettleDate"]); var recAmounts = ArrayOrItemToList <decimal>((Array)argumentList["RecAmount"]); var recCurrencies = ArrayOrItemToList <string>((Array)argumentList["RecCurrency"]); var payAmounts = ArrayOrItemToList <decimal>((Array)argumentList["PayAmount"]); var payCurrencies = ArrayOrItemToList <string>((Array)argumentList["PayCurrency"]); DateTime evaluationDate = (DateTime)argumentList["EvaluationDate"]; String pceCalculationCurrency = (string)argumentList["PCECalculationCurrency"]; ITrade[] trades = ToMultipleFxForwardTrades(settleDates.ToArray(), recAmounts.ToArray(), recCurrencies.ToArray(), payAmounts.ToArray(), payCurrencies.ToArray()); result = BrTradeBlobReaderHelper.SaveTradeBlob(trades); //save result //write output using (FileStream fs = new FileStream(outPath, FileMode.Create, FileAccess.Write)) { using (StreamWriter sw = new StreamWriter(fs)) { sw.WriteLine(result); } } } catch (Exception e) { //do nothing } Assert.IsTrue(true); }
private Identifier DeserializeArgument(ArgumentSerializer argser, Argument_v1 sArg) { Identifier arg; if (sArg.Kind != null) { return(sArg.Kind.Accept(argser)); } var dtArg = sArg.Type.Accept(TypeLoader); var prim = dtArg as PrimitiveType; //if (prim != null && prim.Domain == Domain.Real) //{ // if (this.fr > 8) // { // arg = argser.Deserialize(sArg, new StackVariable_v1()); // } // else // { // arg = argser.Deserialize(sArg, new Register_v1("f" + this.fr)); // ++this.fr; // } // return arg; //} if (dtArg.Size <= 4) { if (this.gr > 3) { arg = argser.Deserialize(sArg, new StackVariable_v1()); } else { arg = argser.Deserialize(sArg, new Register_v1("r" + gr)); ++this.gr; } return(arg); } if (dtArg.Size <= 8) { if (this.gr > 9) { arg = argser.Deserialize(sArg, new StackVariable_v1()); } else { if ((gr & 1) == 0) { ++gr; } arg = argser.Deserialize(sArg, new SerializedSequence { Registers = new Register_v1[] { new Register_v1("r" + gr), new Register_v1("r" + (gr + 1)) } }); gr += 2; } return(arg); } throw new NotImplementedException(); }
public void Setup() { argser = new ArgumentSerializer(null); }
protected override bool ActionBody(BaseProcess action) { bool isProcessed = true; try { messageGenerator = GetService <IMercuryMessageBodyGenerator>(); int pageSize = GetValue <int>(ARG_PAGE_SIZE); int pageCount = GetValue <int>(ARG_PAGE_COUNT); int pageStart = GetValue <int>(ARG_PAGE_START); Guid enterpriseId = GetValue <Guid>(ARG_PAGE_ENTERPRISE_ID); operationName = GetValue <string>(ARG_OPERATION_NAME); mercuryLogin = GetValue <string>(ARG_MERCURY_LOGIN); string suffix = GetValue <string>(ARG_SUFFIX); int? iteration = GetValue <int?>(ARG_ITERATION); DateTimeOffset?beginDate = GetValue <DateTimeOffset?>(ARG_BEGIN_DATE); DateTimeOffset?endDate = GetValue <DateTimeOffset?>(ARG_END_DATE); LocalContext.SaveLog($"{MoscowDateTimeOffset().ToString()} Начало формирования запросов в систему Меркурий."); #region Проверка параметров if (pageCount <= 0) { isProcessed = false; LocalContext.SaveLog($" Количество страниц должно быть > 0."); AppendUserErrorInfo(Guid.Empty, null, UserErrorConsts.ET_VALIDATION, UserErrorConsts.StockList.RTE_MAKE_REQUEST, "Количество страниц должно быть > 0"); } if (pageSize <= 0) { isProcessed = false; LocalContext.SaveLog($" Размер страниц должно быть > 0."); AppendUserErrorInfo(Guid.Empty, null, UserErrorConsts.ET_VALIDATION, UserErrorConsts.StockList.RTE_MAKE_REQUEST, "Размер страниц должно быть > 0"); } if (pageStart <= 0) { isProcessed = false; LocalContext.SaveLog($" Начальная страница должна быть > 0."); AppendUserErrorInfo(Guid.Empty, null, UserErrorConsts.ET_VALIDATION, UserErrorConsts.StockList.RTE_MAKE_REQUEST, "Начальная страница должна быть > 0"); } Document enterpriseDoc = LocalReader.LoadDocumentByType(enterpriseId, "Enterprise"); string enterpriseGUID = (string)enterpriseDoc["GUID"]; string enterpriseCode = (string)enterpriseDoc["Code"]; if (enterpriseDoc == null) { isProcessed = false; AppendUserErrorInfo(Guid.Empty, null, UserErrorConsts.ET_VALIDATION, UserErrorConsts.StockList.VALID_NO_ENTERPRISE, $"Не найдена площадка с ИД {enterpriseId.ToString()}/{enterpriseId.ToStringNumber()}"); LocalContext.SaveLog($" Не найдена площадка с ИД {enterpriseId.ToString()}/{enterpriseId.ToStringNumber()}."); } #endregion if (isProcessed) { List <StepContext> steps = new List <StepContext>(); LocalContext.SaveLog($" Площадка для формирования запросов {enterpriseCode}."); LocalContext.SaveLog($" Стартовая страница {pageStart}, количество страниц для получения {pageCount}, размер страницы {pageSize}."); for (int i = 0; i < pageCount; i++) { LocalContext.SaveLog($" Формирование страницы {(i + pageStart - 1) * pageSize} - {(i + pageStart) * pageSize}."); StepContext requestContext = CreateStep(QueryId, MQSOperationType.COMMUNICATE); requestContext.MercuryQueueStep.Status = MQSStatus.NEW; if (iteration.HasValue) { requestContext.MercuryQueueStep.StepId = "0.0_" + iteration.Value.ToString("D3"); } else { requestContext.MercuryQueueStep.StepId = "0.0"; } requestContext.MercuryQueueStep.StepNo = LocalContext.MercuryQueueStep.StepNo + 1; requestContext.MercuryQueueStep.StepName = Consts.STEP_NAME_MERCURY_COMMUNICATE; requestContext.MercuryQueueStep.Description = "Сформирован запрос"; requestContext.MercuryQueueStep.OperationGroup = Consts.OP_GROUP_CHECK_FOR_COMPLETED_OUTBOUND + suffix; requestContext.GenerateFileNames(operationName); var req = GenerateRequest(i + pageStart, pageSize, LocalContext.MercurySettings, mercuryLogin, enterpriseGUID, enterpriseCode, beginDate, endDate); requestContext.SaveRequest(req); var args = new Dictionary <string, ActionArgument>(); args.Add("PageNo", new ActionArgument(typeof(int), "PageNo", i)); requestContext.MercuryQueueStep.Parameters = ArgumentSerializer.SerializeArguments(args); steps.Add(requestContext); LocalContext.SaveLog($" Страница {i + pageStart - 1} сформирована."); } // Сохранение информации о сгенерированных запросах using (IDatabaseConnector connector = GetService <IDatabaseConnector>()) { IMercuryQueueStepService transactionPersist = this.GetService <IMercuryQueueStepService>(connector); transactionPersist.RegisterSteps(steps); transactionPersist.SaveFinish(LocalContext.MercuryQueueStep.Id, MQSStatus.COMPLETE, "Выполнено формирование запросов.", DateTimeOffset.UtcNow); connector.Commit(); breakAutosave = true; SetValue("Status", MQSStatus.COMPLETE); } } else { LocalContext.SaveLog($" Заданы не все параметры для формирования запроса(-ов)."); LocalContext.SaveLog($" Операция отменена."); ResultDescription = "Ошибка. Не верные параметры."; } } catch (Exception e) { isProcessed = false; AppendUserErrorInfo(Guid.Empty, null, UserErrorConsts.ET_MIP, UserErrorConsts.StockList.RTE_MAKE_REQUEST, UserErrorConsts.DEFAULT_LAS_SUPPRT_ERROR); ResultDescription = "Ошибка процесса формирования запросов в систему 'Меркурий'."; LocalContext.SaveLog(e.ToString()); } LocalContext.SaveLog($"{MoscowDateTimeOffset().ToString()} Окончание формирования запросов в систему 'Меркурий'."); return(isProcessed); }