diff --git a/CSharp/Plugins/UniversalEditor.Plugins.Executable/Converters/ExecutableToFileSystemConverter.cs b/CSharp/Plugins/UniversalEditor.Plugins.Executable/Converters/ExecutableToFileSystemConverter.cs
new file mode 100644
index 00000000..4460dcad
--- /dev/null
+++ b/CSharp/Plugins/UniversalEditor.Plugins.Executable/Converters/ExecutableToFileSystemConverter.cs
@@ -0,0 +1,54 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using UniversalEditor.ObjectModels.Executable;
+using UniversalEditor.ObjectModels.FileSystem;
+
+namespace UniversalEditor.Converters
+{
+ public class ExecutableToFileSystemConverter : Converter
+ {
+ private static ConverterReference _cr = null;
+ public override ConverterReference MakeReference()
+ {
+ if (_cr == null)
+ {
+ _cr = base.MakeReference();
+ _cr.Capabilities.Add(typeof(FileSystemObjectModel), typeof(ExecutableObjectModel));
+ _cr.Capabilities.Add(typeof(ExecutableObjectModel), typeof(FileSystemObjectModel));
+ }
+ return _cr;
+ }
+ public override void Convert(ObjectModel from, ObjectModel to)
+ {
+ if (from is ExecutableObjectModel && to is FileSystemObjectModel)
+ {
+ ExecutableObjectModel exe = (from as ExecutableObjectModel);
+ FileSystemObjectModel fsom = (to as FileSystemObjectModel);
+ foreach (ExecutableSection section in exe.Sections)
+ {
+ fsom.Files.Add(section.Name, section.Data);
+ }
+
+ // TODO: load resources (?)
+ return;
+ }
+ else if (from is FileSystemObjectModel && to is ExecutableObjectModel)
+ {
+ FileSystemObjectModel fsom = (from as FileSystemObjectModel);
+ ExecutableObjectModel exe = (to as ExecutableObjectModel);
+
+ foreach (File file in fsom.Files)
+ {
+ ExecutableSection section = new ExecutableSection();
+ section.Name = file.Name;
+ section.Data = file.GetDataAsByteArray();
+ exe.Sections.Add(section);
+ }
+ return;
+ }
+ throw new ObjectModelNotSupportedException();
+ }
+ }
+}
diff --git a/CSharp/Plugins/UniversalEditor.Plugins.Executable/DataFormats/Executable/ELF/ELFCapacity.cs b/CSharp/Plugins/UniversalEditor.Plugins.Executable/DataFormats/Executable/ELF/ELFCapacity.cs
new file mode 100644
index 00000000..bfde2ef3
--- /dev/null
+++ b/CSharp/Plugins/UniversalEditor.Plugins.Executable/DataFormats/Executable/ELF/ELFCapacity.cs
@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace UniversalEditor.DataFormats.Executable.ELF
+{
+ public enum ELFCapacity : byte
+ {
+ elfInvalid = 0,
+ elf32Bit = 1,
+ elf64Bit = 2
+ }
+}
diff --git a/CSharp/Plugins/UniversalEditor.Plugins.Executable/DataFormats/Executable/ELF/ELFDataFormat.cs b/CSharp/Plugins/UniversalEditor.Plugins.Executable/DataFormats/Executable/ELF/ELFDataFormat.cs
new file mode 100644
index 00000000..3768ead8
--- /dev/null
+++ b/CSharp/Plugins/UniversalEditor.Plugins.Executable/DataFormats/Executable/ELF/ELFDataFormat.cs
@@ -0,0 +1,238 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+using UniversalEditor.IO;
+using UniversalEditor.ObjectModels.Executable;
+using UniversalEditor.ObjectModels.FileSystem;
+
+namespace UniversalEditor.DataFormats.Executable.ELF
+{
+ public class ELFDataFormat : DataFormat
+ {
+ private const byte EV_CURRENT = 1;
+
+ private static DataFormatReference _dfr = null;
+ public override DataFormatReference MakeReference()
+ {
+ if (_dfr == null)
+ {
+ _dfr = base.MakeReference();
+ _dfr.Capabilities.Add(typeof(ExecutableObjectModel), DataFormatCapabilities.All);
+ _dfr.Filters.Add("Executable and Linkable Format", new byte?[][] { new byte?[] { (byte)0x7F, (byte)'E', (byte)'L', (byte)'F' } }, new string[] { "*.elf" });
+ }
+ return _dfr;
+ }
+
+ private ELFCapacity mvarCapacity = ELFCapacity.elf32Bit;
+ public ELFCapacity Capacity { get { return mvarCapacity; } set { mvarCapacity = value; } }
+
+ private ELFEncoding mvarEncoding = ELFEncoding.TwosComplementLSB;
+ public ELFEncoding Encoding { get { return mvarEncoding; } set { mvarEncoding = value; } }
+
+ private ELFMachine mvarMachine = ELFMachine.None;
+ ///
+ /// Specifies the required architecture for the executable file.
+ ///
+ public ELFMachine Machine { get { return mvarMachine; } set { mvarMachine = value; } }
+
+ private ELFObjectFileType mvarObjectFileType = ELFObjectFileType.None;
+ ///
+ /// Identifies the object file type.
+ ///
+ public ELFObjectFileType ObjectFileType { get { return mvarObjectFileType; } set { mvarObjectFileType = value; } }
+
+ private byte mvarFormatVersion = EV_CURRENT;
+ public byte FormatVersion { get { return mvarFormatVersion; } set { mvarFormatVersion = value; } }
+
+ /*
+ Elf32_Addr = Unsigned 4 byte program address
+ Elf32_Half = Unsigned 2 byte integer
+ Elf32_Off = Unsigned 4 byte file offset
+ Elf32_Sword = Signed 4 byte integer
+ Elf32_Word = Unsigned 4 byte integer
+ unsigned char = Unsigned 1 byte integer
+ */
+
+ private struct ELFSectionEntry
+ {
+ public string name;
+ ///
+ /// This member specifies the name of the section. Its value is an index into
+ /// the section header string table section, giving the location of a
+ /// null-terminated string.
+ ///
+ public uint nameindex;
+ ///
+ /// This member categorizes the section’s contents and semantics. Section types
+ /// and their descriptions appear below.
+ ///
+ public ELFSectionType type;
+ ///
+ /// Sections support 1-bit flags that describe miscellaneous attributes.
+ ///
+ public ELFSectionFlags flags;
+ ///
+ /// If the section will appear in the memory image of a process, this member
+ /// gives the address at which the section’s first byte should reside.
+ /// Otherwise, the member contains 0.
+ ///
+ public uint addr;
+ ///
+ /// This member’s value gives the byte offset from the beginning of the file
+ /// to the first byte in the section. One section type, SHT_NOBITS described
+ /// below, occupies no space in the file, and its sh_offset member locates
+ /// the conceptual placement in the file.
+ ///
+ public uint offset;
+ ///
+ /// This member gives the section’s size in bytes. Unless the section type is
+ /// SHT_NOBITS, the section occupies sh_size bytes in the file. A section of
+ /// type SHT_NOBITS may have a non-zero size, but it occupies no space in the
+ /// file.
+ ///
+ public uint size;
+ ///
+ /// This member holds a section header table index link, whose interpretation
+ /// depends on the section type. A table below describes the values.
+ ///
+ public uint link;
+ ///
+ /// This member holds extra information, whose interpretation depends on the
+ /// section type. A table below describes the values.
+ ///
+ public uint info;
+ ///
+ /// Some sections have address alignment constraints. For example, if a
+ /// section holds a doubleword, the system must ensure doubleword alignment
+ /// for the entire section. That is, the value of sh_addr must be congruent
+ /// to 0, modulo the value of sh_addralign. Currently, only 0 and positive
+ /// integral powers of two are allowed. Values 0 and 1 mean the section has
+ /// no alignment constraints.
+ ///
+ public uint addralign;
+ ///
+ /// Some sections hold a table of fixed-size entries, such as a symbol table.
+ /// For such a section, this member gives the size in bytes of each entry.
+ /// The member contains 0 if the section does not hold a table of fixed-size
+ /// entries.
+ ///
+ public uint entsize;
+ }
+
+ protected override void LoadInternal(ref ObjectModel objectModel)
+ {
+ ExecutableObjectModel exe = (objectModel as ExecutableObjectModel);
+ if (exe == null) throw new ObjectModelNotSupportedException();
+
+ Reader br = base.Accessor.Reader;
+ long baseoffset = br.Accessor.Position;
+
+ #region Header
+ #region e_ident
+ {
+ byte signature1 = br.ReadByte();
+ string signature2 = br.ReadFixedLengthString(3);
+ if (signature1 != 0x7F || signature2 != "ELF") throw new InvalidDataFormatException("File does not begin with 0x7F, \"ELF\"");
+
+ mvarCapacity = (ELFCapacity)br.ReadByte();
+ mvarEncoding = (ELFEncoding)br.ReadByte();
+ mvarFormatVersion = br.ReadByte();
+ byte[] padding = br.ReadBytes(8);
+ byte nident = br.ReadByte(); // should be 16
+ // if (nident != 16) throw new InvalidDataFormatException("n_ident is not equal to 16");
+ }
+ #endregion
+ mvarObjectFileType = (ELFObjectFileType)br.ReadUInt16();
+ mvarMachine = (ELFMachine)br.ReadUInt16();
+ uint e_version = br.ReadUInt32();
+
+ // This member gives the virtual address to which the system first transfers
+ // control, thus starting the process. If the file has no associated entry
+ // point, this member holds zero.
+ uint e_entry = br.ReadUInt32();
+
+ // This member holds the program header table’s file offset in bytes. If the
+ // file has no program header table, this member holds zero.
+ uint e_phoff = br.ReadUInt32();
+
+ // This member holds the section header table’s file offset in bytes. If the
+ // file has no section header table, this member holds zero.
+ uint e_shoff = br.ReadUInt32();
+
+ // This member holds processor-specific flags associated with the file. Flag
+ // names take the form EF_machine_flag. See "Machine Information" for flag
+ // definitions.
+ uint e_flags = br.ReadUInt32();
+
+ // This member holds the ELF header’s size in bytes.
+ ushort e_ehsize = br.ReadUInt16();
+
+ // This member holds the size in bytes of one entry in the file’s program
+ // header table; all entries are the same size.
+ ushort e_phentsize = br.ReadUInt16();
+
+ // This member holds the number of entries in the program header table. Thus
+ // the product of e_phentsize and e_phnum gives the table’s size in bytes. If a
+ // file has no program header table, e_phnum holds the value zero.
+ ushort e_phnum = br.ReadUInt16();
+
+ // This member holds a section header’s size in bytes. A section header is one
+ // entry in the section header table; all entries are the same size.
+ ushort e_shentsize = br.ReadUInt16();
+
+ // This member holds the number of entries in the section header table. Thus
+ // the product of e_shentsize and e_shnum gives the section header table's size
+ // in bytes. If a file has no section header table, e_shnum holds the value
+ // zero.
+ ushort e_shnum = br.ReadUInt16();
+
+ // This member holds the section header table index of the entry associated with
+ // the section name string table. If the file has no section name string table,
+ // this member holds the value SHN_UNDEF.
+ ushort e_shstrndx = br.ReadUInt16();
+ #endregion
+ #region Section Table
+ br.Accessor.Position = baseoffset + e_shoff;
+ List sections = new List();
+ for (ushort i = 0; i < e_shnum; i++)
+ {
+ ELFSectionEntry sh = new ELFSectionEntry();
+ sh.nameindex = br.ReadUInt32();
+ sh.type = (ELFSectionType)br.ReadUInt32();
+ sh.flags = (ELFSectionFlags)br.ReadUInt32();
+ sh.addr = br.ReadUInt32();
+ sh.offset = br.ReadUInt32();
+ sh.size = br.ReadUInt32();
+ sh.link = br.ReadUInt32();
+ sh.info = br.ReadUInt32();
+ sh.addralign = br.ReadUInt32();
+ sh.entsize = br.ReadUInt32();
+ sections.Add(sh);
+ }
+ #endregion
+
+ // find the section header string table
+ if (e_shstrndx > 0)
+ {
+ ELFSectionEntry shstr = sections[e_shstrndx];
+ long pos = br.Accessor.Position;
+ long stroffset = baseoffset + shstr.offset;
+ for (int i = 0; i < sections.Count; i++)
+ {
+ ELFSectionEntry entry = sections[i];
+ br.Accessor.Position = stroffset + entry.nameindex;
+ entry.name = br.ReadNullTerminatedString();
+ sections[i] = entry;
+ }
+ br.Accessor.Position = pos;
+ }
+ }
+
+ protected override void SaveInternal(ObjectModel objectModel)
+ {
+
+ }
+ }
+}
diff --git a/CSharp/Plugins/UniversalEditor.Plugins.Executable/DataFormats/Executable/ELF/ELFEncoding.cs b/CSharp/Plugins/UniversalEditor.Plugins.Executable/DataFormats/Executable/ELF/ELFEncoding.cs
new file mode 100644
index 00000000..ab6941fd
--- /dev/null
+++ b/CSharp/Plugins/UniversalEditor.Plugins.Executable/DataFormats/Executable/ELF/ELFEncoding.cs
@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace UniversalEditor.DataFormats.Executable.ELF
+{
+ public enum ELFEncoding
+ {
+ None = 0,
+ TwosComplementLSB = 1,
+ TwosComplementMSB = 2
+ }
+}
diff --git a/CSharp/Plugins/UniversalEditor.Plugins.Executable/DataFormats/Executable/ELF/ELFMachine.cs b/CSharp/Plugins/UniversalEditor.Plugins.Executable/DataFormats/Executable/ELF/ELFMachine.cs
new file mode 100644
index 00000000..a2524c32
--- /dev/null
+++ b/CSharp/Plugins/UniversalEditor.Plugins.Executable/DataFormats/Executable/ELF/ELFMachine.cs
@@ -0,0 +1,43 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace UniversalEditor.DataFormats.Executable.ELF
+{
+ ///
+ /// Specifies the required architecture for the executable file.
+ ///
+ public enum ELFMachine : ushort
+ {
+ None = 0,
+ ///
+ /// AT&T WE 32100
+ ///
+ M32 = 1,
+ ///
+ /// SPARC
+ ///
+ SPARC = 2,
+ ///
+ /// Intel 80386
+ ///
+ Intel80386 = 3,
+ ///
+ /// Motorola 68K
+ ///
+ Motorola68000 = 4,
+ ///
+ /// Motorola 88K
+ ///
+ Motorola88000 = 5,
+ ///
+ /// Intel 80860
+ ///
+ Intel80860 = 7,
+ ///
+ /// MIPS RS3000
+ ///
+ MIPS = 8
+ }
+}
diff --git a/CSharp/Plugins/UniversalEditor.Plugins.Executable/DataFormats/Executable/ELF/ELFObjectFileType.cs b/CSharp/Plugins/UniversalEditor.Plugins.Executable/DataFormats/Executable/ELF/ELFObjectFileType.cs
new file mode 100644
index 00000000..17dc7def
--- /dev/null
+++ b/CSharp/Plugins/UniversalEditor.Plugins.Executable/DataFormats/Executable/ELF/ELFObjectFileType.cs
@@ -0,0 +1,42 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace UniversalEditor.DataFormats.Executable.ELF
+{
+ ///
+ /// Identifies the object file type.
+ ///
+ public enum ELFObjectFileType : ushort
+ {
+ ///
+ /// No file type
+ ///
+ None = 0,
+ ///
+ /// Relocatable file
+ ///
+ Relocatable = 1,
+ ///
+ /// Executable file
+ ///
+ Executable = 2,
+ ///
+ /// Shared object file
+ ///
+ SharedObject = 3,
+ ///
+ /// Core file
+ ///
+ Core = 4,
+ ///
+ /// Processor-specific
+ ///
+ ProcessorSpecificFF00 = 0xFF00,
+ ///
+ /// Processor-specific
+ ///
+ ProcessorSpecificFFFF = 0xFFFF
+ }
+}
diff --git a/CSharp/Plugins/UniversalEditor.Plugins.Executable/DataFormats/Executable/ELF/ELFSectionFlags.cs b/CSharp/Plugins/UniversalEditor.Plugins.Executable/DataFormats/Executable/ELF/ELFSectionFlags.cs
new file mode 100644
index 00000000..ac853f7f
--- /dev/null
+++ b/CSharp/Plugins/UniversalEditor.Plugins.Executable/DataFormats/Executable/ELF/ELFSectionFlags.cs
@@ -0,0 +1,30 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace UniversalEditor.DataFormats.Executable.ELF
+{
+ [Flags()]
+ public enum ELFSectionFlags : uint
+ {
+ ///
+ /// The section contains data that should be writable during process execution.
+ ///
+ Writable = 0x1,
+ ///
+ /// The section occupies memory during process execution. Some control sections do
+ /// not reside in the memory image of an object file; this attribute is off for
+ /// those sections.
+ ///
+ Allocated = 0x2,
+ ///
+ /// The section contains executable machine instructions.
+ ///
+ Executable = 0x4,
+ ///
+ /// All bits included in this mask are reserved for processor-specific semantics.
+ ///
+ ProcessorSpecificMask = 0xF0000000
+ }
+}
diff --git a/CSharp/Plugins/UniversalEditor.Plugins.Executable/DataFormats/Executable/ELF/ELFSectionType.cs b/CSharp/Plugins/UniversalEditor.Plugins.Executable/DataFormats/Executable/ELF/ELFSectionType.cs
new file mode 100644
index 00000000..1811043e
--- /dev/null
+++ b/CSharp/Plugins/UniversalEditor.Plugins.Executable/DataFormats/Executable/ELF/ELFSectionType.cs
@@ -0,0 +1,105 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace UniversalEditor.DataFormats.Executable.ELF
+{
+ public enum ELFSectionType : uint
+ {
+ ///
+ /// This value marks the section header as inactive; it does not have an associated
+ /// section. Other members of the section header have undefined values.
+ ///
+ Null = 0,
+ ///
+ /// The section holds information defined by the program, whose format and meaning
+ /// are determined solely by the program.
+ ///
+ ProgramSpecific = 1,
+ ///
+ /// These sections hold a symbol table. Currently, an object file may have only one
+ /// section of each type, but this restriction may be relaxed in the future.
+ /// Typically, SHT_SYMTAB provides symbols for link editing, though it may also be
+ /// used for dynamic linking. As a complete symbol table, it may contain many
+ /// symbols unnecessary for dynamic linking. Consequently, an object file may also
+ /// contain a SHT_DYNSYM section, which holds a minimal set of dynamic linking
+ /// symbols, to save space.
+ ///
+ SymbolTable = 2,
+ ///
+ /// The section holds a string table. An object file may have multiple string table
+ /// sections.
+ ///
+ StringTable = 3,
+ ///
+ /// The section holds relocation entries with explicit addends, such as type
+ /// Elf32_Rela for the 32-bit class of object files. An object file may have
+ /// multiple relocation sections.
+ ///
+ RelocationWithExplicitAddends = 4,
+ ///
+ /// The section holds a symbol hash table. All objects participating in dynamic
+ /// linking must contain a symbol hash table. Currently, an object file may have
+ /// only one hash table, but this restriction may be relaxed in the future.
+ ///
+ SymbolHashTable = 5,
+ ///
+ /// The section holds information for dynamic linking. Currently, an object file
+ /// may have only one dynamic section, but this restriction may be relaxed in the
+ /// future.
+ ///
+ DynamicLinking = 6,
+ ///
+ /// The section holds information that marks the file in some way.
+ ///
+ Note = 7,
+ ///
+ /// A section of this type occupies no space in the file but otherwise resembles
+ /// SHT_PROGBITS. Although this section contains no bytes, the sh_offset member
+ /// contains the conceptual file offset.
+ ///
+ NoBits = 8,
+ ///
+ /// The section holds relocation entries without explicit addends, such as type
+ /// Elf32_Rel for the 32-bit class of object files. An object file may have multiple
+ /// relocation sections.
+ ///
+ Relocation = 9,
+ ///
+ /// This section type is reserved but has unspecified semantics. Programs that
+ /// contain a section of this type do not conform to the ABI.
+ ///
+ ShLib = 10,
+ ///
+ /// These sections hold a symbol table. Currently, an object file may have only one
+ /// section of each type, but this restriction may be relaxed in the future.
+ /// Typically, SHT_SYMTAB provides symbols for link editing, though it may also be
+ /// used for dynamic linking. As a complete symbol table, it may contain many
+ /// symbols unnecessary for dynamic linking. Consequently, an object file may also
+ /// contain a SHT_DYNSYM section, which holds a minimal set of dynamic linking
+ /// symbols, to save space.
+ ///
+ DynamicSymbolTable = 11,
+ ///
+ /// Values in this inclusive range are reserved for processor-specific semantics.
+ ///
+ ProcessorSpecificLo = 0x70000000,
+ ///
+ /// Values in this inclusive range are reserved for processor-specific semantics.
+ ///
+ ProcessorSpecificHi = 0x7FFFFFFF,
+ ///
+ /// This value specifies the lower bound of the range of indexes reserved for
+ /// application programs.
+ ///
+ UserSpecificLo = 0x80000000,
+ ///
+ /// This value specifies the upper bound of the range of indexes reserved for
+ /// application programs. Section types between SHT_LOUSER and SHT_HIUSER may be
+ /// used by the application, without conflicting with current or future
+ /// system-defined section types.
+ ///
+ UserSpecificHi = 0xFFFFFFFF
+ }
+}
diff --git a/CSharp/Plugins/UniversalEditor.Plugins.Executable/DataFormats/Executable/ELF/ELFSpecialSectionIndex.cs b/CSharp/Plugins/UniversalEditor.Plugins.Executable/DataFormats/Executable/ELF/ELFSpecialSectionIndex.cs
new file mode 100644
index 00000000..e9dee1a5
--- /dev/null
+++ b/CSharp/Plugins/UniversalEditor.Plugins.Executable/DataFormats/Executable/ELF/ELFSpecialSectionIndex.cs
@@ -0,0 +1,18 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace UniversalEditor.DataFormats.Executable.ELF
+{
+ public enum ELFSpecialSectionIndex
+ {
+ Undefined = 0,
+ ReservedLo = 0xFF00,
+ ProcLo = 0xFF00,
+ ProcHigh = 0xFF1F,
+ Abs = 0xFFF1,
+ Common = 0xFFF2,
+ ReservedHigh = 0xFFFF
+ }
+}
diff --git a/CSharp/Plugins/UniversalEditor.Plugins.Executable/ObjectModels/Executable/ExecutableCharacteristics.cs b/CSharp/Plugins/UniversalEditor.Plugins.Executable/ObjectModels/Executable/ExecutableCharacteristics.cs
new file mode 100644
index 00000000..59ed1047
--- /dev/null
+++ b/CSharp/Plugins/UniversalEditor.Plugins.Executable/ObjectModels/Executable/ExecutableCharacteristics.cs
@@ -0,0 +1,83 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace UniversalEditor.ObjectModels.Executable
+{
+ ///
+ /// A set of bit flags indicating attributes of the file.
+ ///
+ [Flags()]
+ public enum ExecutableCharacteristics : ushort
+ {
+ ///
+ /// No characteristics defined.
+ ///
+ None = 0,
+ ///
+ /// Relocation information stripped from a file.
+ ///
+ RelocationInformationStripped = 0x0001,
+ ///
+ /// The file is executable.
+ ///
+ ExecutableImage = 0x0002,
+ ///
+ /// Line numbers stripped from file.
+ ///
+ LineNumbersStripped = 0x0004,
+ ///
+ /// Local symbols stripped from file.
+ ///
+ LocalSymbolsStripped = 0x0008,
+ ///
+ /// Lets the OS aggressively trim the working set.
+ ///
+ AggressiveWorkingSetTrim = 0x0010,
+ ///
+ /// Lets the OS aggressively trim the working set.
+ ///
+ MinimalObject = 0x0010,
+ ///
+ /// The application can handle addresses greater than two gigabytes.
+ ///
+ UpdateObject = 0x0020,
+ ///
+ /// The application can handle addresses greater than two gigabytes.
+ ///
+ LargeAddressAware = 0x0020,
+ ///
+ /// This requires a 32-bit word machine.
+ ///
+ Require32BitWord = 0x0100,
+ ///
+ /// Debug information is stripped to a .DBG file.
+ ///
+ DebugStripped = 0x0200,
+ ///
+ /// If the image is on removable media, copy to and run from the swap file.
+ ///
+ RemovableRunFromSwap = 0x0400,
+ ///
+ /// If the image is on a network, copy to and run from the swap file.
+ ///
+ NetworkRunFromSwap = 0x0800,
+ ///
+ /// File is a system file.
+ ///
+ IsSystemFile = 0x1000,
+ ///
+ /// File is a DLL.
+ ///
+ IsDynamicLinkLibrary = 0x2000,
+ ///
+ /// The file should only be run on single-processor machines.
+ ///
+ UniprocessorOnly = 0x4000,
+ ///
+ /// Bytes of machine word are reversed
+ ///
+ ReverseByteOrder = 0x8000
+ }
+}
diff --git a/CSharp/Plugins/UniversalEditor.Plugins.Executable/ObjectModels/Executable/ExecutableFunctionCall.cs b/CSharp/Plugins/UniversalEditor.Plugins.Executable/ObjectModels/Executable/ExecutableFunctionCall.cs
new file mode 100644
index 00000000..46f20389
--- /dev/null
+++ b/CSharp/Plugins/UniversalEditor.Plugins.Executable/ObjectModels/Executable/ExecutableFunctionCall.cs
@@ -0,0 +1,54 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace UniversalEditor.ObjectModels.Executable
+{
+ public class ExecutableFunctionCall : ICloneable
+ {
+ public class ExecutableFunctionCallCollection
+ : System.Collections.ObjectModel.Collection
+ {
+ }
+
+ private string mvarLibraryName = String.Empty;
+ public string LibraryName { get { return mvarLibraryName; } set { mvarLibraryName = value; } }
+
+ private string mvarFunctionName = String.Empty;
+ public string FunctionName { get { return mvarFunctionName; } set { mvarFunctionName = value; } }
+
+ private List