public ProcedureDialogInteractor(IProcessorArchitecture arch, Procedure_v1 proc)
 {
     this.arch = arch;
     this.proc = proc;
     if (proc.Signature != null && proc.Signature.Arguments == null)
     {
         proc.Signature.Arguments = new Argument_v1[0];
     }
 }
		public void SudWrite()
		{
			Project_v1 ud = new Project_v1();
			ud.Input.Address = "0x1000:0x0";
			ud.Output.DisassemblyFilename = "foo.asm";
			ud.Output.IntermediateFilename = "foo.cod";
			Procedure_v1 proc = new Procedure_v1();
			proc.Name = "foo";
			proc.Signature = new SerializedSignature
			{
				ReturnValue = new Argument_v1
				{
					Kind = new Register_v1("eax")
				},
				Arguments = new Argument_v1[]
				{
					new Argument_v1
					{
						Kind = new StackVariable_v1(),
						Type = new PrimitiveType_v1(Domain.SignedInt, 4)
					},
					new Argument_v1
					{
						Kind = new StackVariable_v1(),
						Type = new PrimitiveType_v1(Domain.SignedInt, 4)
					}
				}
			};
			ud.UserProcedures.Add(proc);

			using (FileUnitTester fut = new FileUnitTester("Core/SudWrite.txt"))
			{
			    var writer = new FilteringXmlWriter(fut.TextWriter);
				writer.Formatting = System.Xml.Formatting.Indented;
                XmlSerializer ser = SerializedLibrary.CreateSerializer_v1(typeof(Project_v1));
				ser.Serialize(writer, ud);
				fut.AssertFilesEqual();
			}
		}
Example #3
0
 public void EnqueueUserProcedure(Procedure_v1 sp)
 {
     Address addr;
     if (!program.Architecture.TryParseAddress(sp.Address, out addr))
         return;
     var proc = EnsureProcedure(addr, sp.Name);
     if (sp.Signature != null)
     {
         var sser = program.Architecture.CreateProcedureSerializer(
             new TypeLibraryLoader(program.Architecture, true),
             program.Platform.DefaultCallingConvention);
         proc.Signature = sser.Deserialize(sp.Signature, proc.Frame);
     }
     if (sp.Characteristics != null)
     {
         proc.Characteristics = sp.Characteristics;
     }
     queue.Enqueue(PriorityEntryPoint, new ProcedureWorkItem(this, program, addr, sp.Name));
 }
Example #4
0
 public Procedure_v1 Serialize(Procedure proc, Address addr)
 {
     Procedure_v1 sproc = new Procedure_v1();
     sproc.Address = addr.ToString();
     sproc.Name = proc.Name;
     if (proc.Signature != null)
         sproc.Signature = Serialize(proc.Signature);
     return sproc;
 }
		private Procedure_v1 MkMalloc()
		{
			Procedure_v1 proc = new Procedure_v1
			{
				Name = "malloc",
				Signature = new SerializedSignature
				{
					Convention = "cdecl",
					ReturnValue = new Argument_v1
					{
						Kind = new Register_v1("eax"),
					},

					Arguments = new Argument_v1[] {
						new Argument_v1 {
							Name = "cb",
							Kind = new StackVariable_v1(),
						}
					}
				}
			};
			return proc;
		}
 public void Setup()
 {
     proc = new Procedure_v1();
     interactor = new TestProcedureDialogInteractor(proc);
 }
 public TestProcedureDialogInteractor(Procedure_v1 proc)
     : base(new IntelArchitecture(ProcessorMode.Protected32), proc)
 {
 }