public void printf(ThreadContext ThreadContext) { int StackPos = 1; var Format = ThreadContext.MemoryStream.SliceWithLength(ThreadContext.ReadStack(StackPos++)).ReadStringz(); var Str = ""; for (int n = 0; n < Format.Length; n++) { if (Format[n] == '%') { switch (Format[n + 1]) { case 'd': Str += ThreadContext.ReadStack(StackPos++).ToString(); n++; break; default: throw(new InvalidOperationException("Invalid format!")); } } else { Str += Format[n]; } } Console.Write("{0}", Str); }
/// <summary> /// int __getmainargs(int * _Argc, char *** _Argv, char *** _Env, int _DoWildCard, _startupinfo * _StartInfo); /// </summary> /// <param name="ThreadContext"></param> public void __getmainargs(ThreadContext ThreadContext) { var ArgcPtr = ThreadContext.ReadStack(1); var ArgvPtr = ThreadContext.ReadStack(2); var EnvPtr = ThreadContext.ReadStack(3); var DoWildCard = ThreadContext.ReadStack(4); var StartInfo = ThreadContext.ReadStack(5); ThreadContext.Memory.Write4(ArgcPtr, 0); ThreadContext.Memory.Write4(ArgvPtr, 0); }
public void _controlfp(ThreadContext ThreadContext) { var New = ThreadContext.ReadStack(1); var Mask = ThreadContext.ReadStack(2); //Console.WriteLine("_controlfp (New=0x{0:X}, Mask=0x{1:X})", New, Mask); }