protected virtual PrintfSize CollectSize() { PrintfSize size = PrintfSize.Default; if (i < format.Length - 1) { switch (format[i]) { case 'h': ++i; size = PrintfSize.Half; if (i < format.Length - 1 && format[i] == 'h') { ++i; size = PrintfSize.HalfHalf; } break; case 'l': ++i; size = PrintfSize.Long; if (i < format.Length - 1 && format[i] == 'l') { ++i; size = PrintfSize.LongLong; } break; default: return(PrintfSize.Default); } } return(size); }
protected override DataType MakeDataType(PrintfSize size, char cDomain) { if (cDomain == 'S') { return program.TypeFactory.CreatePointer(PrimitiveType.WChar, base.pointerSize); } return base.MakeDataType(size, cDomain); }
protected override DataType MakeDataType(PrintfSize size, char cDomain) { if (cDomain == 'S') { return(program.TypeFactory.CreatePointer(PrimitiveType.WChar, base.pointerSize)); } return(base.MakeDataType(size, cDomain)); }
protected override DataType MakeDataType(PrintfSize size, char cDomain) { switch (cDomain) { case 'c': return PrimitiveType.WChar; case 'C': return PrimitiveType.Char; case 's': return program.TypeFactory.CreatePointer(PrimitiveType.WChar, base.pointerSize); case 'S': return program.TypeFactory.CreatePointer(PrimitiveType.Char, base.pointerSize); } return base.MakeDataType(size, cDomain); }
protected override DataType MakeDataType(PrintfSize size, char cDomain) { switch (cDomain) { case 'c': return(PrimitiveType.WChar); case 'C': return(PrimitiveType.Char); case 's': return(program.TypeFactory.CreatePointer(PrimitiveType.WChar, base.pointerSize)); case 'S': return(program.TypeFactory.CreatePointer(PrimitiveType.Char, base.pointerSize)); } return(base.MakeDataType(size, cDomain)); }
private PrintfSize CollectSize() { PrintfSize size = PrintfSize.Default; if (i < format.Length - 1) { switch (format[i]) { case 'h': ++i; size = PrintfSize.Half; if (i < format.Length - 1 && format[i] == 'h') { ++i; size = PrintfSize.HalfHalf; } break; case 'l': ++i; size = PrintfSize.Long; if (i < format.Length - 1 && format[i] == 'l') { ++i; size = PrintfSize.LongLong; } break; case 'I': if (i < format.Length - 3) { if (format[i + 1] == '3' && format[i + 2] == '2') { i += 3; return(PrintfSize.I32); } if (format[i + 1] == '6' && format[i + 2] == '4') { i += 3; return(PrintfSize.I64); } } break; default: return(PrintfSize.Default); } } return(size); }
protected virtual DataType MakeDataType(PrintfSize size, char cDomain) { Domain domain = Domain.None; int byteSize = this.wordSize; switch (cDomain) { case 'c': switch (size) { case PrintfSize.Long: return(PrimitiveType.WChar); default: return(PrimitiveType.Char); } case 'o': case 'u': case 'x': case 'X': switch (size) { case PrintfSize.HalfHalf: byteSize = 1; break; case PrintfSize.Half: byteSize = 2; break; case PrintfSize.Long: byteSize = this.longSize; break; case PrintfSize.LongLong: byteSize = 8; break; case PrintfSize.I32: byteSize = 4; break; case PrintfSize.I64: byteSize = 8; break; } domain = Domain.UnsignedInt; break; case 'd': case 'i': switch (size) { case PrintfSize.HalfHalf: byteSize = 1; break; case PrintfSize.Half: byteSize = 2; break; case PrintfSize.Long: byteSize = this.longSize; break; case PrintfSize.LongLong: byteSize = 8; break; case PrintfSize.I32: byteSize = 4; break; case PrintfSize.I64: byteSize = 8; break; } domain = Domain.SignedInt; break; case 'a': case 'A': case 'e': case 'E': case 'f': case 'F': case 'g': case 'G': byteSize = this.doubleSize; domain = Domain.Real; break; case 'p': byteSize = this.pointerSize; domain = Domain.Pointer; break; case 's': return(program.TypeFactory.CreatePointer( size == PrintfSize.Long ? PrimitiveType.WChar : PrimitiveType.Char, this.pointerSize)); default: var el = this.services.RequireService <DecompilerEventListener>(); el.Warn( el.CreateAddressNavigator(program, addr), "The format specifier '%{0}' passed to *printf is not known.", cDomain); return(new UnknownType()); } return(PrimitiveType.Create(domain, byteSize)); }
private DataType MakeDataType(PrintfSize size, char cDomain) { Domain domain = Domain.None; int byteSize = this.wordSize; switch (cDomain) { case 'c': if (wideChars) return PrimitiveType.WChar; else return PrimitiveType.Char; case 'C': if (wideChars) return PrimitiveType.Char; else return PrimitiveType.WChar; case 'o': case 'u': case 'x': case 'X': switch (size) { case PrintfSize.HalfHalf: byteSize = 1; break; case PrintfSize.Half: byteSize = 2; break; case PrintfSize.Long: byteSize = this.longSize; break; case PrintfSize.LongLong: byteSize = 8; break; case PrintfSize.I32: byteSize = 4; break; case PrintfSize.I64: byteSize = 8; break; } domain = Domain.UnsignedInt; break; case 'd': case 'i': switch (size) { case PrintfSize.HalfHalf: byteSize = 1; break; case PrintfSize.Half: byteSize = 2; break; case PrintfSize.Long: byteSize = this.longSize; break; case PrintfSize.LongLong: byteSize = 8; break; case PrintfSize.I32: byteSize = 4; break; case PrintfSize.I64: byteSize = 8; break; } domain = Domain.SignedInt; break; case 'a': case 'A': case 'e': case 'E': case 'f': case 'F': case 'g': case 'G': domain = Domain.Real; break; case 'p': byteSize = this.pointerSize; domain = Domain.Pointer; break; } return PrimitiveType.Create(domain, byteSize); }
protected virtual DataType MakeDataType(PrintfSize size, char cDomain) { Domain domain = Domain.None; int byteSize = this.wordSize; switch (cDomain) { case 'c': switch (size) { case PrintfSize.Long: return PrimitiveType.WChar; default: return PrimitiveType.Char; } case 'o': case 'u': case 'x': case 'X': switch (size) { case PrintfSize.HalfHalf: byteSize = 1; break; case PrintfSize.Half: byteSize = 2; break; case PrintfSize.Long: byteSize = this.longSize; break; case PrintfSize.LongLong: byteSize = 8; break; case PrintfSize.I32: byteSize = 4; break; case PrintfSize.I64: byteSize = 8; break; } domain = Domain.UnsignedInt; break; case 'd': case 'i': switch (size) { case PrintfSize.HalfHalf: byteSize = 1; break; case PrintfSize.Half: byteSize = 2; break; case PrintfSize.Long: byteSize = this.longSize; break; case PrintfSize.LongLong: byteSize = 8; break; case PrintfSize.I32: byteSize = 4; break; case PrintfSize.I64: byteSize = 8; break; } domain = Domain.SignedInt; break; case 'a': case 'A': case 'e': case 'E': case 'f': case 'F': case 'g': case 'G': byteSize = this.doubleSize; domain = Domain.Real; break; case 'p': byteSize = this.pointerSize; domain = Domain.Pointer; break; case 's': return program.TypeFactory.CreatePointer( size == PrintfSize.Long ? PrimitiveType.WChar : PrimitiveType.Char, this.pointerSize); default: var el = this.services.RequireService<DecompilerEventListener>(); el.Warn( el.CreateAddressNavigator(program, addr), "The format specifier '%{0}' passed to *printf is not known.", cDomain); return new UnknownType(); } return PrimitiveType.Create(domain, byteSize); }
private DataType MakeDataType(PrintfSize size, char cDomain) { Domain domain = Domain.None; int byteSize = this.wordSize; switch (cDomain) { case 'c': if (wideChars) { return(PrimitiveType.WChar); } else { return(PrimitiveType.Char); } case 'C': if (wideChars) { return(PrimitiveType.Char); } else { return(PrimitiveType.WChar); } case 'o': case 'u': case 'x': case 'X': switch (size) { case PrintfSize.HalfHalf: byteSize = 1; break; case PrintfSize.Half: byteSize = 2; break; case PrintfSize.Long: byteSize = this.longSize; break; case PrintfSize.LongLong: byteSize = 8; break; case PrintfSize.I32: byteSize = 4; break; case PrintfSize.I64: byteSize = 8; break; } domain = Domain.UnsignedInt; break; case 'd': case 'i': switch (size) { case PrintfSize.HalfHalf: byteSize = 1; break; case PrintfSize.Half: byteSize = 2; break; case PrintfSize.Long: byteSize = this.longSize; break; case PrintfSize.LongLong: byteSize = 8; break; case PrintfSize.I32: byteSize = 4; break; case PrintfSize.I64: byteSize = 8; break; } domain = Domain.SignedInt; break; case 'a': case 'A': case 'e': case 'E': case 'f': case 'F': case 'g': case 'G': domain = Domain.Real; break; case 'p': byteSize = this.pointerSize; domain = Domain.Pointer; break; } return(PrimitiveType.Create(domain, byteSize)); }