diff --git a/cc/binary.go b/cc/binary.go index 630a68df3..7794eab6a 100644 --- a/cc/binary.go +++ b/cc/binary.go @@ -323,6 +323,12 @@ func (binary *binaryDecorator) link(ctx ModuleContext, flagsToBuilderFlags(flags), afterPrefixSymbols) } + if Bool(binary.baseLinker.Properties.Use_version_lib) && ctx.Host() { + versionedOutputFile := outputFile + outputFile = android.PathForModuleOut(ctx, "unversioned", fileName) + binary.injectVersionSymbol(ctx, outputFile, versionedOutputFile) + } + linkerDeps = append(linkerDeps, deps.SharedLibsDeps...) linkerDeps = append(linkerDeps, deps.LateSharedLibsDeps...) linkerDeps = append(linkerDeps, objs.tidyFiles...) diff --git a/cc/libbuildversion/Android.bp b/cc/libbuildversion/Android.bp new file mode 100644 index 000000000..fd563e6d5 --- /dev/null +++ b/cc/libbuildversion/Android.bp @@ -0,0 +1,12 @@ +cc_library_static { + name: "libbuildversion", + host_supported: true, + srcs: ["libbuildversion.cpp"], + export_include_dirs: ["include"], + cflags: ["-fvisibility=hidden"], + target: { + windows: { + enabled: true, + }, + }, +} diff --git a/cc/libbuildversion/include/build/version.h b/cc/libbuildversion/include/build/version.h new file mode 100644 index 000000000..0cc608200 --- /dev/null +++ b/cc/libbuildversion/include/build/version.h @@ -0,0 +1,30 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef BUILD_VERSION_H +#define BUILD_VERSION_H + +#include + +namespace android { +namespace build { + +std::string GetBuildNumber(); + +} // namespace build +} // namespace android + +#endif // BUILD_VERSION_H diff --git a/cc/libbuildversion/libbuildversion.cpp b/cc/libbuildversion/libbuildversion.cpp new file mode 100644 index 000000000..d80d587cd --- /dev/null +++ b/cc/libbuildversion/libbuildversion.cpp @@ -0,0 +1,55 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#ifdef __ANDROID__ +#include +#endif + +namespace android { +namespace build { + +#ifdef __ANDROID__ + +std::string GetBuildNumber() { + const prop_info* pi = __system_property_find("ro.build.version.incremental"); + if (pi == nullptr) return ""; + + std::string property_value; + __system_property_read_callback(pi, + [](void* cookie, const char*, const char* value, unsigned) { + auto property_value = reinterpret_cast(cookie); + *property_value = value; + }, + &property_value); + + return property_value; +} + +#else + +extern "C" { + char soong_build_number[128] = "SOONG BUILD NUMBER PLACEHOLDER"; +} + +std::string GetBuildNumber() { + return soong_build_number; +} + +#endif +} // namespace build +} // namespace android diff --git a/cc/libbuildversion/tests/Android.bp b/cc/libbuildversion/tests/Android.bp new file mode 100644 index 000000000..a18bc6cc7 --- /dev/null +++ b/cc/libbuildversion/tests/Android.bp @@ -0,0 +1,35 @@ +cc_defaults { + name: "build_version_test_defaults", + use_version_lib: true, + host_supported: true, + target: { + windows: { + enabled: true, + }, + }, +} + +cc_test { + name: "build_version_test", + defaults: ["build_version_test_defaults"], + srcs: ["build_version_test.cpp"], + target: { + android: { + shared_libs: ["libbuild_version_test"], + }, + not_windows: { + shared_libs: ["libbuild_version_test"], + }, + }, +} + +cc_library_shared { + name: "libbuild_version_test", + defaults: ["build_version_test_defaults"], + srcs: ["build_version_test_lib.cpp"], + target: { + windows: { + enabled: false, + }, + }, +} diff --git a/cc/libbuildversion/tests/build_version_test.cpp b/cc/libbuildversion/tests/build_version_test.cpp new file mode 100644 index 000000000..9a920654b --- /dev/null +++ b/cc/libbuildversion/tests/build_version_test.cpp @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#include + +#include + +#include "build_version_test_lib.h" + +TEST(BuildNumber, binary) { + printf("binary version: %s\n", android::build::GetBuildNumber().c_str()); + EXPECT_NE(android::build::GetBuildNumber(), "SOONG BUILD NUMBER PLACEHOLDER"); +} + + // symbol_inject doesn't support dlls +#ifndef __WIN32__ +TEST(BuildNumber, library) { + printf("shared library version: %s\n", LibGetBuildNumber().c_str()); + EXPECT_NE(LibGetBuildNumber(), "SOONG BUILD NUMBER PLACEHOLDER"); +} +#endif diff --git a/cc/libbuildversion/tests/build_version_test_lib.cpp b/cc/libbuildversion/tests/build_version_test_lib.cpp new file mode 100644 index 000000000..2876a63c7 --- /dev/null +++ b/cc/libbuildversion/tests/build_version_test_lib.cpp @@ -0,0 +1,23 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#include "build_version_test_lib.h" + +std::string LibGetBuildNumber() { + return android::build::GetBuildNumber(); +} diff --git a/cc/libbuildversion/tests/build_version_test_lib.h b/cc/libbuildversion/tests/build_version_test_lib.h new file mode 100644 index 000000000..ca975afe0 --- /dev/null +++ b/cc/libbuildversion/tests/build_version_test_lib.h @@ -0,0 +1,24 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef BUILD_VERSION_TEST_LIB_H_ +#define BUILD_VERSION_TEST_LIB_H_ + +#include + +std::string __attribute__((visibility("default"))) LibGetBuildNumber(); + +#endif // BUILD_VERSION_TEST_LIB_H_ diff --git a/cc/library.go b/cc/library.go index d3717dd9e..6fe9ca4e7 100644 --- a/cc/library.go +++ b/cc/library.go @@ -492,10 +492,16 @@ func (library *libraryDecorator) linkStatic(ctx ModuleContext, library.objects = deps.WholeStaticLibObjs.Copy() library.objects = library.objects.Append(objs) - outputFile := android.PathForModuleOut(ctx, - ctx.ModuleName()+library.MutatedProperties.VariantName+staticLibraryExtension) + fileName := ctx.ModuleName() + library.MutatedProperties.VariantName + staticLibraryExtension + outputFile := android.PathForModuleOut(ctx, fileName) builderFlags := flagsToBuilderFlags(flags) + if Bool(library.baseLinker.Properties.Use_version_lib) && ctx.Host() { + versionedOutputFile := outputFile + outputFile = android.PathForModuleOut(ctx, "unversioned", fileName) + library.injectVersionSymbol(ctx, outputFile, versionedOutputFile) + } + TransformObjToStaticLib(ctx, library.objects.objFiles, builderFlags, outputFile, objs.tidyFiles) library.coverageOutputFile = TransformCoverageFilesToLib(ctx, library.objects, builderFlags, @@ -585,6 +591,12 @@ func (library *libraryDecorator) linkShared(ctx ModuleContext, library.stripper.strip(ctx, outputFile, strippedOutputFile, builderFlags) } + if Bool(library.baseLinker.Properties.Use_version_lib) && ctx.Host() { + versionedOutputFile := outputFile + outputFile = android.PathForModuleOut(ctx, "unversioned", fileName) + library.injectVersionSymbol(ctx, outputFile, versionedOutputFile) + } + sharedLibs := deps.SharedLibs sharedLibs = append(sharedLibs, deps.LateSharedLibs...) diff --git a/cc/linker.go b/cc/linker.go index fae55425b..bcedc8da1 100644 --- a/cc/linker.go +++ b/cc/linker.go @@ -18,6 +18,7 @@ import ( "android/soong/android" "fmt" + "github.com/google/blueprint" "github.com/google/blueprint/proptools" ) @@ -95,6 +96,9 @@ type BaseLinkerProperties struct { Exclude_static_libs []string } } + + // make android::build:GetBuildNumber() available containing the build ID. + Use_version_lib *bool `android:"arch_variant"` } func NewBaseLinker() *baseLinker { @@ -136,6 +140,10 @@ func (linker *baseLinker) linkerDeps(ctx BaseModuleContext, deps Deps) Deps { deps.ReexportSharedLibHeaders = append(deps.ReexportSharedLibHeaders, linker.Properties.Export_shared_lib_headers...) deps.ReexportGeneratedHeaders = append(deps.ReexportGeneratedHeaders, linker.Properties.Export_generated_headers...) + if Bool(linker.Properties.Use_version_lib) { + deps.WholeStaticLibs = append(deps.WholeStaticLibs, "libbuildversion") + } + if ctx.useVndk() { deps.SharedLibs = removeListFromList(deps.SharedLibs, linker.Properties.Target.Vendor.Exclude_shared_libs) deps.ReexportSharedLibHeaders = removeListFromList(deps.ReexportSharedLibHeaders, linker.Properties.Target.Vendor.Exclude_shared_libs) @@ -278,3 +286,31 @@ func (linker *baseLinker) link(ctx ModuleContext, flags Flags, deps PathDeps, objs Objects) android.Path { panic(fmt.Errorf("baseLinker doesn't know how to link")) } + +// Injecting version symbols +// Some host modules want a version number, but we don't want to rebuild it every time. Optionally add a step +// after linking that injects a constant placeholder with the current version number. + +func init() { + pctx.HostBinToolVariable("symbolInjectCmd", "symbol_inject") +} + +var injectVersionSymbol = pctx.AndroidStaticRule("injectVersionSymbol", + blueprint.RuleParams{ + Command: "$symbolInjectCmd -i $in -o $out -s soong_build_number " + + "-from 'SOONG BUILD NUMBER PLACEHOLDER' -v $buildNumberFromFile", + CommandDeps: []string{"$symbolInjectCmd"}, + }, + "buildNumberFromFile") + +func (linker *baseLinker) injectVersionSymbol(ctx ModuleContext, in android.Path, out android.WritablePath) { + ctx.Build(pctx, android.BuildParams{ + Rule: injectVersionSymbol, + Description: "inject version symbol", + Input: in, + Output: out, + Args: map[string]string{ + "buildNumberFromFile": ctx.Config().BuildNumberFromFile(), + }, + }) +} diff --git a/cmd/symbol_inject/Android.bp b/cmd/symbol_inject/Android.bp index 5f9c4a41e..a2ea12bfe 100644 --- a/cmd/symbol_inject/Android.bp +++ b/cmd/symbol_inject/Android.bp @@ -20,4 +20,13 @@ blueprint_go_binary { "macho.go", "pe.go", ], + testSrcs: [ + "elf_symboldata_test.go", + "elf_test.go", + "macho_symboldata_test.go", + "macho_test.go", + "pe_symboldata_test.go", + "pe_test.go", + "symbol_inject_test.go", + ], } diff --git a/cmd/symbol_inject/elf.go b/cmd/symbol_inject/elf.go index 12253f6af..d94877d47 100644 --- a/cmd/symbol_inject/elf.go +++ b/cmd/symbol_inject/elf.go @@ -20,57 +20,141 @@ import ( "io" ) -func findElfSymbol(r io.ReaderAt, symbol string) (uint64, uint64, error) { +type mockableElfFile interface { + Symbols() ([]elf.Symbol, error) + Sections() []elf.SectionHeader + Type() elf.Type +} + +var _ mockableElfFile = elfFileWrapper{} + +type elfFileWrapper struct { + *elf.File +} + +func (f elfFileWrapper) Sections() []elf.SectionHeader { + ret := make([]elf.SectionHeader, len(f.File.Sections)) + for i, section := range f.File.Sections { + ret[i] = section.SectionHeader + } + + return ret +} + +func (f elfFileWrapper) Type() elf.Type { + return f.File.Type +} + +type mockElfFile struct { + symbols []elf.Symbol + sections []elf.SectionHeader + t elf.Type +} + +func (f mockElfFile) Sections() []elf.SectionHeader { return f.sections } +func (f mockElfFile) Symbols() ([]elf.Symbol, error) { return f.symbols, nil } +func (f mockElfFile) Type() elf.Type { return f.t } + +func elfSymbolsFromFile(r io.ReaderAt) (*File, error) { elfFile, err := elf.NewFile(r) if err != nil { - return maxUint64, maxUint64, cantParseError{err} + return nil, cantParseError{err} + } + return extractElfSymbols(elfFileWrapper{elfFile}) +} + +func extractElfSymbols(elfFile mockableElfFile) (*File, error) { + symbols, err := elfFile.Symbols() + if err != nil { + return nil, err + } + + file := &File{} + + for _, section := range elfFile.Sections() { + file.Sections = append(file.Sections, &Section{ + Name: section.Name, + Addr: section.Addr, + Offset: section.Offset, + Size: section.Size, + }) + } + + _ = elf.Section{} + + for _, symbol := range symbols { + if elf.ST_TYPE(symbol.Info) != elf.STT_OBJECT { + continue + } + if symbol.Section == elf.SHN_UNDEF || symbol.Section >= elf.SHN_LORESERVE { + continue + } + if int(symbol.Section) >= len(file.Sections) { + return nil, fmt.Errorf("invalid section index %d", symbol.Section) + } + + section := file.Sections[symbol.Section] + + var addr uint64 + switch elfFile.Type() { + case elf.ET_REL: + // "In relocatable files, st_value holds a section offset for a defined symbol. + // That is, st_value is an offset from the beginning of the section that st_shndx identifies." + addr = symbol.Value + case elf.ET_EXEC, elf.ET_DYN: + // "In executable and shared object files, st_value holds a virtual address. To make these + // files’ symbols more useful for the dynamic linker, the section offset (file interpretation) + // gives way to a virtual address (memory interpretation) for which the section number is + // irrelevant." + if symbol.Value < section.Addr { + return nil, fmt.Errorf("symbol starts before the start of its section") + } + addr = symbol.Value - section.Addr + if addr+symbol.Size > section.Size { + return nil, fmt.Errorf("symbol extends past the end of its section") + } + default: + return nil, fmt.Errorf("unsupported elf file type %d", elfFile.Type()) + } + + file.Symbols = append(file.Symbols, &Symbol{ + Name: symbol.Name, + Addr: addr, + Size: symbol.Size, + Section: section, + }) + } + + return file, nil +} + +func dumpElfSymbols(r io.ReaderAt) error { + elfFile, err := elf.NewFile(r) + if err != nil { + return cantParseError{err} } symbols, err := elfFile.Symbols() if err != nil { - return maxUint64, maxUint64, err + return err } - for _, s := range symbols { - if elf.ST_TYPE(s.Info) != elf.STT_OBJECT { - continue - } - if s.Name == symbol { - offset, err := calculateElfSymbolOffset(elfFile, s) - if err != nil { - return maxUint64, maxUint64, err - } - return offset, s.Size, nil - } - } + fmt.Println("mockElfFile{") + fmt.Printf("\tt: %#v,\n", elfFile.Type) - return maxUint64, maxUint64, fmt.Errorf("symbol not found") -} - -func calculateElfSymbolOffset(file *elf.File, symbol elf.Symbol) (uint64, error) { - if symbol.Section == elf.SHN_UNDEF || int(symbol.Section) >= len(file.Sections) { - return maxUint64, fmt.Errorf("invalid section index %d", symbol.Section) - } - section := file.Sections[symbol.Section] - switch file.Type { - case elf.ET_REL: - // "In relocatable files, st_value holds a section offset for a defined symbol. - // That is, st_value is an offset from the beginning of the section that st_shndx identifies." - return section.Offset + symbol.Value, nil - case elf.ET_EXEC, elf.ET_DYN: - // "In executable and shared object files, st_value holds a virtual address. To make these - // files’ symbols more useful for the dynamic linker, the section offset (file interpretation) - // gives way to a virtual address (memory interpretation) for which the section number is - // irrelevant." - if symbol.Value < section.Addr { - return maxUint64, fmt.Errorf("symbol starts before the start of its section") - } - section_offset := symbol.Value - section.Addr - if section_offset+symbol.Size > section.Size { - return maxUint64, fmt.Errorf("symbol extends past the end of its section") - } - return section.Offset + section_offset, nil - default: - return maxUint64, fmt.Errorf("unsupported elf file type %d", file.Type) - } + fmt.Println("\tsections: []elf.SectionHeader{") + for _, section := range elfFile.Sections { + fmt.Printf("\t\t%#v,\n", section.SectionHeader) + } + fmt.Println("\t},") + + fmt.Println("\tsymbols: []elf.Symbol{") + for _, symbol := range symbols { + fmt.Printf("\t\t%#v,\n", symbol) + } + fmt.Println("\t},") + + fmt.Println("}") + + return nil } diff --git a/cmd/symbol_inject/elf_symboldata_test.go b/cmd/symbol_inject/elf_symboldata_test.go new file mode 100644 index 000000000..9ba7153fd --- /dev/null +++ b/cmd/symbol_inject/elf_symboldata_test.go @@ -0,0 +1,241 @@ +// Copyright 2018 Google Inc. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package main + +import "debug/elf" + +/* Generated from: clang -o a.out test.c + +#include + +char soong_build_number[128] = "PLACEHOLDER"; + +int main() { + write(STDOUT_FILENO, soong_build_number, sizeof(soong_build_number)); +} +*/ + +var elfSymbolTable1 = &mockElfFile{ + t: elf.ET_EXEC, + sections: []elf.SectionHeader{ + elf.SectionHeader{Name: "", Type: elf.SHT_NULL, Flags: 0x0, Addr: 0x0, Offset: 0x0, Size: 0x0, Link: 0x0, Info: 0x0, Addralign: 0x0, Entsize: 0x0, FileSize: 0x0}, + elf.SectionHeader{Name: ".interp", Type: elf.SHT_PROGBITS, Flags: elf.SHF_ALLOC, Addr: 0x400238, Offset: 0x238, Size: 0x1c, Link: 0x0, Info: 0x0, Addralign: 0x1, Entsize: 0x0, FileSize: 0x1c}, + elf.SectionHeader{Name: ".note.ABI-tag", Type: elf.SHT_NOTE, Flags: elf.SHF_ALLOC, Addr: 0x400254, Offset: 0x254, Size: 0x20, Link: 0x0, Info: 0x0, Addralign: 0x4, Entsize: 0x0, FileSize: 0x20}, + elf.SectionHeader{Name: ".hash", Type: elf.SHT_HASH, Flags: elf.SHF_ALLOC, Addr: 0x400278, Offset: 0x278, Size: 0x24, Link: 0x4, Info: 0x0, Addralign: 0x8, Entsize: 0x4, FileSize: 0x24}, + elf.SectionHeader{Name: ".dynsym", Type: elf.SHT_DYNSYM, Flags: elf.SHF_ALLOC, Addr: 0x4002a0, Offset: 0x2a0, Size: 0x60, Link: 0x5, Info: 0x1, Addralign: 0x8, Entsize: 0x18, FileSize: 0x60}, + elf.SectionHeader{Name: ".dynstr", Type: elf.SHT_STRTAB, Flags: elf.SHF_ALLOC, Addr: 0x400300, Offset: 0x300, Size: 0x3e, Link: 0x0, Info: 0x0, Addralign: 0x1, Entsize: 0x0, FileSize: 0x3e}, + elf.SectionHeader{Name: ".gnu.version", Type: elf.SHT_GNU_VERSYM, Flags: elf.SHF_ALLOC, Addr: 0x40033e, Offset: 0x33e, Size: 0x8, Link: 0x4, Info: 0x0, Addralign: 0x2, Entsize: 0x2, FileSize: 0x8}, + elf.SectionHeader{Name: ".gnu.version_r", Type: elf.SHT_GNU_VERNEED, Flags: elf.SHF_ALLOC, Addr: 0x400348, Offset: 0x348, Size: 0x20, Link: 0x5, Info: 0x1, Addralign: 0x8, Entsize: 0x0, FileSize: 0x20}, + elf.SectionHeader{Name: ".rela.dyn", Type: elf.SHT_RELA, Flags: elf.SHF_ALLOC, Addr: 0x400368, Offset: 0x368, Size: 0x30, Link: 0x4, Info: 0x0, Addralign: 0x8, Entsize: 0x18, FileSize: 0x30}, + elf.SectionHeader{Name: ".rela.plt", Type: elf.SHT_RELA, Flags: elf.SHF_ALLOC + elf.SHF_INFO_LINK, Addr: 0x400398, Offset: 0x398, Size: 0x18, Link: 0x4, Info: 0x16, Addralign: 0x8, Entsize: 0x18, FileSize: 0x18}, + elf.SectionHeader{Name: ".init", Type: elf.SHT_PROGBITS, Flags: elf.SHF_ALLOC + elf.SHF_EXECINSTR, Addr: 0x4003b0, Offset: 0x3b0, Size: 0x17, Link: 0x0, Info: 0x0, Addralign: 0x4, Entsize: 0x0, FileSize: 0x17}, + elf.SectionHeader{Name: ".plt", Type: elf.SHT_PROGBITS, Flags: elf.SHF_ALLOC + elf.SHF_EXECINSTR, Addr: 0x4003d0, Offset: 0x3d0, Size: 0x20, Link: 0x0, Info: 0x0, Addralign: 0x10, Entsize: 0x10, FileSize: 0x20}, + elf.SectionHeader{Name: ".text", Type: elf.SHT_PROGBITS, Flags: elf.SHF_ALLOC + elf.SHF_EXECINSTR, Addr: 0x4003f0, Offset: 0x3f0, Size: 0x1b2, Link: 0x0, Info: 0x0, Addralign: 0x10, Entsize: 0x0, FileSize: 0x1b2}, + elf.SectionHeader{Name: ".fini", Type: elf.SHT_PROGBITS, Flags: elf.SHF_ALLOC + elf.SHF_EXECINSTR, Addr: 0x4005a4, Offset: 0x5a4, Size: 0x9, Link: 0x0, Info: 0x0, Addralign: 0x4, Entsize: 0x0, FileSize: 0x9}, + elf.SectionHeader{Name: ".rodata", Type: elf.SHT_PROGBITS, Flags: elf.SHF_ALLOC + elf.SHF_MERGE, Addr: 0x4005b0, Offset: 0x5b0, Size: 0x4, Link: 0x0, Info: 0x0, Addralign: 0x4, Entsize: 0x4, FileSize: 0x4}, + elf.SectionHeader{Name: ".eh_frame_hdr", Type: elf.SHT_PROGBITS, Flags: elf.SHF_ALLOC, Addr: 0x4005b4, Offset: 0x5b4, Size: 0x34, Link: 0x0, Info: 0x0, Addralign: 0x4, Entsize: 0x0, FileSize: 0x34}, + elf.SectionHeader{Name: ".eh_frame", Type: elf.SHT_PROGBITS, Flags: elf.SHF_ALLOC, Addr: 0x4005e8, Offset: 0x5e8, Size: 0xf0, Link: 0x0, Info: 0x0, Addralign: 0x8, Entsize: 0x0, FileSize: 0xf0}, + elf.SectionHeader{Name: ".init_array", Type: elf.SHT_INIT_ARRAY, Flags: elf.SHF_WRITE + elf.SHF_ALLOC, Addr: 0x600e08, Offset: 0xe08, Size: 0x8, Link: 0x0, Info: 0x0, Addralign: 0x8, Entsize: 0x8, FileSize: 0x8}, + elf.SectionHeader{Name: ".fini_array", Type: elf.SHT_FINI_ARRAY, Flags: elf.SHF_WRITE + elf.SHF_ALLOC, Addr: 0x600e10, Offset: 0xe10, Size: 0x8, Link: 0x0, Info: 0x0, Addralign: 0x8, Entsize: 0x8, FileSize: 0x8}, + elf.SectionHeader{Name: ".jcr", Type: elf.SHT_PROGBITS, Flags: elf.SHF_WRITE + elf.SHF_ALLOC, Addr: 0x600e18, Offset: 0xe18, Size: 0x8, Link: 0x0, Info: 0x0, Addralign: 0x8, Entsize: 0x0, FileSize: 0x8}, + elf.SectionHeader{Name: ".dynamic", Type: elf.SHT_DYNAMIC, Flags: elf.SHF_WRITE + elf.SHF_ALLOC, Addr: 0x600e20, Offset: 0xe20, Size: 0x1d0, Link: 0x5, Info: 0x0, Addralign: 0x8, Entsize: 0x10, FileSize: 0x1d0}, + elf.SectionHeader{Name: ".got", Type: elf.SHT_PROGBITS, Flags: elf.SHF_WRITE + elf.SHF_ALLOC, Addr: 0x600ff0, Offset: 0xff0, Size: 0x10, Link: 0x0, Info: 0x0, Addralign: 0x8, Entsize: 0x8, FileSize: 0x10}, + elf.SectionHeader{Name: ".got.plt", Type: elf.SHT_PROGBITS, Flags: elf.SHF_WRITE + elf.SHF_ALLOC, Addr: 0x601000, Offset: 0x1000, Size: 0x20, Link: 0x0, Info: 0x0, Addralign: 0x8, Entsize: 0x8, FileSize: 0x20}, + elf.SectionHeader{Name: ".data", Type: elf.SHT_PROGBITS, Flags: elf.SHF_WRITE + elf.SHF_ALLOC, Addr: 0x601020, Offset: 0x1020, Size: 0x90, Link: 0x0, Info: 0x0, Addralign: 0x10, Entsize: 0x0, FileSize: 0x90}, + elf.SectionHeader{Name: ".bss", Type: elf.SHT_NOBITS, Flags: elf.SHF_WRITE + elf.SHF_ALLOC, Addr: 0x6010b0, Offset: 0x10b0, Size: 0x8, Link: 0x0, Info: 0x0, Addralign: 0x1, Entsize: 0x0, FileSize: 0x8}, + elf.SectionHeader{Name: ".comment", Type: elf.SHT_PROGBITS, Flags: elf.SHF_MERGE + elf.SHF_STRINGS, Addr: 0x0, Offset: 0x10b0, Size: 0x56, Link: 0x0, Info: 0x0, Addralign: 0x1, Entsize: 0x1, FileSize: 0x56}, + elf.SectionHeader{Name: ".symtab", Type: elf.SHT_SYMTAB, Flags: 0x0, Addr: 0x0, Offset: 0x1108, Size: 0x5e8, Link: 0x1b, Info: 0x2d, Addralign: 0x8, Entsize: 0x18, FileSize: 0x5e8}, + elf.SectionHeader{Name: ".strtab", Type: elf.SHT_STRTAB, Flags: 0x0, Addr: 0x0, Offset: 0x16f0, Size: 0x1dd, Link: 0x0, Info: 0x0, Addralign: 0x1, Entsize: 0x0, FileSize: 0x1dd}, + elf.SectionHeader{Name: ".shstrtab", Type: elf.SHT_STRTAB, Flags: 0x0, Addr: 0x0, Offset: 0x18cd, Size: 0xf1, Link: 0x0, Info: 0x0, Addralign: 0x1, Entsize: 0x0, FileSize: 0xf1}, + }, + symbols: []elf.Symbol{ + elf.Symbol{Name: "", Info: 0x3, Other: 0x0, Section: elf.SHN_UNDEF + 1, Value: 0x400238, Size: 0x0}, + elf.Symbol{Name: "", Info: 0x3, Other: 0x0, Section: elf.SHN_UNDEF + 2, Value: 0x400254, Size: 0x0}, + elf.Symbol{Name: "", Info: 0x3, Other: 0x0, Section: elf.SHN_UNDEF + 3, Value: 0x400278, Size: 0x0}, + elf.Symbol{Name: "", Info: 0x3, Other: 0x0, Section: elf.SHN_UNDEF + 4, Value: 0x4002a0, Size: 0x0}, + elf.Symbol{Name: "", Info: 0x3, Other: 0x0, Section: elf.SHN_UNDEF + 5, Value: 0x400300, Size: 0x0}, + elf.Symbol{Name: "", Info: 0x3, Other: 0x0, Section: elf.SHN_UNDEF + 6, Value: 0x40033e, Size: 0x0}, + elf.Symbol{Name: "", Info: 0x3, Other: 0x0, Section: elf.SHN_UNDEF + 7, Value: 0x400348, Size: 0x0}, + elf.Symbol{Name: "", Info: 0x3, Other: 0x0, Section: elf.SHN_UNDEF + 8, Value: 0x400368, Size: 0x0}, + elf.Symbol{Name: "", Info: 0x3, Other: 0x0, Section: elf.SHN_UNDEF + 9, Value: 0x400398, Size: 0x0}, + elf.Symbol{Name: "", Info: 0x3, Other: 0x0, Section: elf.SHN_UNDEF + 10, Value: 0x4003b0, Size: 0x0}, + elf.Symbol{Name: "", Info: 0x3, Other: 0x0, Section: elf.SHN_UNDEF + 11, Value: 0x4003d0, Size: 0x0}, + elf.Symbol{Name: "", Info: 0x3, Other: 0x0, Section: elf.SHN_UNDEF + 12, Value: 0x4003f0, Size: 0x0}, + elf.Symbol{Name: "", Info: 0x3, Other: 0x0, Section: elf.SHN_UNDEF + 13, Value: 0x4005a4, Size: 0x0}, + elf.Symbol{Name: "", Info: 0x3, Other: 0x0, Section: elf.SHN_UNDEF + 14, Value: 0x4005b0, Size: 0x0}, + elf.Symbol{Name: "", Info: 0x3, Other: 0x0, Section: elf.SHN_UNDEF + 15, Value: 0x4005b4, Size: 0x0}, + elf.Symbol{Name: "", Info: 0x3, Other: 0x0, Section: elf.SHN_UNDEF + 16, Value: 0x4005e8, Size: 0x0}, + elf.Symbol{Name: "", Info: 0x3, Other: 0x0, Section: elf.SHN_UNDEF + 17, Value: 0x600e08, Size: 0x0}, + elf.Symbol{Name: "", Info: 0x3, Other: 0x0, Section: elf.SHN_UNDEF + 18, Value: 0x600e10, Size: 0x0}, + elf.Symbol{Name: "", Info: 0x3, Other: 0x0, Section: elf.SHN_UNDEF + 19, Value: 0x600e18, Size: 0x0}, + elf.Symbol{Name: "", Info: 0x3, Other: 0x0, Section: elf.SHN_UNDEF + 20, Value: 0x600e20, Size: 0x0}, + elf.Symbol{Name: "", Info: 0x3, Other: 0x0, Section: elf.SHN_UNDEF + 21, Value: 0x600ff0, Size: 0x0}, + elf.Symbol{Name: "", Info: 0x3, Other: 0x0, Section: elf.SHN_UNDEF + 22, Value: 0x601000, Size: 0x0}, + elf.Symbol{Name: "", Info: 0x3, Other: 0x0, Section: elf.SHN_UNDEF + 23, Value: 0x601020, Size: 0x0}, + elf.Symbol{Name: "", Info: 0x3, Other: 0x0, Section: elf.SHN_UNDEF + 24, Value: 0x6010b0, Size: 0x0}, + elf.Symbol{Name: "", Info: 0x3, Other: 0x0, Section: elf.SHN_UNDEF + 25, Value: 0x0, Size: 0x0}, + elf.Symbol{Name: "crtstuff.c", Info: 0x4, Other: 0x0, Section: elf.SHN_ABS, Value: 0x0, Size: 0x0}, + elf.Symbol{Name: "__JCR_LIST__", Info: 0x1, Other: 0x0, Section: elf.SHN_UNDEF + 19, Value: 0x600e18, Size: 0x0}, + elf.Symbol{Name: "deregister_tm_clones", Info: 0x2, Other: 0x0, Section: elf.SHN_UNDEF + 12, Value: 0x400420, Size: 0x0}, + elf.Symbol{Name: "register_tm_clones", Info: 0x2, Other: 0x0, Section: elf.SHN_UNDEF + 12, Value: 0x400460, Size: 0x0}, + elf.Symbol{Name: "__do_global_dtors_aux", Info: 0x2, Other: 0x0, Section: elf.SHN_UNDEF + 12, Value: 0x4004a0, Size: 0x0}, + elf.Symbol{Name: "completed.6963", Info: 0x1, Other: 0x0, Section: elf.SHN_UNDEF + 24, Value: 0x6010b0, Size: 0x1}, + elf.Symbol{Name: "__do_global_dtors_aux_fini_array_entry", Info: 0x1, Other: 0x0, Section: elf.SHN_UNDEF + 18, Value: 0x600e10, Size: 0x0}, + elf.Symbol{Name: "frame_dummy", Info: 0x2, Other: 0x0, Section: elf.SHN_UNDEF + 12, Value: 0x4004c0, Size: 0x0}, + elf.Symbol{Name: "__frame_dummy_init_array_entry", Info: 0x1, Other: 0x0, Section: elf.SHN_UNDEF + 17, Value: 0x600e08, Size: 0x0}, + elf.Symbol{Name: "test.c", Info: 0x4, Other: 0x0, Section: elf.SHN_ABS, Value: 0x0, Size: 0x0}, + elf.Symbol{Name: "crtstuff.c", Info: 0x4, Other: 0x0, Section: elf.SHN_ABS, Value: 0x0, Size: 0x0}, + elf.Symbol{Name: "__FRAME_END__", Info: 0x1, Other: 0x0, Section: elf.SHN_UNDEF + 16, Value: 0x4006d4, Size: 0x0}, + elf.Symbol{Name: "__JCR_END__", Info: 0x1, Other: 0x0, Section: elf.SHN_UNDEF + 19, Value: 0x600e18, Size: 0x0}, + elf.Symbol{Name: "", Info: 0x4, Other: 0x0, Section: elf.SHN_ABS, Value: 0x0, Size: 0x0}, + elf.Symbol{Name: "__init_array_end", Info: 0x0, Other: 0x0, Section: elf.SHN_UNDEF + 17, Value: 0x600e10, Size: 0x0}, + elf.Symbol{Name: "_DYNAMIC", Info: 0x1, Other: 0x0, Section: elf.SHN_UNDEF + 20, Value: 0x600e20, Size: 0x0}, + elf.Symbol{Name: "__init_array_start", Info: 0x0, Other: 0x0, Section: elf.SHN_UNDEF + 17, Value: 0x600e08, Size: 0x0}, + elf.Symbol{Name: "__GNU_EH_FRAME_HDR", Info: 0x0, Other: 0x0, Section: elf.SHN_UNDEF + 15, Value: 0x4005b4, Size: 0x0}, + elf.Symbol{Name: "_GLOBAL_OFFSET_TABLE_", Info: 0x1, Other: 0x0, Section: elf.SHN_UNDEF + 22, Value: 0x601000, Size: 0x0}, + elf.Symbol{Name: "__libc_csu_fini", Info: 0x12, Other: 0x0, Section: elf.SHN_UNDEF + 12, Value: 0x4005a0, Size: 0x2}, + elf.Symbol{Name: "soong_build_number", Info: 0x11, Other: 0x0, Section: elf.SHN_UNDEF + 23, Value: 0x601030, Size: 0x80}, + elf.Symbol{Name: "data_start", Info: 0x20, Other: 0x0, Section: elf.SHN_UNDEF + 23, Value: 0x601020, Size: 0x0}, + elf.Symbol{Name: "write@@GLIBC_2.2.5", Info: 0x12, Other: 0x0, Section: elf.SHN_UNDEF, Value: 0x0, Size: 0x0}, + elf.Symbol{Name: "_edata", Info: 0x10, Other: 0x0, Section: elf.SHN_UNDEF + 23, Value: 0x6010b0, Size: 0x0}, + elf.Symbol{Name: "_fini", Info: 0x12, Other: 0x0, Section: elf.SHN_UNDEF + 13, Value: 0x4005a4, Size: 0x0}, + elf.Symbol{Name: "__libc_start_main@@GLIBC_2.2.5", Info: 0x12, Other: 0x0, Section: elf.SHN_UNDEF, Value: 0x0, Size: 0x0}, + elf.Symbol{Name: "__data_start", Info: 0x10, Other: 0x0, Section: elf.SHN_UNDEF + 23, Value: 0x601020, Size: 0x0}, + elf.Symbol{Name: "__gmon_start__", Info: 0x20, Other: 0x0, Section: elf.SHN_UNDEF, Value: 0x0, Size: 0x0}, + elf.Symbol{Name: "__dso_handle", Info: 0x11, Other: 0x2, Section: elf.SHN_UNDEF + 23, Value: 0x601028, Size: 0x0}, + elf.Symbol{Name: "_IO_stdin_used", Info: 0x11, Other: 0x0, Section: elf.SHN_UNDEF + 14, Value: 0x4005b0, Size: 0x4}, + elf.Symbol{Name: "__libc_csu_init", Info: 0x12, Other: 0x0, Section: elf.SHN_UNDEF + 12, Value: 0x400530, Size: 0x65}, + elf.Symbol{Name: "_end", Info: 0x10, Other: 0x0, Section: elf.SHN_UNDEF + 24, Value: 0x6010b8, Size: 0x0}, + elf.Symbol{Name: "_start", Info: 0x12, Other: 0x0, Section: elf.SHN_UNDEF + 12, Value: 0x4003f0, Size: 0x2b}, + elf.Symbol{Name: "__bss_start", Info: 0x10, Other: 0x0, Section: elf.SHN_UNDEF + 24, Value: 0x6010b0, Size: 0x0}, + elf.Symbol{Name: "main", Info: 0x12, Other: 0x0, Section: elf.SHN_UNDEF + 12, Value: 0x4004f0, Size: 0x31}, + elf.Symbol{Name: "__TMC_END__", Info: 0x11, Other: 0x2, Section: elf.SHN_UNDEF + 23, Value: 0x6010b0, Size: 0x0}, + elf.Symbol{Name: "_init", Info: 0x12, Other: 0x0, Section: elf.SHN_UNDEF + 10, Value: 0x4003b0, Size: 0x0}, + }, +} + +/* Generated from: clang -o a.out test2.c + +#include + +char symbol1[128] = "PLACEHOLDER1"; +char symbol2[128] = "PLACEHOLDER2"; + +int main() { + write(STDOUT_FILENO, symbol1, sizeof(symbol1)); + write(STDOUT_FILENO, symbol2, sizeof(symbol2)); +} + +*/ + +var elfSymbolTable2 = &mockElfFile{ + t: elf.ET_EXEC, + sections: []elf.SectionHeader{ + elf.SectionHeader{Name: "", Type: elf.SHT_NULL, Flags: 0x0, Addr: 0x0, Offset: 0x0, Size: 0x0, Link: 0x0, Info: 0x0, Addralign: 0x0, Entsize: 0x0, FileSize: 0x0}, + elf.SectionHeader{Name: ".interp", Type: elf.SHT_PROGBITS, Flags: elf.SHF_ALLOC, Addr: 0x400238, Offset: 0x238, Size: 0x1c, Link: 0x0, Info: 0x0, Addralign: 0x1, Entsize: 0x0, FileSize: 0x1c}, + elf.SectionHeader{Name: ".note.ABI-tag", Type: elf.SHT_NOTE, Flags: elf.SHF_ALLOC, Addr: 0x400254, Offset: 0x254, Size: 0x20, Link: 0x0, Info: 0x0, Addralign: 0x4, Entsize: 0x0, FileSize: 0x20}, + elf.SectionHeader{Name: ".hash", Type: elf.SHT_HASH, Flags: elf.SHF_ALLOC, Addr: 0x400278, Offset: 0x278, Size: 0x24, Link: 0x4, Info: 0x0, Addralign: 0x8, Entsize: 0x4, FileSize: 0x24}, + elf.SectionHeader{Name: ".dynsym", Type: elf.SHT_DYNSYM, Flags: elf.SHF_ALLOC, Addr: 0x4002a0, Offset: 0x2a0, Size: 0x60, Link: 0x5, Info: 0x1, Addralign: 0x8, Entsize: 0x18, FileSize: 0x60}, + elf.SectionHeader{Name: ".dynstr", Type: elf.SHT_STRTAB, Flags: elf.SHF_ALLOC, Addr: 0x400300, Offset: 0x300, Size: 0x3e, Link: 0x0, Info: 0x0, Addralign: 0x1, Entsize: 0x0, FileSize: 0x3e}, + elf.SectionHeader{Name: ".gnu.version", Type: elf.SHT_GNU_VERSYM, Flags: elf.SHF_ALLOC, Addr: 0x40033e, Offset: 0x33e, Size: 0x8, Link: 0x4, Info: 0x0, Addralign: 0x2, Entsize: 0x2, FileSize: 0x8}, + elf.SectionHeader{Name: ".gnu.version_r", Type: elf.SHT_GNU_VERNEED, Flags: elf.SHF_ALLOC, Addr: 0x400348, Offset: 0x348, Size: 0x20, Link: 0x5, Info: 0x1, Addralign: 0x8, Entsize: 0x0, FileSize: 0x20}, + elf.SectionHeader{Name: ".rela.dyn", Type: elf.SHT_RELA, Flags: elf.SHF_ALLOC, Addr: 0x400368, Offset: 0x368, Size: 0x30, Link: 0x4, Info: 0x0, Addralign: 0x8, Entsize: 0x18, FileSize: 0x30}, + elf.SectionHeader{Name: ".rela.plt", Type: elf.SHT_RELA, Flags: elf.SHF_ALLOC + elf.SHF_INFO_LINK, Addr: 0x400398, Offset: 0x398, Size: 0x18, Link: 0x4, Info: 0x16, Addralign: 0x8, Entsize: 0x18, FileSize: 0x18}, + elf.SectionHeader{Name: ".init", Type: elf.SHT_PROGBITS, Flags: elf.SHF_ALLOC + elf.SHF_EXECINSTR, Addr: 0x4003b0, Offset: 0x3b0, Size: 0x17, Link: 0x0, Info: 0x0, Addralign: 0x4, Entsize: 0x0, FileSize: 0x17}, + elf.SectionHeader{Name: ".plt", Type: elf.SHT_PROGBITS, Flags: elf.SHF_ALLOC + elf.SHF_EXECINSTR, Addr: 0x4003d0, Offset: 0x3d0, Size: 0x20, Link: 0x0, Info: 0x0, Addralign: 0x10, Entsize: 0x10, FileSize: 0x20}, + elf.SectionHeader{Name: ".text", Type: elf.SHT_PROGBITS, Flags: elf.SHF_ALLOC + elf.SHF_EXECINSTR, Addr: 0x4003f0, Offset: 0x3f0, Size: 0x1c2, Link: 0x0, Info: 0x0, Addralign: 0x10, Entsize: 0x0, FileSize: 0x1c2}, + elf.SectionHeader{Name: ".fini", Type: elf.SHT_PROGBITS, Flags: elf.SHF_ALLOC + elf.SHF_EXECINSTR, Addr: 0x4005b4, Offset: 0x5b4, Size: 0x9, Link: 0x0, Info: 0x0, Addralign: 0x4, Entsize: 0x0, FileSize: 0x9}, + elf.SectionHeader{Name: ".rodata", Type: elf.SHT_PROGBITS, Flags: elf.SHF_ALLOC + elf.SHF_MERGE, Addr: 0x4005c0, Offset: 0x5c0, Size: 0x4, Link: 0x0, Info: 0x0, Addralign: 0x4, Entsize: 0x4, FileSize: 0x4}, + elf.SectionHeader{Name: ".eh_frame_hdr", Type: elf.SHT_PROGBITS, Flags: elf.SHF_ALLOC, Addr: 0x4005c4, Offset: 0x5c4, Size: 0x34, Link: 0x0, Info: 0x0, Addralign: 0x4, Entsize: 0x0, FileSize: 0x34}, + elf.SectionHeader{Name: ".eh_frame", Type: elf.SHT_PROGBITS, Flags: elf.SHF_ALLOC, Addr: 0x4005f8, Offset: 0x5f8, Size: 0xf0, Link: 0x0, Info: 0x0, Addralign: 0x8, Entsize: 0x0, FileSize: 0xf0}, + elf.SectionHeader{Name: ".init_array", Type: elf.SHT_INIT_ARRAY, Flags: elf.SHF_WRITE + elf.SHF_ALLOC, Addr: 0x600e08, Offset: 0xe08, Size: 0x8, Link: 0x0, Info: 0x0, Addralign: 0x8, Entsize: 0x8, FileSize: 0x8}, + elf.SectionHeader{Name: ".fini_array", Type: elf.SHT_FINI_ARRAY, Flags: elf.SHF_WRITE + elf.SHF_ALLOC, Addr: 0x600e10, Offset: 0xe10, Size: 0x8, Link: 0x0, Info: 0x0, Addralign: 0x8, Entsize: 0x8, FileSize: 0x8}, + elf.SectionHeader{Name: ".jcr", Type: elf.SHT_PROGBITS, Flags: elf.SHF_WRITE + elf.SHF_ALLOC, Addr: 0x600e18, Offset: 0xe18, Size: 0x8, Link: 0x0, Info: 0x0, Addralign: 0x8, Entsize: 0x0, FileSize: 0x8}, + elf.SectionHeader{Name: ".dynamic", Type: elf.SHT_DYNAMIC, Flags: elf.SHF_WRITE + elf.SHF_ALLOC, Addr: 0x600e20, Offset: 0xe20, Size: 0x1d0, Link: 0x5, Info: 0x0, Addralign: 0x8, Entsize: 0x10, FileSize: 0x1d0}, + elf.SectionHeader{Name: ".got", Type: elf.SHT_PROGBITS, Flags: elf.SHF_WRITE + elf.SHF_ALLOC, Addr: 0x600ff0, Offset: 0xff0, Size: 0x10, Link: 0x0, Info: 0x0, Addralign: 0x8, Entsize: 0x8, FileSize: 0x10}, + elf.SectionHeader{Name: ".got.plt", Type: elf.SHT_PROGBITS, Flags: elf.SHF_WRITE + elf.SHF_ALLOC, Addr: 0x601000, Offset: 0x1000, Size: 0x20, Link: 0x0, Info: 0x0, Addralign: 0x8, Entsize: 0x8, FileSize: 0x20}, + elf.SectionHeader{Name: ".data", Type: elf.SHT_PROGBITS, Flags: elf.SHF_WRITE + elf.SHF_ALLOC, Addr: 0x601020, Offset: 0x1020, Size: 0x110, Link: 0x0, Info: 0x0, Addralign: 0x10, Entsize: 0x0, FileSize: 0x110}, + elf.SectionHeader{Name: ".bss", Type: elf.SHT_NOBITS, Flags: elf.SHF_WRITE + elf.SHF_ALLOC, Addr: 0x601130, Offset: 0x1130, Size: 0x8, Link: 0x0, Info: 0x0, Addralign: 0x1, Entsize: 0x0, FileSize: 0x8}, + elf.SectionHeader{Name: ".comment", Type: elf.SHT_PROGBITS, Flags: elf.SHF_MERGE + elf.SHF_STRINGS, Addr: 0x0, Offset: 0x1130, Size: 0x56, Link: 0x0, Info: 0x0, Addralign: 0x1, Entsize: 0x1, FileSize: 0x56}, + elf.SectionHeader{Name: ".symtab", Type: elf.SHT_SYMTAB, Flags: 0x0, Addr: 0x0, Offset: 0x1188, Size: 0x600, Link: 0x1b, Info: 0x2d, Addralign: 0x8, Entsize: 0x18, FileSize: 0x600}, + elf.SectionHeader{Name: ".strtab", Type: elf.SHT_STRTAB, Flags: 0x0, Addr: 0x0, Offset: 0x1788, Size: 0x1db, Link: 0x0, Info: 0x0, Addralign: 0x1, Entsize: 0x0, FileSize: 0x1db}, + elf.SectionHeader{Name: ".shstrtab", Type: elf.SHT_STRTAB, Flags: 0x0, Addr: 0x0, Offset: 0x1963, Size: 0xf1, Link: 0x0, Info: 0x0, Addralign: 0x1, Entsize: 0x0, FileSize: 0xf1}, + }, + symbols: []elf.Symbol{ + elf.Symbol{Name: "", Info: 0x3, Other: 0x0, Section: elf.SHN_UNDEF + 1, Value: 0x400238, Size: 0x0}, + elf.Symbol{Name: "", Info: 0x3, Other: 0x0, Section: elf.SHN_UNDEF + 2, Value: 0x400254, Size: 0x0}, + elf.Symbol{Name: "", Info: 0x3, Other: 0x0, Section: elf.SHN_UNDEF + 3, Value: 0x400278, Size: 0x0}, + elf.Symbol{Name: "", Info: 0x3, Other: 0x0, Section: elf.SHN_UNDEF + 4, Value: 0x4002a0, Size: 0x0}, + elf.Symbol{Name: "", Info: 0x3, Other: 0x0, Section: elf.SHN_UNDEF + 5, Value: 0x400300, Size: 0x0}, + elf.Symbol{Name: "", Info: 0x3, Other: 0x0, Section: elf.SHN_UNDEF + 6, Value: 0x40033e, Size: 0x0}, + elf.Symbol{Name: "", Info: 0x3, Other: 0x0, Section: elf.SHN_UNDEF + 7, Value: 0x400348, Size: 0x0}, + elf.Symbol{Name: "", Info: 0x3, Other: 0x0, Section: elf.SHN_UNDEF + 8, Value: 0x400368, Size: 0x0}, + elf.Symbol{Name: "", Info: 0x3, Other: 0x0, Section: elf.SHN_UNDEF + 9, Value: 0x400398, Size: 0x0}, + elf.Symbol{Name: "", Info: 0x3, Other: 0x0, Section: elf.SHN_UNDEF + 10, Value: 0x4003b0, Size: 0x0}, + elf.Symbol{Name: "", Info: 0x3, Other: 0x0, Section: elf.SHN_UNDEF + 11, Value: 0x4003d0, Size: 0x0}, + elf.Symbol{Name: "", Info: 0x3, Other: 0x0, Section: elf.SHN_UNDEF + 12, Value: 0x4003f0, Size: 0x0}, + elf.Symbol{Name: "", Info: 0x3, Other: 0x0, Section: elf.SHN_UNDEF + 13, Value: 0x4005b4, Size: 0x0}, + elf.Symbol{Name: "", Info: 0x3, Other: 0x0, Section: elf.SHN_UNDEF + 14, Value: 0x4005c0, Size: 0x0}, + elf.Symbol{Name: "", Info: 0x3, Other: 0x0, Section: elf.SHN_UNDEF + 15, Value: 0x4005c4, Size: 0x0}, + elf.Symbol{Name: "", Info: 0x3, Other: 0x0, Section: elf.SHN_UNDEF + 16, Value: 0x4005f8, Size: 0x0}, + elf.Symbol{Name: "", Info: 0x3, Other: 0x0, Section: elf.SHN_UNDEF + 17, Value: 0x600e08, Size: 0x0}, + elf.Symbol{Name: "", Info: 0x3, Other: 0x0, Section: elf.SHN_UNDEF + 18, Value: 0x600e10, Size: 0x0}, + elf.Symbol{Name: "", Info: 0x3, Other: 0x0, Section: elf.SHN_UNDEF + 19, Value: 0x600e18, Size: 0x0}, + elf.Symbol{Name: "", Info: 0x3, Other: 0x0, Section: elf.SHN_UNDEF + 20, Value: 0x600e20, Size: 0x0}, + elf.Symbol{Name: "", Info: 0x3, Other: 0x0, Section: elf.SHN_UNDEF + 21, Value: 0x600ff0, Size: 0x0}, + elf.Symbol{Name: "", Info: 0x3, Other: 0x0, Section: elf.SHN_UNDEF + 22, Value: 0x601000, Size: 0x0}, + elf.Symbol{Name: "", Info: 0x3, Other: 0x0, Section: elf.SHN_UNDEF + 23, Value: 0x601020, Size: 0x0}, + elf.Symbol{Name: "", Info: 0x3, Other: 0x0, Section: elf.SHN_UNDEF + 24, Value: 0x601130, Size: 0x0}, + elf.Symbol{Name: "", Info: 0x3, Other: 0x0, Section: elf.SHN_UNDEF + 25, Value: 0x0, Size: 0x0}, + elf.Symbol{Name: "crtstuff.c", Info: 0x4, Other: 0x0, Section: elf.SHN_ABS, Value: 0x0, Size: 0x0}, + elf.Symbol{Name: "__JCR_LIST__", Info: 0x1, Other: 0x0, Section: elf.SHN_UNDEF + 19, Value: 0x600e18, Size: 0x0}, + elf.Symbol{Name: "deregister_tm_clones", Info: 0x2, Other: 0x0, Section: elf.SHN_UNDEF + 12, Value: 0x400420, Size: 0x0}, + elf.Symbol{Name: "register_tm_clones", Info: 0x2, Other: 0x0, Section: elf.SHN_UNDEF + 12, Value: 0x400460, Size: 0x0}, + elf.Symbol{Name: "__do_global_dtors_aux", Info: 0x2, Other: 0x0, Section: elf.SHN_UNDEF + 12, Value: 0x4004a0, Size: 0x0}, + elf.Symbol{Name: "completed.6963", Info: 0x1, Other: 0x0, Section: elf.SHN_UNDEF + 24, Value: 0x601130, Size: 0x1}, + elf.Symbol{Name: "__do_global_dtors_aux_fini_array_entry", Info: 0x1, Other: 0x0, Section: elf.SHN_UNDEF + 18, Value: 0x600e10, Size: 0x0}, + elf.Symbol{Name: "frame_dummy", Info: 0x2, Other: 0x0, Section: elf.SHN_UNDEF + 12, Value: 0x4004c0, Size: 0x0}, + elf.Symbol{Name: "__frame_dummy_init_array_entry", Info: 0x1, Other: 0x0, Section: elf.SHN_UNDEF + 17, Value: 0x600e08, Size: 0x0}, + elf.Symbol{Name: "test2.c", Info: 0x4, Other: 0x0, Section: elf.SHN_ABS, Value: 0x0, Size: 0x0}, + elf.Symbol{Name: "crtstuff.c", Info: 0x4, Other: 0x0, Section: elf.SHN_ABS, Value: 0x0, Size: 0x0}, + elf.Symbol{Name: "__FRAME_END__", Info: 0x1, Other: 0x0, Section: elf.SHN_UNDEF + 16, Value: 0x4006e4, Size: 0x0}, + elf.Symbol{Name: "__JCR_END__", Info: 0x1, Other: 0x0, Section: elf.SHN_UNDEF + 19, Value: 0x600e18, Size: 0x0}, + elf.Symbol{Name: "", Info: 0x4, Other: 0x0, Section: elf.SHN_ABS, Value: 0x0, Size: 0x0}, + elf.Symbol{Name: "__init_array_end", Info: 0x0, Other: 0x0, Section: elf.SHN_UNDEF + 17, Value: 0x600e10, Size: 0x0}, + elf.Symbol{Name: "_DYNAMIC", Info: 0x1, Other: 0x0, Section: elf.SHN_UNDEF + 20, Value: 0x600e20, Size: 0x0}, + elf.Symbol{Name: "__init_array_start", Info: 0x0, Other: 0x0, Section: elf.SHN_UNDEF + 17, Value: 0x600e08, Size: 0x0}, + elf.Symbol{Name: "__GNU_EH_FRAME_HDR", Info: 0x0, Other: 0x0, Section: elf.SHN_UNDEF + 15, Value: 0x4005c4, Size: 0x0}, + elf.Symbol{Name: "_GLOBAL_OFFSET_TABLE_", Info: 0x1, Other: 0x0, Section: elf.SHN_UNDEF + 22, Value: 0x601000, Size: 0x0}, + elf.Symbol{Name: "__libc_csu_fini", Info: 0x12, Other: 0x0, Section: elf.SHN_UNDEF + 12, Value: 0x4005b0, Size: 0x2}, + elf.Symbol{Name: "symbol1", Info: 0x11, Other: 0x0, Section: elf.SHN_UNDEF + 23, Value: 0x601030, Size: 0x80}, + elf.Symbol{Name: "data_start", Info: 0x20, Other: 0x0, Section: elf.SHN_UNDEF + 23, Value: 0x601020, Size: 0x0}, + elf.Symbol{Name: "write@@GLIBC_2.2.5", Info: 0x12, Other: 0x0, Section: elf.SHN_UNDEF, Value: 0x0, Size: 0x0}, + elf.Symbol{Name: "_edata", Info: 0x10, Other: 0x0, Section: elf.SHN_UNDEF + 23, Value: 0x601130, Size: 0x0}, + elf.Symbol{Name: "_fini", Info: 0x12, Other: 0x0, Section: elf.SHN_UNDEF + 13, Value: 0x4005b4, Size: 0x0}, + elf.Symbol{Name: "__libc_start_main@@GLIBC_2.2.5", Info: 0x12, Other: 0x0, Section: elf.SHN_UNDEF, Value: 0x0, Size: 0x0}, + elf.Symbol{Name: "__data_start", Info: 0x10, Other: 0x0, Section: elf.SHN_UNDEF + 23, Value: 0x601020, Size: 0x0}, + elf.Symbol{Name: "__gmon_start__", Info: 0x20, Other: 0x0, Section: elf.SHN_UNDEF, Value: 0x0, Size: 0x0}, + elf.Symbol{Name: "__dso_handle", Info: 0x11, Other: 0x2, Section: elf.SHN_UNDEF + 23, Value: 0x601028, Size: 0x0}, + elf.Symbol{Name: "_IO_stdin_used", Info: 0x11, Other: 0x0, Section: elf.SHN_UNDEF + 14, Value: 0x4005c0, Size: 0x4}, + elf.Symbol{Name: "symbol2", Info: 0x11, Other: 0x0, Section: elf.SHN_UNDEF + 23, Value: 0x6010b0, Size: 0x80}, + elf.Symbol{Name: "__libc_csu_init", Info: 0x12, Other: 0x0, Section: elf.SHN_UNDEF + 12, Value: 0x400540, Size: 0x65}, + elf.Symbol{Name: "_end", Info: 0x10, Other: 0x0, Section: elf.SHN_UNDEF + 24, Value: 0x601138, Size: 0x0}, + elf.Symbol{Name: "_start", Info: 0x12, Other: 0x0, Section: elf.SHN_UNDEF + 12, Value: 0x4003f0, Size: 0x2b}, + elf.Symbol{Name: "__bss_start", Info: 0x10, Other: 0x0, Section: elf.SHN_UNDEF + 24, Value: 0x601130, Size: 0x0}, + elf.Symbol{Name: "main", Info: 0x12, Other: 0x0, Section: elf.SHN_UNDEF + 12, Value: 0x4004f0, Size: 0x50}, + elf.Symbol{Name: "__TMC_END__", Info: 0x11, Other: 0x2, Section: elf.SHN_UNDEF + 23, Value: 0x601130, Size: 0x0}, + elf.Symbol{Name: "_init", Info: 0x12, Other: 0x0, Section: elf.SHN_UNDEF + 10, Value: 0x4003b0, Size: 0x0}, + }, +} diff --git a/cmd/symbol_inject/elf_test.go b/cmd/symbol_inject/elf_test.go new file mode 100644 index 000000000..30b46a5e2 --- /dev/null +++ b/cmd/symbol_inject/elf_test.go @@ -0,0 +1,63 @@ +// Copyright 2018 Google Inc. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package main + +import ( + "strconv" + "testing" +) + +func TestElfSymbolTable(t *testing.T) { + testCases := []struct { + file *mockElfFile + symbol string + offset, size uint64 + }{ + { + file: elfSymbolTable1, + symbol: "soong_build_number", + offset: 0x1030, + size: 128, + }, + { + file: elfSymbolTable2, + symbol: "symbol1", + offset: 0x1030, + size: 128, + }, + { + file: elfSymbolTable2, + symbol: "symbol2", + offset: 0x10b0, + size: 128, + }, + } + + for i, testCase := range testCases { + t.Run(strconv.Itoa(i), func(t *testing.T) { + file, err := extractElfSymbols(testCase.file) + if err != nil { + t.Error(err.Error()) + } + offset, size, err := findSymbol(file, testCase.symbol) + if err != nil { + t.Error(err.Error()) + } + if offset != testCase.offset || size != testCase.size { + t.Errorf("expected %x:%x, got %x:%x", testCase.offset, testCase.size, offset, size) + } + }) + } +} diff --git a/cmd/symbol_inject/macho.go b/cmd/symbol_inject/macho.go index 478e6de8f..be49f8b29 100644 --- a/cmd/symbol_inject/macho.go +++ b/cmd/symbol_inject/macho.go @@ -19,52 +19,79 @@ import ( "fmt" "io" "sort" + "strings" ) -func findMachoSymbol(r io.ReaderAt, symbolName string) (uint64, uint64, error) { +func machoSymbolsFromFile(r io.ReaderAt) (*File, error) { machoFile, err := macho.NewFile(r) if err != nil { - return maxUint64, maxUint64, cantParseError{err} + return nil, cantParseError{err} } - // symbols in macho files seem to be prefixed with an underscore - symbolName = "_" + symbolName + return extractMachoSymbols(machoFile) +} +func extractMachoSymbols(machoFile *macho.File) (*File, error) { symbols := machoFile.Symtab.Syms - sort.Slice(symbols, func(i, j int) bool { + sort.SliceStable(symbols, func(i, j int) bool { if symbols[i].Sect != symbols[j].Sect { return symbols[i].Sect < symbols[j].Sect } return symbols[i].Value < symbols[j].Value }) + file := &File{} + + for _, section := range machoFile.Sections { + file.Sections = append(file.Sections, &Section{ + Name: section.Name, + Addr: section.Addr, + Offset: uint64(section.Offset), + Size: section.Size, + }) + } + for _, symbol := range symbols { - if symbol.Name == symbolName && symbol.Sect != 0 { - // Find the next symbol in the same section with a higher address - n := sort.Search(len(symbols), func(i int) bool { - return symbols[i].Sect == symbol.Sect && - symbols[i].Value > symbol.Value + if symbol.Sect > 0 { + section := file.Sections[symbol.Sect-1] + file.Symbols = append(file.Symbols, &Symbol{ + // symbols in macho files seem to be prefixed with an underscore + Name: strings.TrimPrefix(symbol.Name, "_"), + // MachO symbol value is virtual address of the symbol, convert it to offset into the section. + Addr: symbol.Value - section.Addr, + // MachO symbols don't have size information. + Size: 0, + Section: section, }) - - section := machoFile.Sections[symbol.Sect-1] - - var end uint64 - if n < len(symbols) { - end = symbols[n].Value - } else { - end = section.Addr + section.Size - } - - if end <= symbol.Value && end > symbol.Value+4096 { - return maxUint64, maxUint64, fmt.Errorf("symbol end address does not seem valid, %x:%x", symbol.Value, end) - } - - size := end - symbol.Value - 1 - offset := uint64(section.Offset) + (symbol.Value - section.Addr) - - return offset, size, nil } } - return maxUint64, maxUint64, fmt.Errorf("symbol not found") + return file, nil +} + +func dumpMachoSymbols(r io.ReaderAt) error { + machoFile, err := macho.NewFile(r) + if err != nil { + return cantParseError{err} + } + + fmt.Println("&macho.File{") + + fmt.Println("\tSections: []*macho.Section{") + for _, section := range machoFile.Sections { + fmt.Printf("\t\t&macho.Section{SectionHeader: %#v},\n", section.SectionHeader) + } + fmt.Println("\t},") + + fmt.Println("\tSymtab: &macho.Symtab{") + fmt.Println("\t\tSyms: []macho.Symbol{") + for _, symbol := range machoFile.Symtab.Syms { + fmt.Printf("\t\t\t%#v,\n", symbol) + } + fmt.Println("\t\t},") + fmt.Println("\t},") + + fmt.Println("}") + + return nil } diff --git a/cmd/symbol_inject/macho_symboldata_test.go b/cmd/symbol_inject/macho_symboldata_test.go new file mode 100644 index 000000000..3100a8108 --- /dev/null +++ b/cmd/symbol_inject/macho_symboldata_test.go @@ -0,0 +1,88 @@ +// Copyright 2018 Google Inc. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package main + +import ( + "debug/macho" +) + +/* Generated from: clang -o a.out test.c + +#include + +char soong_build_number[128] = "PLACEHOLDER"; + +int main() { + write(STDOUT_FILENO, soong_build_number, sizeof(soong_build_number)); +} +*/ + +var machoSymbolTable1 = &macho.File{ + Sections: []*macho.Section{ + &macho.Section{SectionHeader: macho.SectionHeader{Name: "__text", Seg: "__TEXT", Addr: 0x100000f50, Size: 0x2e, Offset: 0xf50, Align: 0x4, Reloff: 0x0, Nreloc: 0x0, Flags: 0x80000400}}, + &macho.Section{SectionHeader: macho.SectionHeader{Name: "__stubs", Seg: "__TEXT", Addr: 0x100000f7e, Size: 0x6, Offset: 0xf7e, Align: 0x1, Reloff: 0x0, Nreloc: 0x0, Flags: 0x80000408}}, + &macho.Section{SectionHeader: macho.SectionHeader{Name: "__stub_helper", Seg: "__TEXT", Addr: 0x100000f84, Size: 0x1a, Offset: 0xf84, Align: 0x2, Reloff: 0x0, Nreloc: 0x0, Flags: 0x80000400}}, + &macho.Section{SectionHeader: macho.SectionHeader{Name: "__unwind_info", Seg: "__TEXT", Addr: 0x100000fa0, Size: 0x48, Offset: 0xfa0, Align: 0x2, Reloff: 0x0, Nreloc: 0x0, Flags: 0x0}}, + &macho.Section{SectionHeader: macho.SectionHeader{Name: "__eh_frame", Seg: "__TEXT", Addr: 0x100000fe8, Size: 0x18, Offset: 0xfe8, Align: 0x3, Reloff: 0x0, Nreloc: 0x0, Flags: 0x0}}, + &macho.Section{SectionHeader: macho.SectionHeader{Name: "__nl_symbol_ptr", Seg: "__DATA", Addr: 0x100001000, Size: 0x10, Offset: 0x1000, Align: 0x3, Reloff: 0x0, Nreloc: 0x0, Flags: 0x6}}, + &macho.Section{SectionHeader: macho.SectionHeader{Name: "__la_symbol_ptr", Seg: "__DATA", Addr: 0x100001010, Size: 0x8, Offset: 0x1010, Align: 0x3, Reloff: 0x0, Nreloc: 0x0, Flags: 0x7}}, + &macho.Section{SectionHeader: macho.SectionHeader{Name: "__data", Seg: "__DATA", Addr: 0x100001020, Size: 0x80, Offset: 0x1020, Align: 0x4, Reloff: 0x0, Nreloc: 0x0, Flags: 0x0}}, + }, + Symtab: &macho.Symtab{ + Syms: []macho.Symbol{ + macho.Symbol{Name: "__mh_execute_header", Type: 0xf, Sect: 0x1, Desc: 0x10, Value: 0x100000000}, + macho.Symbol{Name: "_main", Type: 0xf, Sect: 0x1, Desc: 0x0, Value: 0x100000f50}, + macho.Symbol{Name: "_soong_build_number", Type: 0xf, Sect: 0x8, Desc: 0x0, Value: 0x100001020}, + macho.Symbol{Name: "_write", Type: 0x1, Sect: 0x0, Desc: 0x100, Value: 0x0}, + macho.Symbol{Name: "dyld_stub_binder", Type: 0x1, Sect: 0x0, Desc: 0x100, Value: 0x0}, + }, + }, +} + +/* Generated from: clang -o a.out test2.c + +#include + +char symbol1[128] = "PLACEHOLDER1"; +char symbol2[128] = "PLACEHOLDER2"; + +int main() { + write(STDOUT_FILENO, symbol1, sizeof(symbol1)); + write(STDOUT_FILENO, symbol2, sizeof(symbol2)); +} +*/ + +var machoSymbolTable2 = &macho.File{ + Sections: []*macho.Section{ + &macho.Section{SectionHeader: macho.SectionHeader{Name: "__text", Seg: "__TEXT", Addr: 0x100000f30, Size: 0x4a, Offset: 0xf30, Align: 0x4, Reloff: 0x0, Nreloc: 0x0, Flags: 0x80000400}}, + &macho.Section{SectionHeader: macho.SectionHeader{Name: "__stubs", Seg: "__TEXT", Addr: 0x100000f7a, Size: 0x6, Offset: 0xf7a, Align: 0x1, Reloff: 0x0, Nreloc: 0x0, Flags: 0x80000408}}, + &macho.Section{SectionHeader: macho.SectionHeader{Name: "__stub_helper", Seg: "__TEXT", Addr: 0x100000f80, Size: 0x1a, Offset: 0xf80, Align: 0x2, Reloff: 0x0, Nreloc: 0x0, Flags: 0x80000400}}, + &macho.Section{SectionHeader: macho.SectionHeader{Name: "__unwind_info", Seg: "__TEXT", Addr: 0x100000f9c, Size: 0x48, Offset: 0xf9c, Align: 0x2, Reloff: 0x0, Nreloc: 0x0, Flags: 0x0}}, + &macho.Section{SectionHeader: macho.SectionHeader{Name: "__eh_frame", Seg: "__TEXT", Addr: 0x100000fe8, Size: 0x18, Offset: 0xfe8, Align: 0x3, Reloff: 0x0, Nreloc: 0x0, Flags: 0x0}}, + &macho.Section{SectionHeader: macho.SectionHeader{Name: "__nl_symbol_ptr", Seg: "__DATA", Addr: 0x100001000, Size: 0x10, Offset: 0x1000, Align: 0x3, Reloff: 0x0, Nreloc: 0x0, Flags: 0x6}}, + &macho.Section{SectionHeader: macho.SectionHeader{Name: "__la_symbol_ptr", Seg: "__DATA", Addr: 0x100001010, Size: 0x8, Offset: 0x1010, Align: 0x3, Reloff: 0x0, Nreloc: 0x0, Flags: 0x7}}, + &macho.Section{SectionHeader: macho.SectionHeader{Name: "__data", Seg: "__DATA", Addr: 0x100001020, Size: 0x100, Offset: 0x1020, Align: 0x4, Reloff: 0x0, Nreloc: 0x0, Flags: 0x0}}, + }, + Symtab: &macho.Symtab{ + Syms: []macho.Symbol{ + macho.Symbol{Name: "__mh_execute_header", Type: 0xf, Sect: 0x1, Desc: 0x10, Value: 0x100000000}, + macho.Symbol{Name: "_main", Type: 0xf, Sect: 0x1, Desc: 0x0, Value: 0x100000f30}, + macho.Symbol{Name: "_symbol1", Type: 0xf, Sect: 0x8, Desc: 0x0, Value: 0x100001020}, + macho.Symbol{Name: "_symbol2", Type: 0xf, Sect: 0x8, Desc: 0x0, Value: 0x1000010a0}, + macho.Symbol{Name: "_write", Type: 0x1, Sect: 0x0, Desc: 0x100, Value: 0x0}, + macho.Symbol{Name: "dyld_stub_binder", Type: 0x1, Sect: 0x0, Desc: 0x100, Value: 0x0}, + }, + }, +} diff --git a/cmd/symbol_inject/macho_test.go b/cmd/symbol_inject/macho_test.go new file mode 100644 index 000000000..7acab23d6 --- /dev/null +++ b/cmd/symbol_inject/macho_test.go @@ -0,0 +1,64 @@ +// Copyright 2018 Google Inc. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package main + +import ( + "debug/macho" + "strconv" + "testing" +) + +func TestMachoSymbolTable(t *testing.T) { + testCases := []struct { + file *macho.File + symbol string + offset, size uint64 + }{ + { + file: machoSymbolTable1, + symbol: "soong_build_number", + offset: 0x1020, + size: 128, + }, + { + file: machoSymbolTable2, + symbol: "symbol1", + offset: 0x1020, + size: 128, + }, + { + file: machoSymbolTable2, + symbol: "symbol2", + offset: 0x10a0, + size: 128, + }, + } + + for i, testCase := range testCases { + t.Run(strconv.Itoa(i), func(t *testing.T) { + file, err := extractMachoSymbols(testCase.file) + if err != nil { + t.Error(err.Error()) + } + offset, size, err := findSymbol(file, testCase.symbol) + if err != nil { + t.Error(err.Error()) + } + if offset != testCase.offset || size != testCase.size { + t.Errorf("expected %x:%x, got %x:%x", testCase.offset, testCase.size, offset, size) + } + }) + } +} diff --git a/cmd/symbol_inject/pe.go b/cmd/symbol_inject/pe.go index 82fdff8cf..12f35ee04 100644 --- a/cmd/symbol_inject/pe.go +++ b/cmd/symbol_inject/pe.go @@ -19,54 +19,84 @@ import ( "fmt" "io" "sort" + "strings" ) -func findPESymbol(r io.ReaderAt, symbolName string) (uint64, uint64, error) { +func peSymbolsFromFile(r io.ReaderAt) (*File, error) { peFile, err := pe.NewFile(r) if err != nil { - return maxUint64, maxUint64, cantParseError{err} + return nil, cantParseError{err} } + return extractPESymbols(peFile) +} + +func extractPESymbols(peFile *pe.File) (*File, error) { + var prefix string if peFile.FileHeader.Machine == pe.IMAGE_FILE_MACHINE_I386 { // symbols in win32 exes seem to be prefixed with an underscore - symbolName = "_" + symbolName + prefix = "_" } symbols := peFile.Symbols - sort.Slice(symbols, func(i, j int) bool { + sort.SliceStable(symbols, func(i, j int) bool { if symbols[i].SectionNumber != symbols[j].SectionNumber { return symbols[i].SectionNumber < symbols[j].SectionNumber } return symbols[i].Value < symbols[j].Value }) + file := &File{} + + for _, section := range peFile.Sections { + file.Sections = append(file.Sections, &Section{ + Name: section.Name, + Addr: uint64(section.VirtualAddress), + Offset: uint64(section.Offset), + Size: uint64(section.VirtualSize), + }) + } + for _, symbol := range symbols { - if symbol.Name == symbolName { - // Find the next symbol (n the same section with a higher address - n := sort.Search(len(symbols), func(i int) bool { - return symbols[i].SectionNumber == symbol.SectionNumber && - symbols[i].Value > symbol.Value + if symbol.SectionNumber > 0 { + file.Symbols = append(file.Symbols, &Symbol{ + Name: strings.TrimPrefix(symbol.Name, prefix), + // PE symbol value is the offset of the symbol into the section + Addr: uint64(symbol.Value), + // PE symbols don't have size information + Size: 0, + Section: file.Sections[symbol.SectionNumber-1], }) - - section := peFile.Sections[symbol.SectionNumber-1] - - var end uint32 - if n < len(symbols) { - end = symbols[n].Value - } else { - end = section.Size - } - - if end <= symbol.Value && end > symbol.Value+4096 { - return maxUint64, maxUint64, fmt.Errorf("symbol end address does not seem valid, %x:%x", symbol.Value, end) - } - - size := end - symbol.Value - 1 - offset := section.Offset + symbol.Value - - return uint64(offset), uint64(size), nil } } - return maxUint64, maxUint64, fmt.Errorf("symbol not found") + return file, nil +} + +func dumpPESymbols(r io.ReaderAt) error { + peFile, err := pe.NewFile(r) + if err != nil { + return cantParseError{err} + } + + fmt.Println("&pe.File{") + fmt.Println("\tFileHeader: pe.FileHeader{") + fmt.Printf("\t\tMachine: %#v,\n", peFile.FileHeader.Machine) + fmt.Println("\t},") + + fmt.Println("\tSections: []*pe.Section{") + for _, section := range peFile.Sections { + fmt.Printf("\t\t&pe.Section{SectionHeader: %#v},\n", section.SectionHeader) + } + fmt.Println("\t},") + + fmt.Println("\tSymbols: []*pe.Symbol{") + for _, symbol := range peFile.Symbols { + fmt.Printf("\t\t%#v,\n", symbol) + } + fmt.Println("\t},") + + fmt.Println("}") + + return nil } diff --git a/cmd/symbol_inject/pe_symboldata_test.go b/cmd/symbol_inject/pe_symboldata_test.go new file mode 100644 index 000000000..edc1c976c --- /dev/null +++ b/cmd/symbol_inject/pe_symboldata_test.go @@ -0,0 +1,2102 @@ +// Copyright 2018 Google Inc. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package main + +import ( + "debug/pe" +) + +/* +Generated from: prebuilts/gcc/linux-x86/host/x86_64-w64-mingw32-4.8/bin/x86_64-w64-mingw32-g++ -o a.exe test.c + +#include + +char soong_build_number[128] = "PLACEHOLDER"; + +int main() { + write(STDOUT_FILENO, soong_build_number, sizeof(soong_build_number)); +*/ + +var peSymbolTable1 = &pe.File{ + FileHeader: pe.FileHeader{ + Machine: pe.IMAGE_FILE_MACHINE_AMD64, + }, + Sections: []*pe.Section{ + &pe.Section{SectionHeader: pe.SectionHeader{Name: ".text", VirtualSize: 0x1cc0, VirtualAddress: 0x1000, Size: 0x1e00, Offset: 0x600, PointerToRelocations: 0x0, PointerToLineNumbers: 0x0, NumberOfRelocations: 0x0, NumberOfLineNumbers: 0x0, Characteristics: 0x60500020}}, + &pe.Section{SectionHeader: pe.SectionHeader{Name: ".data", VirtualSize: 0x120, VirtualAddress: 0x3000, Size: 0x200, Offset: 0x2400, PointerToRelocations: 0x0, PointerToLineNumbers: 0x0, NumberOfRelocations: 0x0, NumberOfLineNumbers: 0x0, Characteristics: 0xc0600040}}, + &pe.Section{SectionHeader: pe.SectionHeader{Name: ".rdata", VirtualSize: 0x5e0, VirtualAddress: 0x4000, Size: 0x600, Offset: 0x2600, PointerToRelocations: 0x0, PointerToLineNumbers: 0x0, NumberOfRelocations: 0x0, NumberOfLineNumbers: 0x0, Characteristics: 0x40500040}}, + &pe.Section{SectionHeader: pe.SectionHeader{Name: ".pdata", VirtualSize: 0x234, VirtualAddress: 0x5000, Size: 0x400, Offset: 0x2c00, PointerToRelocations: 0x0, PointerToLineNumbers: 0x0, NumberOfRelocations: 0x0, NumberOfLineNumbers: 0x0, Characteristics: 0x40300040}}, + &pe.Section{SectionHeader: pe.SectionHeader{Name: ".xdata", VirtualSize: 0x200, VirtualAddress: 0x6000, Size: 0x200, Offset: 0x3000, PointerToRelocations: 0x0, PointerToLineNumbers: 0x0, NumberOfRelocations: 0x0, NumberOfLineNumbers: 0x0, Characteristics: 0x40300040}}, + &pe.Section{SectionHeader: pe.SectionHeader{Name: ".bss", VirtualSize: 0x9b0, VirtualAddress: 0x7000, Size: 0x0, Offset: 0x0, PointerToRelocations: 0x0, PointerToLineNumbers: 0x0, NumberOfRelocations: 0x0, NumberOfLineNumbers: 0x0, Characteristics: 0xc0600080}}, + &pe.Section{SectionHeader: pe.SectionHeader{Name: ".idata", VirtualSize: 0x7c8, VirtualAddress: 0x8000, Size: 0x800, Offset: 0x3200, PointerToRelocations: 0x0, PointerToLineNumbers: 0x0, NumberOfRelocations: 0x0, NumberOfLineNumbers: 0x0, Characteristics: 0xc0300040}}, + &pe.Section{SectionHeader: pe.SectionHeader{Name: ".CRT", VirtualSize: 0x68, VirtualAddress: 0x9000, Size: 0x200, Offset: 0x3a00, PointerToRelocations: 0x0, PointerToLineNumbers: 0x0, NumberOfRelocations: 0x0, NumberOfLineNumbers: 0x0, Characteristics: 0xc0400040}}, + &pe.Section{SectionHeader: pe.SectionHeader{Name: ".tls", VirtualSize: 0x68, VirtualAddress: 0xa000, Size: 0x200, Offset: 0x3c00, PointerToRelocations: 0x0, PointerToLineNumbers: 0x0, NumberOfRelocations: 0x0, NumberOfLineNumbers: 0x0, Characteristics: 0xc0600040}}, + &pe.Section{SectionHeader: pe.SectionHeader{Name: ".debug_aranges", VirtualSize: 0x420, VirtualAddress: 0xb000, Size: 0x600, Offset: 0x3e00, PointerToRelocations: 0x0, PointerToLineNumbers: 0x0, NumberOfRelocations: 0x0, NumberOfLineNumbers: 0x0, Characteristics: 0x42500040}}, + &pe.Section{SectionHeader: pe.SectionHeader{Name: ".debug_info", VirtualSize: 0xc125, VirtualAddress: 0xc000, Size: 0xc200, Offset: 0x4400, PointerToRelocations: 0x0, PointerToLineNumbers: 0x0, NumberOfRelocations: 0x0, NumberOfLineNumbers: 0x0, Characteristics: 0x42100040}}, + &pe.Section{SectionHeader: pe.SectionHeader{Name: ".debug_abbrev", VirtualSize: 0x1a80, VirtualAddress: 0x19000, Size: 0x1c00, Offset: 0x10600, PointerToRelocations: 0x0, PointerToLineNumbers: 0x0, NumberOfRelocations: 0x0, NumberOfLineNumbers: 0x0, Characteristics: 0x42100040}}, + &pe.Section{SectionHeader: pe.SectionHeader{Name: ".debug_line", VirtualSize: 0x2182, VirtualAddress: 0x1b000, Size: 0x2200, Offset: 0x12200, PointerToRelocations: 0x0, PointerToLineNumbers: 0x0, NumberOfRelocations: 0x0, NumberOfLineNumbers: 0x0, Characteristics: 0x42100040}}, + &pe.Section{SectionHeader: pe.SectionHeader{Name: ".debug_frame", VirtualSize: 0xb28, VirtualAddress: 0x1e000, Size: 0xc00, Offset: 0x14400, PointerToRelocations: 0x0, PointerToLineNumbers: 0x0, NumberOfRelocations: 0x0, NumberOfLineNumbers: 0x0, Characteristics: 0x42400040}}, + &pe.Section{SectionHeader: pe.SectionHeader{Name: ".debug_str", VirtualSize: 0x300, VirtualAddress: 0x1f000, Size: 0x400, Offset: 0x15000, PointerToRelocations: 0x0, PointerToLineNumbers: 0x0, NumberOfRelocations: 0x0, NumberOfLineNumbers: 0x0, Characteristics: 0x42100040}}, + &pe.Section{SectionHeader: pe.SectionHeader{Name: ".debug_loc", VirtualSize: 0x2b76, VirtualAddress: 0x20000, Size: 0x2c00, Offset: 0x15400, PointerToRelocations: 0x0, PointerToLineNumbers: 0x0, NumberOfRelocations: 0x0, NumberOfLineNumbers: 0x0, Characteristics: 0x42100040}}, + &pe.Section{SectionHeader: pe.SectionHeader{Name: ".debug_ranges", VirtualSize: 0x4f0, VirtualAddress: 0x23000, Size: 0x600, Offset: 0x18000, PointerToRelocations: 0x0, PointerToLineNumbers: 0x0, NumberOfRelocations: 0x0, NumberOfLineNumbers: 0x0, Characteristics: 0x42100040}}, + }, + Symbols: []*pe.Symbol{ + &pe.Symbol{Name: ".file", Value: 0x35, SectionNumber: -2, Type: 0x0, StorageClass: 0x67}, + &pe.Symbol{Name: "__mingw_invalidParameterHandler", Value: 0x0, SectionNumber: 1, Type: 0x20, StorageClass: 0x3}, + &pe.Symbol{Name: "pre_c_init", Value: 0x10, SectionNumber: 1, Type: 0x20, StorageClass: 0x3}, + &pe.Symbol{Name: "managedapp", Value: 0x8, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: "pre_cpp_init", Value: 0x130, SectionNumber: 1, Type: 0x20, StorageClass: 0x3}, + &pe.Symbol{Name: "envp", Value: 0x18, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: "argv", Value: 0x20, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: "argc", Value: 0x28, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: "startinfo", Value: 0x0, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: "argret", Value: 0x10, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: "__tmainCRTStartup", Value: 0x180, SectionNumber: 1, Type: 0x20, StorageClass: 0x3}, + &pe.Symbol{Name: "has_cctor", Value: 0x4, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: "mainret", Value: 0xc, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: "WinMainCRTStartup", Value: 0x4b0, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: ".l_startw", Value: 0x4b4, SectionNumber: 1, Type: 0x0, StorageClass: 0x6}, + &pe.Symbol{Name: ".l_endw", Value: 0x4c9, SectionNumber: 1, Type: 0x0, StorageClass: 0x6}, + &pe.Symbol{Name: "mainCRTStartup", Value: 0x4d0, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: ".l_start", Value: 0x4d4, SectionNumber: 1, Type: 0x0, StorageClass: 0x6}, + &pe.Symbol{Name: ".l_end", Value: 0x4e9, SectionNumber: 1, Type: 0x0, StorageClass: 0x6}, + &pe.Symbol{Name: ".text", Value: 0x0, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x0, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x0, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".xdata", Value: 0x0, SectionNumber: 5, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".pdata", Value: 0x0, SectionNumber: 4, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".CRT$XCAA", Value: 0x8, SectionNumber: 8, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".CRT$XIAA", Value: 0x20, SectionNumber: 8, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_info", Value: 0x0, SectionNumber: 11, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_abbrev", Value: 0x0, SectionNumber: 12, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_loc", Value: 0x0, SectionNumber: 16, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_aranges", Value: 0x0, SectionNumber: 10, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_ranges", Value: 0x0, SectionNumber: 17, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_line", Value: 0x0, SectionNumber: 13, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_str", Value: 0x0, SectionNumber: 15, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".rdata$zzz", Value: 0x280, SectionNumber: 3, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_frame", Value: 0x0, SectionNumber: 14, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".file", Value: 0x3f, SectionNumber: -2, Type: 0x0, StorageClass: 0x67}, + &pe.Symbol{Name: ".text", Value: 0x4f0, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x10, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x30, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".rdata$zzz", Value: 0x2a0, SectionNumber: 3, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".file", Value: 0x4f, SectionNumber: -2, Type: 0x0, StorageClass: 0x67}, + &pe.Symbol{Name: "main", Value: 0x4f0, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: ".text", Value: 0x4f0, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x20, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x30, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".xdata", Value: 0x68, SectionNumber: 5, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".pdata", Value: 0x48, SectionNumber: 4, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".rdata$zzz", Value: 0x2c0, SectionNumber: 3, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".file", Value: 0x6c, SectionNumber: -2, Type: 0x0, StorageClass: 0x67}, + &pe.Symbol{Name: "mingw_onexit", Value: 0x520, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "atexit", Value: 0x5d0, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: ".text", Value: 0x520, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0xa0, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x30, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".xdata", Value: 0x74, SectionNumber: 5, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".pdata", Value: 0x54, SectionNumber: 4, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_info", Value: 0x27d0, SectionNumber: 11, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_abbrev", Value: 0x433, SectionNumber: 12, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_loc", Value: 0x510, SectionNumber: 16, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_aranges", Value: 0x30, SectionNumber: 10, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_line", Value: 0x3de, SectionNumber: 13, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".rdata$zzz", Value: 0x2e0, SectionNumber: 3, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_frame", Value: 0x120, SectionNumber: 14, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".file", Value: 0x8c, SectionNumber: -2, Type: 0x0, StorageClass: 0x67}, + &pe.Symbol{Name: "__do_global_dtors", Value: 0x5f0, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "p.68721", Value: 0xa0, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: "__do_global_ctors", Value: 0x630, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "__main", Value: 0x690, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "initialized", Value: 0x30, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x5f0, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0xa0, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x30, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".xdata", Value: 0x84, SectionNumber: 5, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".pdata", Value: 0x6c, SectionNumber: 4, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_info", Value: 0x2ed5, SectionNumber: 11, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_abbrev", Value: 0x5ae, SectionNumber: 12, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_loc", Value: 0x607, SectionNumber: 16, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_aranges", Value: 0x60, SectionNumber: 10, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_line", Value: 0x5a3, SectionNumber: 13, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".rdata$zzz", Value: 0x300, SectionNumber: 3, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_frame", Value: 0x190, SectionNumber: 14, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".file", Value: 0xa0, SectionNumber: -2, Type: 0x0, StorageClass: 0x67}, + &pe.Symbol{Name: ".text", Value: 0x6b0, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0xb0, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x40, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_info", Value: 0x34aa, SectionNumber: 11, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_abbrev", Value: 0x6c2, SectionNumber: 12, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_aranges", Value: 0x90, SectionNumber: 10, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_line", Value: 0x710, SectionNumber: 13, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_str", Value: 0x21f, SectionNumber: 15, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".rdata$zzz", Value: 0x320, SectionNumber: 3, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".file", Value: 0xb2, SectionNumber: -2, Type: 0x0, StorageClass: 0x67}, + &pe.Symbol{Name: ".text", Value: 0x6b0, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0xc0, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x40, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_info", Value: 0x3a06, SectionNumber: 11, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_abbrev", Value: 0x744, SectionNumber: 12, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_aranges", Value: 0xb0, SectionNumber: 10, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_line", Value: 0x894, SectionNumber: 13, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".rdata$zzz", Value: 0x340, SectionNumber: 3, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".file", Value: 0xce, SectionNumber: -2, Type: 0x0, StorageClass: 0x67}, + &pe.Symbol{Name: "my_lconv_init", Value: 0x6b0, SectionNumber: 1, Type: 0x20, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x6b0, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0xc0, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x50, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".xdata", Value: 0x9c, SectionNumber: 5, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".pdata", Value: 0x90, SectionNumber: 4, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".CRT$XIC", Value: 0x28, SectionNumber: 8, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_info", Value: 0x3ae7, SectionNumber: 11, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_abbrev", Value: 0x76e, SectionNumber: 12, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_aranges", Value: 0xd0, SectionNumber: 10, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_line", Value: 0x91f, SectionNumber: 13, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".rdata$zzz", Value: 0x360, SectionNumber: 3, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_frame", Value: 0x218, SectionNumber: 14, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".file", Value: 0xe8, SectionNumber: -2, Type: 0x0, StorageClass: 0x67}, + &pe.Symbol{Name: "_setargv", Value: 0x6c0, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: ".text", Value: 0x6c0, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0xd0, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x60, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".xdata", Value: 0xa0, SectionNumber: 5, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".pdata", Value: 0x9c, SectionNumber: 4, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_info", Value: 0x3ffe, SectionNumber: 11, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_abbrev", Value: 0x808, SectionNumber: 12, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_aranges", Value: 0x100, SectionNumber: 10, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_line", Value: 0xab8, SectionNumber: 13, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".rdata$zzz", Value: 0x380, SectionNumber: 3, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_frame", Value: 0x248, SectionNumber: 14, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".file", Value: 0x110, SectionNumber: -2, Type: 0x0, StorageClass: 0x67}, + &pe.Symbol{Name: "__security_init_cookie", Value: 0x6d0, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: ".data$__security_cookie", Value: 0x100, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data$__security_cookie_complement", Value: 0x110, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: "__report_gsfailure", Value: 0x7a0, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "GS_ContextRecord", Value: 0x60, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: "GS_ExceptionRecord", Value: 0x540, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: "GS_ExceptionPointers", Value: 0x0, SectionNumber: 3, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x6d0, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0xd0, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x60, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".xdata", Value: 0xa4, SectionNumber: 5, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".pdata", Value: 0xa8, SectionNumber: 4, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".rdata", Value: 0x0, SectionNumber: 3, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_info", Value: 0x41c8, SectionNumber: 11, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_abbrev", Value: 0x83f, SectionNumber: 12, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_loc", Value: 0x6ae, SectionNumber: 16, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_aranges", Value: 0x130, SectionNumber: 10, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_line", Value: 0xb56, SectionNumber: 13, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_str", Value: 0x237, SectionNumber: 15, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".rdata$zzz", Value: 0x3a0, SectionNumber: 3, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_frame", Value: 0x278, SectionNumber: 14, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".file", Value: 0x122, SectionNumber: -2, Type: 0x0, StorageClass: 0x67}, + &pe.Symbol{Name: ".text", Value: 0x8a0, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0xd0, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x5e0, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_info", Value: 0x506e, SectionNumber: 11, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_abbrev", Value: 0xa10, SectionNumber: 12, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_aranges", Value: 0x160, SectionNumber: 10, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_line", Value: 0xcde, SectionNumber: 13, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".rdata$zzz", Value: 0x3c0, SectionNumber: 3, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".file", Value: 0x158, SectionNumber: -2, Type: 0x0, StorageClass: 0x67}, + &pe.Symbol{Name: "__dyn_tls_dtor", Value: 0x8a0, SectionNumber: 1, Type: 0x20, StorageClass: 0x3}, + &pe.Symbol{Name: "__dyn_tls_init", Value: 0x8d0, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "__xd_a", Value: 0x58, SectionNumber: 8, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: "__xd_z", Value: 0x60, SectionNumber: 8, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: "__tlregdtor", Value: 0x940, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: ".text", Value: 0x8a0, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0xd0, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x5f0, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".xdata", Value: 0xc4, SectionNumber: 5, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".pdata", Value: 0xc0, SectionNumber: 4, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".CRT$XLD", Value: 0x48, SectionNumber: 8, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".CRT$XLC", Value: 0x40, SectionNumber: 8, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".rdata", Value: 0x10, SectionNumber: 3, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".CRT$XDZ", Value: 0x60, SectionNumber: 8, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".CRT$XDA", Value: 0x58, SectionNumber: 8, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".tls", Value: 0x20, SectionNumber: 9, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".CRT$XLZ", Value: 0x50, SectionNumber: 8, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".CRT$XLA", Value: 0x38, SectionNumber: 8, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".tls$ZZZ", Value: 0x60, SectionNumber: 9, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".tls$AAA", Value: 0x0, SectionNumber: 9, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_info", Value: 0x514c, SectionNumber: 11, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_abbrev", Value: 0xa3a, SectionNumber: 12, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_loc", Value: 0x816, SectionNumber: 16, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_aranges", Value: 0x180, SectionNumber: 10, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_line", Value: 0xd69, SectionNumber: 13, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_str", Value: 0x250, SectionNumber: 15, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".rdata$zzz", Value: 0x3e0, SectionNumber: 3, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_frame", Value: 0x330, SectionNumber: 14, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".file", Value: 0x172, SectionNumber: -2, Type: 0x0, StorageClass: 0x67}, + &pe.Symbol{Name: ".text", Value: 0x950, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0xd0, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x600, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".CRT$XCZ", Value: 0x10, SectionNumber: 8, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".CRT$XCA", Value: 0x0, SectionNumber: 8, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".CRT$XIZ", Value: 0x30, SectionNumber: 8, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".CRT$XIA", Value: 0x18, SectionNumber: 8, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_info", Value: 0x5854, SectionNumber: 11, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_abbrev", Value: 0xbce, SectionNumber: 12, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_aranges", Value: 0x1b0, SectionNumber: 10, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_line", Value: 0xec8, SectionNumber: 13, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".rdata$zzz", Value: 0x400, SectionNumber: 3, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".file", Value: 0x193, SectionNumber: -2, Type: 0x0, StorageClass: 0x67}, + &pe.Symbol{Name: "__mingw_raise_matherr", Value: 0x950, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "stUserMathErr", Value: 0x600, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: "__mingw_setusermatherr", Value: 0x9a0, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "_matherr", Value: 0x9b0, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: ".text", Value: 0x950, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0xd0, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x600, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".xdata", Value: 0xdc, SectionNumber: 5, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".pdata", Value: 0xe4, SectionNumber: 4, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".rdata", Value: 0x20, SectionNumber: 3, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_info", Value: 0x5a33, SectionNumber: 11, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_abbrev", Value: 0xc27, SectionNumber: 12, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_loc", Value: 0xb6f, SectionNumber: 16, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_aranges", Value: 0x1d0, SectionNumber: 10, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_line", Value: 0xf53, SectionNumber: 13, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".rdata$zzz", Value: 0x420, SectionNumber: 3, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_frame", Value: 0x3d0, SectionNumber: 14, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".file", Value: 0x1ae, SectionNumber: -2, Type: 0x0, StorageClass: 0x67}, + &pe.Symbol{Name: "_fpreset", Value: 0xab0, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "fpreset", Value: 0xab0, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: ".text", Value: 0xab0, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0xd0, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x610, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".xdata", Value: 0x100, SectionNumber: 5, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".pdata", Value: 0x108, SectionNumber: 4, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_info", Value: 0x61bd, SectionNumber: 11, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_abbrev", Value: 0xda1, SectionNumber: 12, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_aranges", Value: 0x200, SectionNumber: 10, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_line", Value: 0x1129, SectionNumber: 13, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".rdata$zzz", Value: 0x440, SectionNumber: 3, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_frame", Value: 0x460, SectionNumber: 14, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".file", Value: 0x1c9, SectionNumber: -2, Type: 0x0, StorageClass: 0x67}, + &pe.Symbol{Name: "_decode_pointer", Value: 0xac0, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "_encode_pointer", Value: 0xad0, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: ".text", Value: 0xac0, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0xd0, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x610, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".xdata", Value: 0x104, SectionNumber: 5, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".pdata", Value: 0x114, SectionNumber: 4, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_info", Value: 0x62a8, SectionNumber: 11, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_abbrev", Value: 0xdcb, SectionNumber: 12, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_aranges", Value: 0x230, SectionNumber: 10, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_line", Value: 0x11c8, SectionNumber: 13, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".rdata$zzz", Value: 0x460, SectionNumber: 3, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_frame", Value: 0x490, SectionNumber: 14, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".file", Value: 0x1f0, SectionNumber: -2, Type: 0x0, StorageClass: 0x67}, + &pe.Symbol{Name: "__report_error", Value: 0xae0, SectionNumber: 1, Type: 0x20, StorageClass: 0x3}, + &pe.Symbol{Name: "__write_memory.part.0", Value: 0xb50, SectionNumber: 1, Type: 0x20, StorageClass: 0x3}, + &pe.Symbol{Name: "maxSections", Value: 0x624, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: "the_secs", Value: 0x628, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: "_pei386_runtime_relocator", Value: 0xcd0, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "was_init.70054", Value: 0x620, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0xae0, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0xd0, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x620, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".rdata", Value: 0x160, SectionNumber: 3, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".xdata", Value: 0x10c, SectionNumber: 5, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".pdata", Value: 0x12c, SectionNumber: 4, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_info", Value: 0x67b9, SectionNumber: 11, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_abbrev", Value: 0xe52, SectionNumber: 12, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_loc", Value: 0xda1, SectionNumber: 16, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_aranges", Value: 0x260, SectionNumber: 10, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_ranges", Value: 0xe0, SectionNumber: 17, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_line", Value: 0x12f7, SectionNumber: 13, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_str", Value: 0x26f, SectionNumber: 15, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".rdata$zzz", Value: 0x480, SectionNumber: 3, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_frame", Value: 0x4d8, SectionNumber: 14, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".file", Value: 0x202, SectionNumber: -2, Type: 0x0, StorageClass: 0x67}, + &pe.Symbol{Name: ".text", Value: 0xff0, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0xd0, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x630, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_info", Value: 0x79a7, SectionNumber: 11, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_abbrev", Value: 0x1174, SectionNumber: 12, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_aranges", Value: 0x290, SectionNumber: 10, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_line", Value: 0x157b, SectionNumber: 13, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".rdata$zzz", Value: 0x4a0, SectionNumber: 3, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".file", Value: 0x227, SectionNumber: -2, Type: 0x0, StorageClass: 0x67}, + &pe.Symbol{Name: "__mingw_SEH_error_handler", Value: 0xff0, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "__mingw_init_ehandler", Value: 0x11b0, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "was_here.69886", Value: 0x648, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: "emu_pdata", Value: 0x760, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: "emu_xdata", Value: 0x660, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: "_gnu_exception_handler", Value: 0x12a0, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: ".text", Value: 0xff0, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0xd0, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x640, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".xdata", Value: 0x144, SectionNumber: 5, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".pdata", Value: 0x150, SectionNumber: 4, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".rdata", Value: 0x270, SectionNumber: 3, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_info", Value: 0x7a83, SectionNumber: 11, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_abbrev", Value: 0x119e, SectionNumber: 12, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_loc", Value: 0x161e, SectionNumber: 16, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_aranges", Value: 0x2b0, SectionNumber: 10, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_line", Value: 0x1606, SectionNumber: 13, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_str", Value: 0x278, SectionNumber: 15, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".rdata$zzz", Value: 0x4c0, SectionNumber: 3, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_frame", Value: 0x5d0, SectionNumber: 14, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".file", Value: 0x24b, SectionNumber: -2, Type: 0x0, StorageClass: 0x67}, + &pe.Symbol{Name: "__mingwthr_run_key_dtors.part.0", Value: 0x1450, SectionNumber: 1, Type: 0x20, StorageClass: 0x3}, + &pe.Symbol{Name: "__mingwthr_cs", Value: 0x900, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: "key_dtor_list", Value: 0x8e0, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: "___w64_mingwthr_add_key_dtor", Value: 0x14c0, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "__mingwthr_cs_init", Value: 0x8e8, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: "___w64_mingwthr_remove_key_dtor", Value: 0x1540, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "__mingw_TLScallback", Value: 0x15e0, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: ".text", Value: 0x1450, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0xd0, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x8e0, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".xdata", Value: 0x168, SectionNumber: 5, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".pdata", Value: 0x174, SectionNumber: 4, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_info", Value: 0x8f89, SectionNumber: 11, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_abbrev", Value: 0x1402, SectionNumber: 12, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_loc", Value: 0x1f13, SectionNumber: 16, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_aranges", Value: 0x2e0, SectionNumber: 10, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_ranges", Value: 0x330, SectionNumber: 17, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_line", Value: 0x185b, SectionNumber: 13, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".rdata$zzz", Value: 0x4e0, SectionNumber: 3, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_frame", Value: 0x6d8, SectionNumber: 14, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".file", Value: 0x25d, SectionNumber: -2, Type: 0x0, StorageClass: 0x67}, + &pe.Symbol{Name: ".text", Value: 0x16d0, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0xd0, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x940, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_info", Value: 0x98ad, SectionNumber: 11, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_abbrev", Value: 0x15e4, SectionNumber: 12, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_aranges", Value: 0x310, SectionNumber: 10, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_line", Value: 0x1a30, SectionNumber: 13, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".rdata$zzz", Value: 0x500, SectionNumber: 3, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".file", Value: 0x26f, SectionNumber: -2, Type: 0x0, StorageClass: 0x67}, + &pe.Symbol{Name: ".text", Value: 0x16d0, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0xe0, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x940, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_info", Value: 0x9989, SectionNumber: 11, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_abbrev", Value: 0x160e, SectionNumber: 12, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_aranges", Value: 0x330, SectionNumber: 10, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_line", Value: 0x1aba, SectionNumber: 13, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".rdata$zzz", Value: 0x520, SectionNumber: 3, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".file", Value: 0x298, SectionNumber: -2, Type: 0x0, StorageClass: 0x67}, + &pe.Symbol{Name: "_ValidateImageBase.part.0", Value: 0x16d0, SectionNumber: 1, Type: 0x20, StorageClass: 0x3}, + &pe.Symbol{Name: "_ValidateImageBase", Value: 0x16f0, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "_FindPESection", Value: 0x1710, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "_FindPESectionByName", Value: 0x1760, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "__mingw_GetSectionForAddress", Value: 0x1810, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "__mingw_GetSectionCount", Value: 0x1860, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "_FindPESectionExec", Value: 0x18b0, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "_GetPEImageBase", Value: 0x1950, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "_IsNonwritableInCurrentImage", Value: 0x19a0, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "__mingw_enum_import_library_names", Value: 0x1a00, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: ".text", Value: 0x16d0, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0xe0, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x950, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".xdata", Value: 0x198, SectionNumber: 5, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".pdata", Value: 0x1a4, SectionNumber: 4, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_info", Value: 0x9ab9, SectionNumber: 11, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_abbrev", Value: 0x1638, SectionNumber: 12, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_loc", Value: 0x25ce, SectionNumber: 16, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_aranges", Value: 0x350, SectionNumber: 10, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_ranges", Value: 0x360, SectionNumber: 17, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_line", Value: 0x1b4e, SectionNumber: 13, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_str", Value: 0x2ac, SectionNumber: 15, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".rdata$zzz", Value: 0x540, SectionNumber: 3, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_frame", Value: 0x808, SectionNumber: 14, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".file", Value: 0x2aa, SectionNumber: -2, Type: 0x0, StorageClass: 0x67}, + &pe.Symbol{Name: ".debug_info", Value: 0xad5d, SectionNumber: 11, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_abbrev", Value: 0x18a1, SectionNumber: 12, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_line", Value: 0x1d87, SectionNumber: 13, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1ab0, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0xe0, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x950, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_aranges", Value: 0x380, SectionNumber: 10, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_frame", Value: 0xa98, SectionNumber: 14, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".file", Value: 0x2bc, SectionNumber: -2, Type: 0x0, StorageClass: 0x67}, + &pe.Symbol{Name: ".text", Value: 0x1af0, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0xe0, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x950, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_info", Value: 0xae44, SectionNumber: 11, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_abbrev", Value: 0x18b5, SectionNumber: 12, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_aranges", Value: 0x3b0, SectionNumber: 10, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_line", Value: 0x1e2a, SectionNumber: 13, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".rdata$zzz", Value: 0x560, SectionNumber: 3, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".file", Value: 0x399, SectionNumber: -2, Type: 0x0, StorageClass: 0x67}, + &pe.Symbol{Name: ".text", Value: 0x1af0, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0xe0, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x950, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_info", Value: 0xb9a0, SectionNumber: 11, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_abbrev", Value: 0x1928, SectionNumber: 12, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_aranges", Value: 0x3d0, SectionNumber: 10, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_line", Value: 0x1f18, SectionNumber: 13, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".rdata$zzz", Value: 0x580, SectionNumber: 3, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1af0, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0xf0, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x950, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x7b8, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x38c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x1dc, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x6d2, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1af8, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0xf0, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x950, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x7b4, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x384, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x1d4, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x6c6, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1b00, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0xf0, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x950, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x7b0, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x37c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x1cc, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x6bc, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1b08, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0xf0, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x950, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x7ac, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x374, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x1c4, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x6b2, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1b10, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0xf0, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x950, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x7a8, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x36c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x1bc, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x6a8, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1b18, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0xf0, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x950, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x7a4, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x364, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x1b4, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x69e, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1b20, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0xf0, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x950, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x7a0, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x35c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x1ac, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x694, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1b28, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0xf0, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x950, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x79c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x354, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x1a4, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x68a, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1b30, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0xf0, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x950, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x798, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x34c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x19c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x682, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1b38, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0xf0, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x950, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x794, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x344, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x194, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x678, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1b40, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0xf0, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x950, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x790, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x33c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x18c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x670, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1b48, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0xf0, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x950, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x78c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x334, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x184, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x666, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1b50, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0xf0, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x950, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x788, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x32c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x17c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x65e, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1b58, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0xf0, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x950, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x784, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x324, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x174, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x654, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1b60, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0xf0, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x950, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x780, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x31c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x16c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x64a, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1b68, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0xf0, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x950, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x77c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x314, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x164, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x642, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1b70, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0xf0, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x950, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x778, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x30c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x15c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x636, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1b78, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0xf0, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x950, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x774, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x304, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x154, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x62c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1b78, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0xf0, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x950, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x770, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x2fc, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x14c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x622, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1b80, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0xf0, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x950, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x76c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x2f4, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x144, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x614, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1b88, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0xf0, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x950, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x768, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x2ec, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x13c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x60a, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1b88, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0xf0, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x950, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x764, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x2e4, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x134, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x5f6, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1b90, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0xf0, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x950, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x760, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x2dc, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x12c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x5e4, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1b98, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0xf0, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x950, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x75c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x2d4, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x124, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x5d4, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1ba0, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0xf0, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x950, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x758, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x2cc, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x11c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x5c6, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1ba8, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0xf0, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x950, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x754, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x2c4, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x114, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x5ba, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1ba8, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0xf0, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x950, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x750, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x2bc, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x10c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x5aa, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1bb0, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0xf0, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x950, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x74c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x2b4, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x104, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x59c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1bb8, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0xf0, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x950, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x748, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x2ac, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0xfc, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x584, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".file", Value: 0x3b7, SectionNumber: -2, Type: 0x0, StorageClass: 0x67}, + &pe.Symbol{Name: "mingw_get_invalid_parameter_handler", Value: 0x1bc0, SectionNumber: 1, Type: 0x20, StorageClass: 0x3}, + &pe.Symbol{Name: "handler", Value: 0x950, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: "_get_invalid_parameter_handler", Value: 0x1bc0, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "mingw_set_invalid_parameter_handler", Value: 0x1bd0, SectionNumber: 1, Type: 0x20, StorageClass: 0x3}, + &pe.Symbol{Name: "_set_invalid_parameter_handler", Value: 0x1bd0, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: ".text", Value: 0x1bc0, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0xf0, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x950, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".xdata", Value: 0x1f8, SectionNumber: 5, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".pdata", Value: 0x21c, SectionNumber: 4, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_info", Value: 0xba98, SectionNumber: 11, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_abbrev", Value: 0x1952, SectionNumber: 12, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_aranges", Value: 0x3f0, SectionNumber: 10, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_line", Value: 0x1fa9, SectionNumber: 13, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".rdata$zzz", Value: 0x5a0, SectionNumber: 3, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_frame", Value: 0xae0, SectionNumber: 14, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".file", Value: 0x3c5, SectionNumber: -2, Type: 0x0, StorageClass: 0x67}, + &pe.Symbol{Name: "hname", Value: 0xfc, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: "fthunk", Value: 0x2ac, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1be0, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x100, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x960, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$2", Value: 0x14, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0xfc, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x2ac, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".file", Value: 0x474, SectionNumber: -2, Type: 0x0, StorageClass: 0x67}, + &pe.Symbol{Name: ".text", Value: 0x1be0, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x100, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x960, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x1e4, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x394, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x7bc, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1be0, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x100, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x960, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x734, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x29c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0xec, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x574, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1be8, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x100, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x960, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x730, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x294, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0xe4, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x562, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1bf0, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x100, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x960, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x72c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x28c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0xdc, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x546, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1bf8, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x100, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x960, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x728, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x284, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0xd4, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x538, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1c00, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x100, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x960, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x724, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x27c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0xcc, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x524, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1c08, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x100, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x960, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x720, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x274, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0xc4, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x51c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1c10, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x100, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x960, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x71c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x26c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0xbc, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x4fe, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1c18, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x100, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x960, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x718, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x264, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0xb4, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x4ea, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1c20, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x100, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x960, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x714, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x25c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0xac, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x4d0, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1c28, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x100, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x960, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x710, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x254, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0xa4, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x4bc, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1c30, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x100, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x960, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x70c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x24c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x9c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x4a6, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1c38, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x100, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x960, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x708, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x244, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x94, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x48c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1c40, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x100, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x960, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x704, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x23c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x8c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x474, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1c48, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x100, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x960, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x700, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x234, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x84, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x458, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1c50, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x100, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x960, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x6fc, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x22c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x7c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x448, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1c58, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x100, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x960, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x6f8, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x224, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x74, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x42e, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1c60, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x100, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x960, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x6f4, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x21c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x6c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x41c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1c68, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x100, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x960, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x6f0, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x214, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x64, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x40c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1c70, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x100, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x960, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x6ec, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x20c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x5c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x3f6, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1c78, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x100, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x960, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x6e8, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x204, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x54, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x3e0, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1c80, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x100, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x960, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x6e4, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x1fc, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x4c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x3cc, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1c88, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x100, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x960, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x6e0, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x1f4, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x44, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x3b4, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1c90, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x100, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x960, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x6dc, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x1ec, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x3c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x39c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".file", Value: 0x482, SectionNumber: -2, Type: 0x0, StorageClass: 0x67}, + &pe.Symbol{Name: "hname", Value: 0x3c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: "fthunk", Value: 0x1ec, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1ca0, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x100, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x960, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$2", Value: 0x0, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x3c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x1ec, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".file", Value: 0x490, SectionNumber: -2, Type: 0x0, StorageClass: 0x67}, + &pe.Symbol{Name: ".text", Value: 0x1ca0, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x100, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x960, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0xf4, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x2a4, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x738, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".file", Value: 0x49a, SectionNumber: -2, Type: 0x0, StorageClass: 0x67}, + &pe.Symbol{Name: ".text", Value: 0x1ca0, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x100, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x960, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".rdata$zzz", Value: 0x5c0, SectionNumber: 3, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: "__xc_z", Value: 0x10, SectionNumber: 8, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "___RUNTIME_PSEUDO_RELOC_LIST__", Value: 0x4045e0, SectionNumber: -1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp_GetStartupInfoA", Value: 0x21c, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp_abort", Value: 0x32c, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__lib64_libkernel32_a_iname", Value: 0x738, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__data_start__", Value: 0x0, SectionNumber: 2, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "___DTOR_LIST__", Value: 0x1cb0, SectionNumber: 1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp__fmode", Value: 0x304, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp__lock", Value: 0x314, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp_RtlVirtualUnwind", Value: 0x264, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "SetUnhandledExceptionFilter", Value: 0x1c10, SectionNumber: 1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp_calloc", Value: 0x334, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "_lock", Value: 0x1b68, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "___tls_start__", Value: 0x0, SectionNumber: 9, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__ImageBase", Value: 0x400000, SectionNumber: -1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__xl_a", Value: 0x38, SectionNumber: 8, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "GetLastError", Value: 0x1c68, SectionNumber: 1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "GetSystemTimeAsFileTime", Value: 0x1c58, SectionNumber: 1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "mingw_initltssuo_force", Value: 0x5f0, SectionNumber: 6, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__rt_psrelocs_start", Value: 0x5e0, SectionNumber: 3, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "_cexit", Value: 0x1b78, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp___dllonexit", Value: 0x2b4, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__dll_characteristics__", Value: 0x0, SectionNumber: -1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__size_of_stack_commit__", Value: 0x1000, SectionNumber: -1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__iob_func", Value: 0x1ba0, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp__acmdln", Value: 0x2ec, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__size_of_stack_reserve__", Value: 0x200000, SectionNumber: -1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__major_subsystem_version__", Value: 0x5, SectionNumber: -1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "___crt_xl_start__", Value: 0x38, SectionNumber: 8, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp_DeleteCriticalSection", Value: 0x1ec, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__xl_d", Value: 0x48, SectionNumber: 8, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp__set_invalid_parameter_handler", Value: 0xf8, SectionNumber: 2, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "_tls_end", Value: 0x60, SectionNumber: 9, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "VirtualQuery", Value: 0x1be0, SectionNumber: 1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "___crt_xi_start__", Value: 0x18, SectionNumber: 8, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp__amsg_exit", Value: 0x2f4, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "___crt_xi_end__", Value: 0x38, SectionNumber: 8, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "_tls_start", Value: 0x0, SectionNumber: 9, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "memcpy", Value: 0x1b18, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "__mingw_winmain_lpCmdLine", Value: 0x960, SectionNumber: 6, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__mingw_oldexcpt_handler", Value: 0x640, SectionNumber: 6, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp_GetCurrentThreadId", Value: 0x20c, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "malloc", Value: 0x1b20, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "GetCurrentProcessId", Value: 0x1c78, SectionNumber: 1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "_CRT_MT", Value: 0xd0, SectionNumber: 2, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "TlsGetValue", Value: 0x1bf8, SectionNumber: 1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "TerminateProcess", Value: 0x1c00, SectionNumber: 1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__bss_start__", Value: 0x0, SectionNumber: 6, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp___C_specific_handler", Value: 0x2ac, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "___RUNTIME_PSEUDO_RELOC_LIST_END__", Value: 0x4045e0, SectionNumber: -1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "RtlLookupFunctionEntry", Value: 0x1c20, SectionNumber: 1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__size_of_heap_commit__", Value: 0x1000, SectionNumber: -1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp_GetLastError", Value: 0x214, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp_free", Value: 0x34c, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp_RtlLookupFunctionEntry", Value: 0x25c, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "VirtualProtect", Value: 0x1be8, SectionNumber: 1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "mingw_app_type", Value: 0x610, SectionNumber: 6, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "___crt_xp_start__", Value: 0x58, SectionNumber: 8, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp_LeaveCriticalSection", Value: 0x23c, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__mingw_pinit", Value: 0x28, SectionNumber: 8, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__C_specific_handler", Value: 0x1bb8, SectionNumber: 1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp_GetTickCount", Value: 0x22c, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "abort", Value: 0x1b50, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "___crt_xp_end__", Value: 0x58, SectionNumber: 8, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__dll__", Value: 0x0, SectionNumber: -1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__minor_os_version__", Value: 0x0, SectionNumber: -1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp_GetSystemTimeAsFileTime", Value: 0x224, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "EnterCriticalSection", Value: 0x1c88, SectionNumber: 1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "_MINGW_INSTALL_DEBUG_MATHERR", Value: 0xe0, SectionNumber: 2, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__image_base__", Value: 0x400000, SectionNumber: -1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp_write", Value: 0x38c, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "RtlCaptureContext", Value: 0x1c28, SectionNumber: 1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__section_alignment__", Value: 0x1000, SectionNumber: -1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__native_dllmain_reason", Value: 0xb4, SectionNumber: 2, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "calloc", Value: 0x1b48, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "_tls_used", Value: 0x20, SectionNumber: 9, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "UnhandledExceptionFilter", Value: 0x1bf0, SectionNumber: 1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "mingw_initcharmax", Value: 0x50, SectionNumber: 6, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__IAT_end__", Value: 0x39c, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "write", Value: 0x1af0, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp_memcpy", Value: 0x364, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__RUNTIME_PSEUDO_RELOC_LIST__", Value: 0x4045e0, SectionNumber: -1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "fprintf", Value: 0x1b38, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "soong_build_number", Value: 0x20, SectionNumber: 2, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp_RtlAddFunctionTable", Value: 0x24c, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "Sleep", Value: 0x1c08, SectionNumber: 1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "mingw_pcppinit", Value: 0x8, SectionNumber: 8, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__data_end__", Value: 0x120, SectionNumber: 2, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp_fwrite", Value: 0x354, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__CTOR_LIST__", Value: 0x1ca0, SectionNumber: 1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp___getmainargs", Value: 0x2bc, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "_head_lib64_libkernel32_a", Value: 0x0, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__bss_end__", Value: 0x9b0, SectionNumber: 6, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__xi_z", Value: 0x30, SectionNumber: 8, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "GetTickCount", Value: 0x1c50, SectionNumber: 1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "_head_lib64_libmsvcrt_a", Value: 0x14, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__native_vcclrit_reason", Value: 0xb0, SectionNumber: 2, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "___crt_xc_end__", Value: 0x18, SectionNumber: 8, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "RtlAddFunctionTable", Value: 0x1c30, SectionNumber: 1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp_EnterCriticalSection", Value: 0x1f4, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "_tls_index", Value: 0x5fc, SectionNumber: 6, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "signal", Value: 0x1b10, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "__native_startup_state", Value: 0x980, SectionNumber: 6, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "___crt_xc_start__", Value: 0x0, SectionNumber: 8, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__onexitbegin", Value: 0x970, SectionNumber: 6, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp_GetCurrentProcessId", Value: 0x204, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "strncmp", Value: 0x1b00, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp___lconv_init", Value: 0x2d4, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp_TerminateProcess", Value: 0x27c, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "___CTOR_LIST__", Value: 0x1ca0, SectionNumber: 1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp_signal", Value: 0x36c, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__rt_psrelocs_size", Value: 0x0, SectionNumber: -1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp_QueryPerformanceCounter", Value: 0x244, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp_strlen", Value: 0x374, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp_malloc", Value: 0x35c, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__mingw_winmain_nShowCmd", Value: 0x0, SectionNumber: 2, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "mingw_pcinit", Value: 0x20, SectionNumber: 8, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__file_alignment__", Value: 0x200, SectionNumber: -1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp_InitializeCriticalSection", Value: 0x234, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__lconv_init", Value: 0x1b98, SectionNumber: 1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__getmainargs", Value: 0x1ba8, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "InitializeCriticalSection", Value: 0x1c48, SectionNumber: 1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp_exit", Value: 0x33c, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__major_os_version__", Value: 0x4, SectionNumber: -1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp_vfprintf", Value: 0x384, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp___initenv", Value: 0x2c4, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__IAT_start__", Value: 0x1ec, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp__cexit", Value: 0x2fc, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp_UnhandledExceptionFilter", Value: 0x28c, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__xl_z", Value: 0x50, SectionNumber: 8, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__end__", Value: 0x1000, SectionNumber: 9, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp_SetUnhandledExceptionFilter", Value: 0x26c, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp__onexit", Value: 0x31c, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__DTOR_LIST__", Value: 0x1cb0, SectionNumber: 1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "RtlVirtualUnwind", Value: 0x1c18, SectionNumber: 1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__xi_a", Value: 0x18, SectionNumber: 8, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__set_app_type", Value: 0x1b90, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp_Sleep", Value: 0x274, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "LeaveCriticalSection", Value: 0x1c40, SectionNumber: 1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__xc_a", Value: 0x0, SectionNumber: 8, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp___setusermatherr", Value: 0x2e4, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__size_of_heap_reserve__", Value: 0x100000, SectionNumber: -1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "___crt_xt_start__", Value: 0x58, SectionNumber: 8, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__subsystem__", Value: 0x3, SectionNumber: -1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "_amsg_exit", Value: 0x1b80, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "_fmode", Value: 0x630, SectionNumber: 6, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__security_cookie_complement", Value: 0x110, SectionNumber: 2, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp_TlsGetValue", Value: 0x284, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "GetCurrentProcess", Value: 0x1c80, SectionNumber: 1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__setusermatherr", Value: 0x1b88, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp_fprintf", Value: 0x344, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp_VirtualProtect", Value: 0x294, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__xl_c", Value: 0x40, SectionNumber: 8, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "___tls_end__", Value: 0x68, SectionNumber: 9, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__onexitend", Value: 0x978, SectionNumber: 6, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "QueryPerformanceCounter", Value: 0x1c38, SectionNumber: 1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp_VirtualQuery", Value: 0x29c, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp__initterm", Value: 0x30c, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "mingw_initltsdyn_force", Value: 0x5f4, SectionNumber: 6, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "_dowildcard", Value: 0x40, SectionNumber: 6, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp___iob_func", Value: 0x2cc, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__dyn_tls_init_callback", Value: 0x10, SectionNumber: 3, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "_initterm", Value: 0x1b70, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "_newmode", Value: 0x5e0, SectionNumber: 6, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "fwrite", Value: 0x1b28, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp_strncmp", Value: 0x37c, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__major_image_version__", Value: 0x0, SectionNumber: -1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__loader_flags__", Value: 0x0, SectionNumber: -1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "___chkstk_ms", Value: 0x1ab0, SectionNumber: 1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__native_startup_lock", Value: 0x988, SectionNumber: 6, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__mingw_winmain_hInstance", Value: 0x968, SectionNumber: 6, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "GetStartupInfoA", Value: 0x1c60, SectionNumber: 1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "GetCurrentThreadId", Value: 0x1c70, SectionNumber: 1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "_onexit", Value: 0x1b60, SectionNumber: 1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__rt_psrelocs_end", Value: 0x5e0, SectionNumber: 3, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "exit", Value: 0x1b40, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp__get_invalid_parameter_handler", Value: 0xf0, SectionNumber: 2, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__minor_subsystem_version__", Value: 0x2, SectionNumber: -1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__minor_image_version__", Value: 0x0, SectionNumber: -1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp__unlock", Value: 0x324, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp___set_app_type", Value: 0x2dc, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "mingw_initltsdrot_force", Value: 0x5f8, SectionNumber: 6, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "_charmax", Value: 0xc0, SectionNumber: 2, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "strlen", Value: 0x1b08, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "DeleteCriticalSection", Value: 0x1c90, SectionNumber: 1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp_RtlCaptureContext", Value: 0x254, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__RUNTIME_PSEUDO_RELOC_LIST_END__", Value: 0x4045e0, SectionNumber: -1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__dllonexit", Value: 0x1bb0, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "_unlock", Value: 0x1b58, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp_GetCurrentProcess", Value: 0x1fc, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "___crt_xt_end__", Value: 0x58, SectionNumber: 8, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__lib64_libmsvcrt_a_iname", Value: 0x7bc, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "vfprintf", Value: 0x1af8, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "free", Value: 0x1b30, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "__security_cookie", Value: 0x100, SectionNumber: 2, Type: 0x0, StorageClass: 0x2}, + }, +} + +/* Generated from: prebuilts/gcc/linux-x86/host/x86_64-w64-mingw32-4.8/bin/x86_64-w64-mingw32-g++ -o a.exe test2.c + +#include + +char symbol1[128] = "PLACEHOLDER1"; +char symbol2[128] = "PLACEHOLDER2"; + +int main() { + write(STDOUT_FILENO, symbol1, sizeof(symbol1)); + write(STDOUT_FILENO, symbol2, sizeof(symbol2)); +} +*/ + +var peSymbolTable2 = &pe.File{ + FileHeader: pe.FileHeader{ + Machine: pe.IMAGE_FILE_MACHINE_AMD64, + }, + Sections: []*pe.Section{ + &pe.Section{SectionHeader: pe.SectionHeader{Name: ".text", VirtualSize: 0x1ce0, VirtualAddress: 0x1000, Size: 0x1e00, Offset: 0x600, PointerToRelocations: 0x0, PointerToLineNumbers: 0x0, NumberOfRelocations: 0x0, NumberOfLineNumbers: 0x0, Characteristics: 0x60500020}}, + &pe.Section{SectionHeader: pe.SectionHeader{Name: ".data", VirtualSize: 0x1a0, VirtualAddress: 0x3000, Size: 0x200, Offset: 0x2400, PointerToRelocations: 0x0, PointerToLineNumbers: 0x0, NumberOfRelocations: 0x0, NumberOfLineNumbers: 0x0, Characteristics: 0xc0600040}}, + &pe.Section{SectionHeader: pe.SectionHeader{Name: ".rdata", VirtualSize: 0x5e0, VirtualAddress: 0x4000, Size: 0x600, Offset: 0x2600, PointerToRelocations: 0x0, PointerToLineNumbers: 0x0, NumberOfRelocations: 0x0, NumberOfLineNumbers: 0x0, Characteristics: 0x40500040}}, + &pe.Section{SectionHeader: pe.SectionHeader{Name: ".pdata", VirtualSize: 0x234, VirtualAddress: 0x5000, Size: 0x400, Offset: 0x2c00, PointerToRelocations: 0x0, PointerToLineNumbers: 0x0, NumberOfRelocations: 0x0, NumberOfLineNumbers: 0x0, Characteristics: 0x40300040}}, + &pe.Section{SectionHeader: pe.SectionHeader{Name: ".xdata", VirtualSize: 0x200, VirtualAddress: 0x6000, Size: 0x200, Offset: 0x3000, PointerToRelocations: 0x0, PointerToLineNumbers: 0x0, NumberOfRelocations: 0x0, NumberOfLineNumbers: 0x0, Characteristics: 0x40300040}}, + &pe.Section{SectionHeader: pe.SectionHeader{Name: ".bss", VirtualSize: 0x9b0, VirtualAddress: 0x7000, Size: 0x0, Offset: 0x0, PointerToRelocations: 0x0, PointerToLineNumbers: 0x0, NumberOfRelocations: 0x0, NumberOfLineNumbers: 0x0, Characteristics: 0xc0600080}}, + &pe.Section{SectionHeader: pe.SectionHeader{Name: ".idata", VirtualSize: 0x7c8, VirtualAddress: 0x8000, Size: 0x800, Offset: 0x3200, PointerToRelocations: 0x0, PointerToLineNumbers: 0x0, NumberOfRelocations: 0x0, NumberOfLineNumbers: 0x0, Characteristics: 0xc0300040}}, + &pe.Section{SectionHeader: pe.SectionHeader{Name: ".CRT", VirtualSize: 0x68, VirtualAddress: 0x9000, Size: 0x200, Offset: 0x3a00, PointerToRelocations: 0x0, PointerToLineNumbers: 0x0, NumberOfRelocations: 0x0, NumberOfLineNumbers: 0x0, Characteristics: 0xc0400040}}, + &pe.Section{SectionHeader: pe.SectionHeader{Name: ".tls", VirtualSize: 0x68, VirtualAddress: 0xa000, Size: 0x200, Offset: 0x3c00, PointerToRelocations: 0x0, PointerToLineNumbers: 0x0, NumberOfRelocations: 0x0, NumberOfLineNumbers: 0x0, Characteristics: 0xc0600040}}, + &pe.Section{SectionHeader: pe.SectionHeader{Name: ".debug_aranges", VirtualSize: 0x420, VirtualAddress: 0xb000, Size: 0x600, Offset: 0x3e00, PointerToRelocations: 0x0, PointerToLineNumbers: 0x0, NumberOfRelocations: 0x0, NumberOfLineNumbers: 0x0, Characteristics: 0x42500040}}, + &pe.Section{SectionHeader: pe.SectionHeader{Name: ".debug_info", VirtualSize: 0xc125, VirtualAddress: 0xc000, Size: 0xc200, Offset: 0x4400, PointerToRelocations: 0x0, PointerToLineNumbers: 0x0, NumberOfRelocations: 0x0, NumberOfLineNumbers: 0x0, Characteristics: 0x42100040}}, + &pe.Section{SectionHeader: pe.SectionHeader{Name: ".debug_abbrev", VirtualSize: 0x1a80, VirtualAddress: 0x19000, Size: 0x1c00, Offset: 0x10600, PointerToRelocations: 0x0, PointerToLineNumbers: 0x0, NumberOfRelocations: 0x0, NumberOfLineNumbers: 0x0, Characteristics: 0x42100040}}, + &pe.Section{SectionHeader: pe.SectionHeader{Name: ".debug_line", VirtualSize: 0x2182, VirtualAddress: 0x1b000, Size: 0x2200, Offset: 0x12200, PointerToRelocations: 0x0, PointerToLineNumbers: 0x0, NumberOfRelocations: 0x0, NumberOfLineNumbers: 0x0, Characteristics: 0x42100040}}, + &pe.Section{SectionHeader: pe.SectionHeader{Name: ".debug_frame", VirtualSize: 0xb28, VirtualAddress: 0x1e000, Size: 0xc00, Offset: 0x14400, PointerToRelocations: 0x0, PointerToLineNumbers: 0x0, NumberOfRelocations: 0x0, NumberOfLineNumbers: 0x0, Characteristics: 0x42400040}}, + &pe.Section{SectionHeader: pe.SectionHeader{Name: ".debug_str", VirtualSize: 0x300, VirtualAddress: 0x1f000, Size: 0x400, Offset: 0x15000, PointerToRelocations: 0x0, PointerToLineNumbers: 0x0, NumberOfRelocations: 0x0, NumberOfLineNumbers: 0x0, Characteristics: 0x42100040}}, + &pe.Section{SectionHeader: pe.SectionHeader{Name: ".debug_loc", VirtualSize: 0x2b76, VirtualAddress: 0x20000, Size: 0x2c00, Offset: 0x15400, PointerToRelocations: 0x0, PointerToLineNumbers: 0x0, NumberOfRelocations: 0x0, NumberOfLineNumbers: 0x0, Characteristics: 0x42100040}}, + &pe.Section{SectionHeader: pe.SectionHeader{Name: ".debug_ranges", VirtualSize: 0x4f0, VirtualAddress: 0x23000, Size: 0x600, Offset: 0x18000, PointerToRelocations: 0x0, PointerToLineNumbers: 0x0, NumberOfRelocations: 0x0, NumberOfLineNumbers: 0x0, Characteristics: 0x42100040}}, + }, + Symbols: []*pe.Symbol{ + &pe.Symbol{Name: ".file", Value: 0x35, SectionNumber: -2, Type: 0x0, StorageClass: 0x67}, + &pe.Symbol{Name: "__mingw_invalidParameterHandler", Value: 0x0, SectionNumber: 1, Type: 0x20, StorageClass: 0x3}, + &pe.Symbol{Name: "pre_c_init", Value: 0x10, SectionNumber: 1, Type: 0x20, StorageClass: 0x3}, + &pe.Symbol{Name: "managedapp", Value: 0x8, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: "pre_cpp_init", Value: 0x130, SectionNumber: 1, Type: 0x20, StorageClass: 0x3}, + &pe.Symbol{Name: "envp", Value: 0x18, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: "argv", Value: 0x20, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: "argc", Value: 0x28, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: "startinfo", Value: 0x0, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: "argret", Value: 0x10, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: "__tmainCRTStartup", Value: 0x180, SectionNumber: 1, Type: 0x20, StorageClass: 0x3}, + &pe.Symbol{Name: "has_cctor", Value: 0x4, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: "mainret", Value: 0xc, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: "WinMainCRTStartup", Value: 0x4b0, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: ".l_startw", Value: 0x4b4, SectionNumber: 1, Type: 0x0, StorageClass: 0x6}, + &pe.Symbol{Name: ".l_endw", Value: 0x4c9, SectionNumber: 1, Type: 0x0, StorageClass: 0x6}, + &pe.Symbol{Name: "mainCRTStartup", Value: 0x4d0, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: ".l_start", Value: 0x4d4, SectionNumber: 1, Type: 0x0, StorageClass: 0x6}, + &pe.Symbol{Name: ".l_end", Value: 0x4e9, SectionNumber: 1, Type: 0x0, StorageClass: 0x6}, + &pe.Symbol{Name: ".text", Value: 0x0, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x0, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x0, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".xdata", Value: 0x0, SectionNumber: 5, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".pdata", Value: 0x0, SectionNumber: 4, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".CRT$XCAA", Value: 0x8, SectionNumber: 8, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".CRT$XIAA", Value: 0x20, SectionNumber: 8, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_info", Value: 0x0, SectionNumber: 11, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_abbrev", Value: 0x0, SectionNumber: 12, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_loc", Value: 0x0, SectionNumber: 16, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_aranges", Value: 0x0, SectionNumber: 10, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_ranges", Value: 0x0, SectionNumber: 17, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_line", Value: 0x0, SectionNumber: 13, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_str", Value: 0x0, SectionNumber: 15, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".rdata$zzz", Value: 0x280, SectionNumber: 3, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_frame", Value: 0x0, SectionNumber: 14, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".file", Value: 0x3f, SectionNumber: -2, Type: 0x0, StorageClass: 0x67}, + &pe.Symbol{Name: ".text", Value: 0x4f0, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x10, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x30, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".rdata$zzz", Value: 0x2a0, SectionNumber: 3, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".file", Value: 0x4f, SectionNumber: -2, Type: 0x0, StorageClass: 0x67}, + &pe.Symbol{Name: "main", Value: 0x4f0, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: ".text", Value: 0x4f0, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x20, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x30, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".xdata", Value: 0x68, SectionNumber: 5, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".pdata", Value: 0x48, SectionNumber: 4, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".rdata$zzz", Value: 0x2c0, SectionNumber: 3, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".file", Value: 0x6c, SectionNumber: -2, Type: 0x0, StorageClass: 0x67}, + &pe.Symbol{Name: "mingw_onexit", Value: 0x540, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "atexit", Value: 0x5f0, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: ".text", Value: 0x540, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x120, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x30, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".xdata", Value: 0x74, SectionNumber: 5, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".pdata", Value: 0x54, SectionNumber: 4, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_info", Value: 0x27d0, SectionNumber: 11, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_abbrev", Value: 0x433, SectionNumber: 12, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_loc", Value: 0x510, SectionNumber: 16, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_aranges", Value: 0x30, SectionNumber: 10, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_line", Value: 0x3de, SectionNumber: 13, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".rdata$zzz", Value: 0x2e0, SectionNumber: 3, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_frame", Value: 0x120, SectionNumber: 14, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".file", Value: 0x8c, SectionNumber: -2, Type: 0x0, StorageClass: 0x67}, + &pe.Symbol{Name: "__do_global_dtors", Value: 0x610, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "p.68721", Value: 0x120, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: "__do_global_ctors", Value: 0x650, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "__main", Value: 0x6b0, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "initialized", Value: 0x30, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x610, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x120, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x30, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".xdata", Value: 0x84, SectionNumber: 5, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".pdata", Value: 0x6c, SectionNumber: 4, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_info", Value: 0x2ed5, SectionNumber: 11, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_abbrev", Value: 0x5ae, SectionNumber: 12, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_loc", Value: 0x607, SectionNumber: 16, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_aranges", Value: 0x60, SectionNumber: 10, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_line", Value: 0x5a3, SectionNumber: 13, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".rdata$zzz", Value: 0x300, SectionNumber: 3, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_frame", Value: 0x190, SectionNumber: 14, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".file", Value: 0xa0, SectionNumber: -2, Type: 0x0, StorageClass: 0x67}, + &pe.Symbol{Name: ".text", Value: 0x6d0, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x130, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x40, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_info", Value: 0x34aa, SectionNumber: 11, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_abbrev", Value: 0x6c2, SectionNumber: 12, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_aranges", Value: 0x90, SectionNumber: 10, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_line", Value: 0x710, SectionNumber: 13, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_str", Value: 0x21f, SectionNumber: 15, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".rdata$zzz", Value: 0x320, SectionNumber: 3, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".file", Value: 0xb2, SectionNumber: -2, Type: 0x0, StorageClass: 0x67}, + &pe.Symbol{Name: ".text", Value: 0x6d0, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x140, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x40, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_info", Value: 0x3a06, SectionNumber: 11, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_abbrev", Value: 0x744, SectionNumber: 12, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_aranges", Value: 0xb0, SectionNumber: 10, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_line", Value: 0x894, SectionNumber: 13, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".rdata$zzz", Value: 0x340, SectionNumber: 3, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".file", Value: 0xce, SectionNumber: -2, Type: 0x0, StorageClass: 0x67}, + &pe.Symbol{Name: "my_lconv_init", Value: 0x6d0, SectionNumber: 1, Type: 0x20, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x6d0, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x140, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x50, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".xdata", Value: 0x9c, SectionNumber: 5, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".pdata", Value: 0x90, SectionNumber: 4, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".CRT$XIC", Value: 0x28, SectionNumber: 8, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_info", Value: 0x3ae7, SectionNumber: 11, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_abbrev", Value: 0x76e, SectionNumber: 12, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_aranges", Value: 0xd0, SectionNumber: 10, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_line", Value: 0x91f, SectionNumber: 13, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".rdata$zzz", Value: 0x360, SectionNumber: 3, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_frame", Value: 0x218, SectionNumber: 14, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".file", Value: 0xe8, SectionNumber: -2, Type: 0x0, StorageClass: 0x67}, + &pe.Symbol{Name: "_setargv", Value: 0x6e0, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: ".text", Value: 0x6e0, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x150, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x60, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".xdata", Value: 0xa0, SectionNumber: 5, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".pdata", Value: 0x9c, SectionNumber: 4, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_info", Value: 0x3ffe, SectionNumber: 11, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_abbrev", Value: 0x808, SectionNumber: 12, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_aranges", Value: 0x100, SectionNumber: 10, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_line", Value: 0xab8, SectionNumber: 13, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".rdata$zzz", Value: 0x380, SectionNumber: 3, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_frame", Value: 0x248, SectionNumber: 14, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".file", Value: 0x110, SectionNumber: -2, Type: 0x0, StorageClass: 0x67}, + &pe.Symbol{Name: "__security_init_cookie", Value: 0x6f0, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: ".data$__security_cookie", Value: 0x180, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data$__security_cookie_complement", Value: 0x190, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: "__report_gsfailure", Value: 0x7c0, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "GS_ContextRecord", Value: 0x60, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: "GS_ExceptionRecord", Value: 0x540, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: "GS_ExceptionPointers", Value: 0x0, SectionNumber: 3, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x6f0, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x150, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x60, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".xdata", Value: 0xa4, SectionNumber: 5, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".pdata", Value: 0xa8, SectionNumber: 4, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".rdata", Value: 0x0, SectionNumber: 3, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_info", Value: 0x41c8, SectionNumber: 11, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_abbrev", Value: 0x83f, SectionNumber: 12, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_loc", Value: 0x6ae, SectionNumber: 16, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_aranges", Value: 0x130, SectionNumber: 10, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_line", Value: 0xb56, SectionNumber: 13, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_str", Value: 0x237, SectionNumber: 15, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".rdata$zzz", Value: 0x3a0, SectionNumber: 3, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_frame", Value: 0x278, SectionNumber: 14, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".file", Value: 0x122, SectionNumber: -2, Type: 0x0, StorageClass: 0x67}, + &pe.Symbol{Name: ".text", Value: 0x8c0, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x150, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x5e0, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_info", Value: 0x506e, SectionNumber: 11, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_abbrev", Value: 0xa10, SectionNumber: 12, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_aranges", Value: 0x160, SectionNumber: 10, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_line", Value: 0xcde, SectionNumber: 13, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".rdata$zzz", Value: 0x3c0, SectionNumber: 3, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".file", Value: 0x158, SectionNumber: -2, Type: 0x0, StorageClass: 0x67}, + &pe.Symbol{Name: "__dyn_tls_dtor", Value: 0x8c0, SectionNumber: 1, Type: 0x20, StorageClass: 0x3}, + &pe.Symbol{Name: "__dyn_tls_init", Value: 0x8f0, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "__xd_a", Value: 0x58, SectionNumber: 8, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: "__xd_z", Value: 0x60, SectionNumber: 8, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: "__tlregdtor", Value: 0x960, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: ".text", Value: 0x8c0, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x150, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x5f0, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".xdata", Value: 0xc4, SectionNumber: 5, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".pdata", Value: 0xc0, SectionNumber: 4, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".CRT$XLD", Value: 0x48, SectionNumber: 8, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".CRT$XLC", Value: 0x40, SectionNumber: 8, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".rdata", Value: 0x10, SectionNumber: 3, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".CRT$XDZ", Value: 0x60, SectionNumber: 8, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".CRT$XDA", Value: 0x58, SectionNumber: 8, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".tls", Value: 0x20, SectionNumber: 9, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".CRT$XLZ", Value: 0x50, SectionNumber: 8, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".CRT$XLA", Value: 0x38, SectionNumber: 8, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".tls$ZZZ", Value: 0x60, SectionNumber: 9, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".tls$AAA", Value: 0x0, SectionNumber: 9, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_info", Value: 0x514c, SectionNumber: 11, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_abbrev", Value: 0xa3a, SectionNumber: 12, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_loc", Value: 0x816, SectionNumber: 16, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_aranges", Value: 0x180, SectionNumber: 10, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_line", Value: 0xd69, SectionNumber: 13, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_str", Value: 0x250, SectionNumber: 15, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".rdata$zzz", Value: 0x3e0, SectionNumber: 3, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_frame", Value: 0x330, SectionNumber: 14, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".file", Value: 0x172, SectionNumber: -2, Type: 0x0, StorageClass: 0x67}, + &pe.Symbol{Name: ".text", Value: 0x970, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x150, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x600, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".CRT$XCZ", Value: 0x10, SectionNumber: 8, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".CRT$XCA", Value: 0x0, SectionNumber: 8, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".CRT$XIZ", Value: 0x30, SectionNumber: 8, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".CRT$XIA", Value: 0x18, SectionNumber: 8, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_info", Value: 0x5854, SectionNumber: 11, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_abbrev", Value: 0xbce, SectionNumber: 12, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_aranges", Value: 0x1b0, SectionNumber: 10, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_line", Value: 0xec8, SectionNumber: 13, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".rdata$zzz", Value: 0x400, SectionNumber: 3, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".file", Value: 0x193, SectionNumber: -2, Type: 0x0, StorageClass: 0x67}, + &pe.Symbol{Name: "__mingw_raise_matherr", Value: 0x970, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "stUserMathErr", Value: 0x600, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: "__mingw_setusermatherr", Value: 0x9c0, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "_matherr", Value: 0x9d0, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: ".text", Value: 0x970, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x150, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x600, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".xdata", Value: 0xdc, SectionNumber: 5, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".pdata", Value: 0xe4, SectionNumber: 4, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".rdata", Value: 0x20, SectionNumber: 3, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_info", Value: 0x5a33, SectionNumber: 11, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_abbrev", Value: 0xc27, SectionNumber: 12, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_loc", Value: 0xb6f, SectionNumber: 16, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_aranges", Value: 0x1d0, SectionNumber: 10, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_line", Value: 0xf53, SectionNumber: 13, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".rdata$zzz", Value: 0x420, SectionNumber: 3, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_frame", Value: 0x3d0, SectionNumber: 14, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".file", Value: 0x1ae, SectionNumber: -2, Type: 0x0, StorageClass: 0x67}, + &pe.Symbol{Name: "_fpreset", Value: 0xad0, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "fpreset", Value: 0xad0, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: ".text", Value: 0xad0, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x150, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x610, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".xdata", Value: 0x100, SectionNumber: 5, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".pdata", Value: 0x108, SectionNumber: 4, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_info", Value: 0x61bd, SectionNumber: 11, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_abbrev", Value: 0xda1, SectionNumber: 12, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_aranges", Value: 0x200, SectionNumber: 10, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_line", Value: 0x1129, SectionNumber: 13, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".rdata$zzz", Value: 0x440, SectionNumber: 3, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_frame", Value: 0x460, SectionNumber: 14, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".file", Value: 0x1c9, SectionNumber: -2, Type: 0x0, StorageClass: 0x67}, + &pe.Symbol{Name: "_decode_pointer", Value: 0xae0, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "_encode_pointer", Value: 0xaf0, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: ".text", Value: 0xae0, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x150, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x610, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".xdata", Value: 0x104, SectionNumber: 5, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".pdata", Value: 0x114, SectionNumber: 4, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_info", Value: 0x62a8, SectionNumber: 11, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_abbrev", Value: 0xdcb, SectionNumber: 12, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_aranges", Value: 0x230, SectionNumber: 10, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_line", Value: 0x11c8, SectionNumber: 13, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".rdata$zzz", Value: 0x460, SectionNumber: 3, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_frame", Value: 0x490, SectionNumber: 14, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".file", Value: 0x1f0, SectionNumber: -2, Type: 0x0, StorageClass: 0x67}, + &pe.Symbol{Name: "__report_error", Value: 0xb00, SectionNumber: 1, Type: 0x20, StorageClass: 0x3}, + &pe.Symbol{Name: "__write_memory.part.0", Value: 0xb70, SectionNumber: 1, Type: 0x20, StorageClass: 0x3}, + &pe.Symbol{Name: "maxSections", Value: 0x624, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: "the_secs", Value: 0x628, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: "_pei386_runtime_relocator", Value: 0xcf0, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "was_init.70054", Value: 0x620, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0xb00, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x150, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x620, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".rdata", Value: 0x160, SectionNumber: 3, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".xdata", Value: 0x10c, SectionNumber: 5, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".pdata", Value: 0x12c, SectionNumber: 4, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_info", Value: 0x67b9, SectionNumber: 11, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_abbrev", Value: 0xe52, SectionNumber: 12, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_loc", Value: 0xda1, SectionNumber: 16, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_aranges", Value: 0x260, SectionNumber: 10, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_ranges", Value: 0xe0, SectionNumber: 17, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_line", Value: 0x12f7, SectionNumber: 13, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_str", Value: 0x26f, SectionNumber: 15, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".rdata$zzz", Value: 0x480, SectionNumber: 3, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_frame", Value: 0x4d8, SectionNumber: 14, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".file", Value: 0x202, SectionNumber: -2, Type: 0x0, StorageClass: 0x67}, + &pe.Symbol{Name: ".text", Value: 0x1010, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x150, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x630, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_info", Value: 0x79a7, SectionNumber: 11, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_abbrev", Value: 0x1174, SectionNumber: 12, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_aranges", Value: 0x290, SectionNumber: 10, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_line", Value: 0x157b, SectionNumber: 13, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".rdata$zzz", Value: 0x4a0, SectionNumber: 3, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".file", Value: 0x227, SectionNumber: -2, Type: 0x0, StorageClass: 0x67}, + &pe.Symbol{Name: "__mingw_SEH_error_handler", Value: 0x1010, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "__mingw_init_ehandler", Value: 0x11d0, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "was_here.69886", Value: 0x648, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: "emu_pdata", Value: 0x760, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: "emu_xdata", Value: 0x660, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: "_gnu_exception_handler", Value: 0x12c0, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: ".text", Value: 0x1010, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x150, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x640, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".xdata", Value: 0x144, SectionNumber: 5, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".pdata", Value: 0x150, SectionNumber: 4, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".rdata", Value: 0x270, SectionNumber: 3, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_info", Value: 0x7a83, SectionNumber: 11, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_abbrev", Value: 0x119e, SectionNumber: 12, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_loc", Value: 0x161e, SectionNumber: 16, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_aranges", Value: 0x2b0, SectionNumber: 10, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_line", Value: 0x1606, SectionNumber: 13, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_str", Value: 0x278, SectionNumber: 15, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".rdata$zzz", Value: 0x4c0, SectionNumber: 3, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_frame", Value: 0x5d0, SectionNumber: 14, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".file", Value: 0x24b, SectionNumber: -2, Type: 0x0, StorageClass: 0x67}, + &pe.Symbol{Name: "__mingwthr_run_key_dtors.part.0", Value: 0x1470, SectionNumber: 1, Type: 0x20, StorageClass: 0x3}, + &pe.Symbol{Name: "__mingwthr_cs", Value: 0x900, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: "key_dtor_list", Value: 0x8e0, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: "___w64_mingwthr_add_key_dtor", Value: 0x14e0, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "__mingwthr_cs_init", Value: 0x8e8, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: "___w64_mingwthr_remove_key_dtor", Value: 0x1560, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "__mingw_TLScallback", Value: 0x1600, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: ".text", Value: 0x1470, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x150, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x8e0, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".xdata", Value: 0x168, SectionNumber: 5, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".pdata", Value: 0x174, SectionNumber: 4, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_info", Value: 0x8f89, SectionNumber: 11, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_abbrev", Value: 0x1402, SectionNumber: 12, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_loc", Value: 0x1f13, SectionNumber: 16, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_aranges", Value: 0x2e0, SectionNumber: 10, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_ranges", Value: 0x330, SectionNumber: 17, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_line", Value: 0x185b, SectionNumber: 13, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".rdata$zzz", Value: 0x4e0, SectionNumber: 3, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_frame", Value: 0x6d8, SectionNumber: 14, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".file", Value: 0x25d, SectionNumber: -2, Type: 0x0, StorageClass: 0x67}, + &pe.Symbol{Name: ".text", Value: 0x16f0, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x150, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x940, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_info", Value: 0x98ad, SectionNumber: 11, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_abbrev", Value: 0x15e4, SectionNumber: 12, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_aranges", Value: 0x310, SectionNumber: 10, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_line", Value: 0x1a30, SectionNumber: 13, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".rdata$zzz", Value: 0x500, SectionNumber: 3, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".file", Value: 0x26f, SectionNumber: -2, Type: 0x0, StorageClass: 0x67}, + &pe.Symbol{Name: ".text", Value: 0x16f0, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x160, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x940, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_info", Value: 0x9989, SectionNumber: 11, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_abbrev", Value: 0x160e, SectionNumber: 12, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_aranges", Value: 0x330, SectionNumber: 10, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_line", Value: 0x1aba, SectionNumber: 13, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".rdata$zzz", Value: 0x520, SectionNumber: 3, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".file", Value: 0x298, SectionNumber: -2, Type: 0x0, StorageClass: 0x67}, + &pe.Symbol{Name: "_ValidateImageBase.part.0", Value: 0x16f0, SectionNumber: 1, Type: 0x20, StorageClass: 0x3}, + &pe.Symbol{Name: "_ValidateImageBase", Value: 0x1710, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "_FindPESection", Value: 0x1730, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "_FindPESectionByName", Value: 0x1780, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "__mingw_GetSectionForAddress", Value: 0x1830, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "__mingw_GetSectionCount", Value: 0x1880, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "_FindPESectionExec", Value: 0x18d0, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "_GetPEImageBase", Value: 0x1970, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "_IsNonwritableInCurrentImage", Value: 0x19c0, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "__mingw_enum_import_library_names", Value: 0x1a20, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: ".text", Value: 0x16f0, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x160, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x950, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".xdata", Value: 0x198, SectionNumber: 5, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".pdata", Value: 0x1a4, SectionNumber: 4, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_info", Value: 0x9ab9, SectionNumber: 11, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_abbrev", Value: 0x1638, SectionNumber: 12, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_loc", Value: 0x25ce, SectionNumber: 16, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_aranges", Value: 0x350, SectionNumber: 10, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_ranges", Value: 0x360, SectionNumber: 17, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_line", Value: 0x1b4e, SectionNumber: 13, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_str", Value: 0x2ac, SectionNumber: 15, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".rdata$zzz", Value: 0x540, SectionNumber: 3, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_frame", Value: 0x808, SectionNumber: 14, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".file", Value: 0x2aa, SectionNumber: -2, Type: 0x0, StorageClass: 0x67}, + &pe.Symbol{Name: ".debug_info", Value: 0xad5d, SectionNumber: 11, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_abbrev", Value: 0x18a1, SectionNumber: 12, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_line", Value: 0x1d87, SectionNumber: 13, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1ad0, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x160, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x950, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_aranges", Value: 0x380, SectionNumber: 10, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_frame", Value: 0xa98, SectionNumber: 14, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".file", Value: 0x2bc, SectionNumber: -2, Type: 0x0, StorageClass: 0x67}, + &pe.Symbol{Name: ".text", Value: 0x1b10, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x160, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x950, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_info", Value: 0xae44, SectionNumber: 11, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_abbrev", Value: 0x18b5, SectionNumber: 12, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_aranges", Value: 0x3b0, SectionNumber: 10, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_line", Value: 0x1e2a, SectionNumber: 13, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".rdata$zzz", Value: 0x560, SectionNumber: 3, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".file", Value: 0x399, SectionNumber: -2, Type: 0x0, StorageClass: 0x67}, + &pe.Symbol{Name: ".text", Value: 0x1b10, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x160, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x950, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_info", Value: 0xb9a0, SectionNumber: 11, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_abbrev", Value: 0x1928, SectionNumber: 12, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_aranges", Value: 0x3d0, SectionNumber: 10, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_line", Value: 0x1f18, SectionNumber: 13, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".rdata$zzz", Value: 0x580, SectionNumber: 3, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1b10, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x170, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x950, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x7b8, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x38c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x1dc, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x6d2, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1b18, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x170, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x950, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x7b4, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x384, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x1d4, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x6c6, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1b20, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x170, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x950, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x7b0, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x37c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x1cc, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x6bc, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1b28, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x170, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x950, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x7ac, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x374, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x1c4, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x6b2, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1b30, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x170, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x950, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x7a8, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x36c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x1bc, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x6a8, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1b38, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x170, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x950, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x7a4, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x364, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x1b4, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x69e, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1b40, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x170, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x950, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x7a0, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x35c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x1ac, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x694, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1b48, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x170, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x950, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x79c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x354, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x1a4, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x68a, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1b50, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x170, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x950, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x798, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x34c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x19c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x682, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1b58, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x170, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x950, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x794, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x344, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x194, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x678, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1b60, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x170, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x950, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x790, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x33c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x18c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x670, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1b68, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x170, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x950, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x78c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x334, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x184, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x666, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1b70, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x170, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x950, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x788, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x32c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x17c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x65e, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1b78, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x170, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x950, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x784, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x324, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x174, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x654, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1b80, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x170, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x950, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x780, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x31c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x16c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x64a, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1b88, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x170, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x950, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x77c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x314, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x164, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x642, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1b90, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x170, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x950, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x778, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x30c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x15c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x636, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1b98, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x170, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x950, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x774, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x304, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x154, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x62c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1b98, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x170, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x950, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x770, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x2fc, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x14c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x622, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1ba0, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x170, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x950, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x76c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x2f4, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x144, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x614, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1ba8, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x170, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x950, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x768, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x2ec, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x13c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x60a, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1ba8, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x170, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x950, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x764, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x2e4, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x134, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x5f6, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1bb0, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x170, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x950, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x760, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x2dc, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x12c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x5e4, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1bb8, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x170, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x950, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x75c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x2d4, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x124, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x5d4, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1bc0, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x170, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x950, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x758, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x2cc, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x11c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x5c6, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1bc8, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x170, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x950, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x754, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x2c4, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x114, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x5ba, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1bc8, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x170, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x950, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x750, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x2bc, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x10c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x5aa, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1bd0, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x170, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x950, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x74c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x2b4, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x104, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x59c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1bd8, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x170, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x950, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x748, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x2ac, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0xfc, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x584, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".file", Value: 0x3b7, SectionNumber: -2, Type: 0x0, StorageClass: 0x67}, + &pe.Symbol{Name: "mingw_get_invalid_parameter_handler", Value: 0x1be0, SectionNumber: 1, Type: 0x20, StorageClass: 0x3}, + &pe.Symbol{Name: "handler", Value: 0x950, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: "_get_invalid_parameter_handler", Value: 0x1be0, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "mingw_set_invalid_parameter_handler", Value: 0x1bf0, SectionNumber: 1, Type: 0x20, StorageClass: 0x3}, + &pe.Symbol{Name: "_set_invalid_parameter_handler", Value: 0x1bf0, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: ".text", Value: 0x1be0, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x170, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x950, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".xdata", Value: 0x1f8, SectionNumber: 5, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".pdata", Value: 0x21c, SectionNumber: 4, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_info", Value: 0xba98, SectionNumber: 11, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_abbrev", Value: 0x1952, SectionNumber: 12, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_aranges", Value: 0x3f0, SectionNumber: 10, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_line", Value: 0x1fa9, SectionNumber: 13, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".rdata$zzz", Value: 0x5a0, SectionNumber: 3, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".debug_frame", Value: 0xae0, SectionNumber: 14, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".file", Value: 0x3c5, SectionNumber: -2, Type: 0x0, StorageClass: 0x67}, + &pe.Symbol{Name: "hname", Value: 0xfc, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: "fthunk", Value: 0x2ac, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1c00, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x180, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x960, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$2", Value: 0x14, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0xfc, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x2ac, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".file", Value: 0x474, SectionNumber: -2, Type: 0x0, StorageClass: 0x67}, + &pe.Symbol{Name: ".text", Value: 0x1c00, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x180, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x960, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x1e4, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x394, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x7bc, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1c00, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x180, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x960, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x734, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x29c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0xec, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x574, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1c08, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x180, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x960, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x730, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x294, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0xe4, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x562, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1c10, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x180, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x960, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x72c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x28c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0xdc, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x546, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1c18, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x180, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x960, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x728, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x284, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0xd4, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x538, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1c20, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x180, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x960, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x724, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x27c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0xcc, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x524, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1c28, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x180, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x960, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x720, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x274, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0xc4, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x51c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1c30, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x180, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x960, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x71c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x26c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0xbc, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x4fe, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1c38, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x180, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x960, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x718, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x264, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0xb4, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x4ea, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1c40, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x180, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x960, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x714, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x25c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0xac, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x4d0, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1c48, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x180, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x960, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x710, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x254, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0xa4, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x4bc, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1c50, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x180, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x960, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x70c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x24c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x9c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x4a6, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1c58, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x180, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x960, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x708, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x244, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x94, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x48c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1c60, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x180, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x960, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x704, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x23c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x8c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x474, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1c68, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x180, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x960, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x700, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x234, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x84, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x458, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1c70, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x180, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x960, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x6fc, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x22c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x7c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x448, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1c78, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x180, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x960, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x6f8, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x224, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x74, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x42e, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1c80, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x180, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x960, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x6f4, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x21c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x6c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x41c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1c88, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x180, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x960, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x6f0, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x214, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x64, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x40c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1c90, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x180, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x960, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x6ec, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x20c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x5c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x3f6, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1c98, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x180, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x960, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x6e8, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x204, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x54, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x3e0, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1ca0, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x180, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x960, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x6e4, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x1fc, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x4c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x3cc, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1ca8, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x180, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x960, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x6e0, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x1f4, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x44, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x3b4, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1cb0, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x180, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x960, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x6dc, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x1ec, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x3c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$6", Value: 0x39c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".file", Value: 0x482, SectionNumber: -2, Type: 0x0, StorageClass: 0x67}, + &pe.Symbol{Name: "hname", Value: 0x3c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: "fthunk", Value: 0x1ec, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".text", Value: 0x1cc0, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x180, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x960, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$2", Value: 0x0, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0x3c, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x1ec, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".file", Value: 0x490, SectionNumber: -2, Type: 0x0, StorageClass: 0x67}, + &pe.Symbol{Name: ".text", Value: 0x1cc0, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x180, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x960, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$4", Value: 0xf4, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$5", Value: 0x2a4, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".idata$7", Value: 0x738, SectionNumber: 7, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".file", Value: 0x49a, SectionNumber: -2, Type: 0x0, StorageClass: 0x67}, + &pe.Symbol{Name: ".text", Value: 0x1cc0, SectionNumber: 1, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".data", Value: 0x180, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".bss", Value: 0x960, SectionNumber: 6, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: ".rdata$zzz", Value: 0x5c0, SectionNumber: 3, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: "__xc_z", Value: 0x10, SectionNumber: 8, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "___RUNTIME_PSEUDO_RELOC_LIST__", Value: 0x4045e0, SectionNumber: -1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp_GetStartupInfoA", Value: 0x21c, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "symbol1", Value: 0x20, SectionNumber: 2, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp_abort", Value: 0x32c, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__lib64_libkernel32_a_iname", Value: 0x738, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__data_start__", Value: 0x0, SectionNumber: 2, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "___DTOR_LIST__", Value: 0x1cd0, SectionNumber: 1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp__fmode", Value: 0x304, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp__lock", Value: 0x314, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp_RtlVirtualUnwind", Value: 0x264, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "SetUnhandledExceptionFilter", Value: 0x1c30, SectionNumber: 1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp_calloc", Value: 0x334, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "_lock", Value: 0x1b88, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "___tls_start__", Value: 0x0, SectionNumber: 9, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__ImageBase", Value: 0x400000, SectionNumber: -1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__xl_a", Value: 0x38, SectionNumber: 8, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "GetLastError", Value: 0x1c88, SectionNumber: 1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "GetSystemTimeAsFileTime", Value: 0x1c78, SectionNumber: 1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "mingw_initltssuo_force", Value: 0x5f0, SectionNumber: 6, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__rt_psrelocs_start", Value: 0x5e0, SectionNumber: 3, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "_cexit", Value: 0x1b98, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp___dllonexit", Value: 0x2b4, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__dll_characteristics__", Value: 0x0, SectionNumber: -1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__size_of_stack_commit__", Value: 0x1000, SectionNumber: -1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__iob_func", Value: 0x1bc0, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp__acmdln", Value: 0x2ec, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__size_of_stack_reserve__", Value: 0x200000, SectionNumber: -1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__major_subsystem_version__", Value: 0x5, SectionNumber: -1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "___crt_xl_start__", Value: 0x38, SectionNumber: 8, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp_DeleteCriticalSection", Value: 0x1ec, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__xl_d", Value: 0x48, SectionNumber: 8, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp__set_invalid_parameter_handler", Value: 0x178, SectionNumber: 2, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "_tls_end", Value: 0x60, SectionNumber: 9, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "VirtualQuery", Value: 0x1c00, SectionNumber: 1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "___crt_xi_start__", Value: 0x18, SectionNumber: 8, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp__amsg_exit", Value: 0x2f4, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "___crt_xi_end__", Value: 0x38, SectionNumber: 8, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "_tls_start", Value: 0x0, SectionNumber: 9, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "memcpy", Value: 0x1b38, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "__mingw_winmain_lpCmdLine", Value: 0x960, SectionNumber: 6, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__mingw_oldexcpt_handler", Value: 0x640, SectionNumber: 6, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp_GetCurrentThreadId", Value: 0x20c, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "malloc", Value: 0x1b40, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "GetCurrentProcessId", Value: 0x1c98, SectionNumber: 1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "_CRT_MT", Value: 0x150, SectionNumber: 2, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "TlsGetValue", Value: 0x1c18, SectionNumber: 1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "TerminateProcess", Value: 0x1c20, SectionNumber: 1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__bss_start__", Value: 0x0, SectionNumber: 6, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp___C_specific_handler", Value: 0x2ac, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "___RUNTIME_PSEUDO_RELOC_LIST_END__", Value: 0x4045e0, SectionNumber: -1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "RtlLookupFunctionEntry", Value: 0x1c40, SectionNumber: 1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__size_of_heap_commit__", Value: 0x1000, SectionNumber: -1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp_GetLastError", Value: 0x214, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp_free", Value: 0x34c, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp_RtlLookupFunctionEntry", Value: 0x25c, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "VirtualProtect", Value: 0x1c08, SectionNumber: 1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "mingw_app_type", Value: 0x610, SectionNumber: 6, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "___crt_xp_start__", Value: 0x58, SectionNumber: 8, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp_LeaveCriticalSection", Value: 0x23c, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__mingw_pinit", Value: 0x28, SectionNumber: 8, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__C_specific_handler", Value: 0x1bd8, SectionNumber: 1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp_GetTickCount", Value: 0x22c, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "abort", Value: 0x1b70, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "___crt_xp_end__", Value: 0x58, SectionNumber: 8, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__dll__", Value: 0x0, SectionNumber: -1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__minor_os_version__", Value: 0x0, SectionNumber: -1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp_GetSystemTimeAsFileTime", Value: 0x224, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "EnterCriticalSection", Value: 0x1ca8, SectionNumber: 1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "_MINGW_INSTALL_DEBUG_MATHERR", Value: 0x160, SectionNumber: 2, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__image_base__", Value: 0x400000, SectionNumber: -1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp_write", Value: 0x38c, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "RtlCaptureContext", Value: 0x1c48, SectionNumber: 1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__section_alignment__", Value: 0x1000, SectionNumber: -1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__native_dllmain_reason", Value: 0x134, SectionNumber: 2, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "calloc", Value: 0x1b68, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "_tls_used", Value: 0x20, SectionNumber: 9, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "UnhandledExceptionFilter", Value: 0x1c10, SectionNumber: 1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "mingw_initcharmax", Value: 0x50, SectionNumber: 6, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__IAT_end__", Value: 0x39c, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "write", Value: 0x1b10, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp_memcpy", Value: 0x364, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__RUNTIME_PSEUDO_RELOC_LIST__", Value: 0x4045e0, SectionNumber: -1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "fprintf", Value: 0x1b58, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp_RtlAddFunctionTable", Value: 0x24c, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "Sleep", Value: 0x1c28, SectionNumber: 1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "mingw_pcppinit", Value: 0x8, SectionNumber: 8, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__data_end__", Value: 0x1a0, SectionNumber: 2, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp_fwrite", Value: 0x354, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__CTOR_LIST__", Value: 0x1cc0, SectionNumber: 1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp___getmainargs", Value: 0x2bc, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "_head_lib64_libkernel32_a", Value: 0x0, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__bss_end__", Value: 0x9b0, SectionNumber: 6, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__xi_z", Value: 0x30, SectionNumber: 8, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "GetTickCount", Value: 0x1c70, SectionNumber: 1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "_head_lib64_libmsvcrt_a", Value: 0x14, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__native_vcclrit_reason", Value: 0x130, SectionNumber: 2, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "___crt_xc_end__", Value: 0x18, SectionNumber: 8, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "RtlAddFunctionTable", Value: 0x1c50, SectionNumber: 1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp_EnterCriticalSection", Value: 0x1f4, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "_tls_index", Value: 0x5fc, SectionNumber: 6, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "signal", Value: 0x1b30, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "__native_startup_state", Value: 0x980, SectionNumber: 6, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "___crt_xc_start__", Value: 0x0, SectionNumber: 8, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__onexitbegin", Value: 0x970, SectionNumber: 6, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp_GetCurrentProcessId", Value: 0x204, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "strncmp", Value: 0x1b20, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp___lconv_init", Value: 0x2d4, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp_TerminateProcess", Value: 0x27c, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "___CTOR_LIST__", Value: 0x1cc0, SectionNumber: 1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp_signal", Value: 0x36c, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__rt_psrelocs_size", Value: 0x0, SectionNumber: -1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp_QueryPerformanceCounter", Value: 0x244, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp_strlen", Value: 0x374, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp_malloc", Value: 0x35c, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__mingw_winmain_nShowCmd", Value: 0x0, SectionNumber: 2, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "mingw_pcinit", Value: 0x20, SectionNumber: 8, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__file_alignment__", Value: 0x200, SectionNumber: -1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp_InitializeCriticalSection", Value: 0x234, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__lconv_init", Value: 0x1bb8, SectionNumber: 1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__getmainargs", Value: 0x1bc8, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "InitializeCriticalSection", Value: 0x1c68, SectionNumber: 1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp_exit", Value: 0x33c, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__major_os_version__", Value: 0x4, SectionNumber: -1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp_vfprintf", Value: 0x384, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp___initenv", Value: 0x2c4, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__IAT_start__", Value: 0x1ec, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp__cexit", Value: 0x2fc, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp_UnhandledExceptionFilter", Value: 0x28c, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__xl_z", Value: 0x50, SectionNumber: 8, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__end__", Value: 0x1000, SectionNumber: 9, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp_SetUnhandledExceptionFilter", Value: 0x26c, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp__onexit", Value: 0x31c, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__DTOR_LIST__", Value: 0x1cd0, SectionNumber: 1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "RtlVirtualUnwind", Value: 0x1c38, SectionNumber: 1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__xi_a", Value: 0x18, SectionNumber: 8, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "symbol2", Value: 0xa0, SectionNumber: 2, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__set_app_type", Value: 0x1bb0, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp_Sleep", Value: 0x274, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "LeaveCriticalSection", Value: 0x1c60, SectionNumber: 1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__xc_a", Value: 0x0, SectionNumber: 8, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp___setusermatherr", Value: 0x2e4, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__size_of_heap_reserve__", Value: 0x100000, SectionNumber: -1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "___crt_xt_start__", Value: 0x58, SectionNumber: 8, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__subsystem__", Value: 0x3, SectionNumber: -1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "_amsg_exit", Value: 0x1ba0, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "_fmode", Value: 0x630, SectionNumber: 6, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__security_cookie_complement", Value: 0x190, SectionNumber: 2, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp_TlsGetValue", Value: 0x284, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "GetCurrentProcess", Value: 0x1ca0, SectionNumber: 1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__setusermatherr", Value: 0x1ba8, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp_fprintf", Value: 0x344, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp_VirtualProtect", Value: 0x294, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__xl_c", Value: 0x40, SectionNumber: 8, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "___tls_end__", Value: 0x68, SectionNumber: 9, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__onexitend", Value: 0x978, SectionNumber: 6, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "QueryPerformanceCounter", Value: 0x1c58, SectionNumber: 1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp_VirtualQuery", Value: 0x29c, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp__initterm", Value: 0x30c, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "mingw_initltsdyn_force", Value: 0x5f4, SectionNumber: 6, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "_dowildcard", Value: 0x40, SectionNumber: 6, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp___iob_func", Value: 0x2cc, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__dyn_tls_init_callback", Value: 0x10, SectionNumber: 3, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "_initterm", Value: 0x1b90, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "_newmode", Value: 0x5e0, SectionNumber: 6, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "fwrite", Value: 0x1b48, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp_strncmp", Value: 0x37c, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__major_image_version__", Value: 0x0, SectionNumber: -1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__loader_flags__", Value: 0x0, SectionNumber: -1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "___chkstk_ms", Value: 0x1ad0, SectionNumber: 1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__native_startup_lock", Value: 0x988, SectionNumber: 6, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__mingw_winmain_hInstance", Value: 0x968, SectionNumber: 6, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "GetStartupInfoA", Value: 0x1c80, SectionNumber: 1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "GetCurrentThreadId", Value: 0x1c90, SectionNumber: 1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "_onexit", Value: 0x1b80, SectionNumber: 1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__rt_psrelocs_end", Value: 0x5e0, SectionNumber: 3, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "exit", Value: 0x1b60, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp__get_invalid_parameter_handler", Value: 0x170, SectionNumber: 2, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__minor_subsystem_version__", Value: 0x2, SectionNumber: -1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__minor_image_version__", Value: 0x0, SectionNumber: -1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp__unlock", Value: 0x324, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp___set_app_type", Value: 0x2dc, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "mingw_initltsdrot_force", Value: 0x5f8, SectionNumber: 6, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "_charmax", Value: 0x140, SectionNumber: 2, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "strlen", Value: 0x1b28, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "DeleteCriticalSection", Value: 0x1cb0, SectionNumber: 1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp_RtlCaptureContext", Value: 0x254, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__RUNTIME_PSEUDO_RELOC_LIST_END__", Value: 0x4045e0, SectionNumber: -1, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__dllonexit", Value: 0x1bd0, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "_unlock", Value: 0x1b78, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "__imp_GetCurrentProcess", Value: 0x1fc, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "___crt_xt_end__", Value: 0x58, SectionNumber: 8, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "__lib64_libmsvcrt_a_iname", Value: 0x7bc, SectionNumber: 7, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "vfprintf", Value: 0x1b18, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "free", Value: 0x1b50, SectionNumber: 1, Type: 0x20, StorageClass: 0x2}, + &pe.Symbol{Name: "__security_cookie", Value: 0x180, SectionNumber: 2, Type: 0x0, StorageClass: 0x2}, + }, +} diff --git a/cmd/symbol_inject/pe_test.go b/cmd/symbol_inject/pe_test.go new file mode 100644 index 000000000..21a0bc45c --- /dev/null +++ b/cmd/symbol_inject/pe_test.go @@ -0,0 +1,141 @@ +// Copyright 2018 Google Inc. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package main + +import ( + "debug/pe" + "strconv" + "testing" +) + +func TestPESymbolTable(t *testing.T) { + testCases := []struct { + file *pe.File + symbol string + offset, size uint64 + }{ + { + file: peSymbolTable1, + symbol: "soong_build_number", + offset: 0x2420, + size: 128, + }, + { + file: peSymbolTable2, + symbol: "symbol1", + offset: 0x2420, + size: 128, + }, + { + file: peSymbolTable2, + symbol: "symbol2", + offset: 0x24a0, + size: 128, + }, + { + // Test when symbol has the same value as the target symbol but is located afterwards in the list + file: &pe.File{ + FileHeader: pe.FileHeader{ + Machine: pe.IMAGE_FILE_MACHINE_I386, + }, + Sections: []*pe.Section{ + &pe.Section{SectionHeader: pe.SectionHeader{Name: ".text", VirtualSize: 0x15e83c, VirtualAddress: 0x1000, Size: 0x15ea00, Offset: 0x600, PointerToRelocations: 0x0, PointerToLineNumbers: 0x0, NumberOfRelocations: 0x0, NumberOfLineNumbers: 0x0, Characteristics: 0x60500060}}, + &pe.Section{SectionHeader: pe.SectionHeader{Name: ".data", VirtualSize: 0x6a58, VirtualAddress: 0x160000, Size: 0x6c00, Offset: 0x15f000, PointerToRelocations: 0x0, PointerToLineNumbers: 0x0, NumberOfRelocations: 0x0, NumberOfLineNumbers: 0x0, Characteristics: 0xc0600040}}, + }, + Symbols: []*pe.Symbol{ + &pe.Symbol{Name: "_soong_build_number", Value: 0x20, SectionNumber: 2, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: ".data", Value: 0x20, SectionNumber: 2, Type: 0x0, StorageClass: 0x3}, + &pe.Symbol{Name: "_adb_device_banner", Value: 0xa0, SectionNumber: 2, Type: 0x0, StorageClass: 0x2}, + }, + }, + symbol: "soong_build_number", + offset: 0x15f020, + size: 128, + }, + { + // Test when symbol has nothing after it + file: &pe.File{ + FileHeader: pe.FileHeader{ + Machine: pe.IMAGE_FILE_MACHINE_AMD64, + }, + Sections: []*pe.Section{ + &pe.Section{SectionHeader: pe.SectionHeader{Name: ".text", VirtualSize: 0x1cc0, VirtualAddress: 0x1000, Size: 0x1e00, Offset: 0x600, PointerToRelocations: 0x0, PointerToLineNumbers: 0x0, NumberOfRelocations: 0x0, NumberOfLineNumbers: 0x0, Characteristics: 0x60500020}}, + &pe.Section{SectionHeader: pe.SectionHeader{Name: ".data", VirtualSize: 0xa0, VirtualAddress: 0x3000, Size: 0x200, Offset: 0x2400, PointerToRelocations: 0x0, PointerToLineNumbers: 0x0, NumberOfRelocations: 0x0, NumberOfLineNumbers: 0x0, Characteristics: 0xc0600040}}, + }, + Symbols: []*pe.Symbol{ + &pe.Symbol{Name: "soong_build_number", Value: 0x20, SectionNumber: 2, Type: 0x0, StorageClass: 0x2}, + }, + }, + symbol: "soong_build_number", + offset: 0x2420, + size: 128, + }, + { + // Test when symbol has a symbol in a different section after it + file: &pe.File{ + FileHeader: pe.FileHeader{ + Machine: pe.IMAGE_FILE_MACHINE_AMD64, + }, + Sections: []*pe.Section{ + &pe.Section{SectionHeader: pe.SectionHeader{Name: ".text", VirtualSize: 0x1cc0, VirtualAddress: 0x1000, Size: 0x1e00, Offset: 0x600, PointerToRelocations: 0x0, PointerToLineNumbers: 0x0, NumberOfRelocations: 0x0, NumberOfLineNumbers: 0x0, Characteristics: 0x60500020}}, + &pe.Section{SectionHeader: pe.SectionHeader{Name: ".data", VirtualSize: 0xa0, VirtualAddress: 0x3000, Size: 0x200, Offset: 0x2400, PointerToRelocations: 0x0, PointerToLineNumbers: 0x0, NumberOfRelocations: 0x0, NumberOfLineNumbers: 0x0, Characteristics: 0xc0600040}}, + &pe.Section{SectionHeader: pe.SectionHeader{Name: ".rdata", VirtualSize: 0x5e0, VirtualAddress: 0x4000, Size: 0x600, Offset: 0x2600, PointerToRelocations: 0x0, PointerToLineNumbers: 0x0, NumberOfRelocations: 0x0, NumberOfLineNumbers: 0x0, Characteristics: 0x40500040}}, + }, + Symbols: []*pe.Symbol{ + &pe.Symbol{Name: "soong_build_number", Value: 0x20, SectionNumber: 2, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "_adb_device_banner", Value: 0x30, SectionNumber: 3, Type: 0x0, StorageClass: 0x2}, + }, + }, + symbol: "soong_build_number", + offset: 0x2420, + size: 128, + }, + { + // Test when symbols are out of order + file: &pe.File{ + FileHeader: pe.FileHeader{ + Machine: pe.IMAGE_FILE_MACHINE_AMD64, + }, + Sections: []*pe.Section{ + &pe.Section{SectionHeader: pe.SectionHeader{Name: ".text", VirtualSize: 0x1cc0, VirtualAddress: 0x1000, Size: 0x1e00, Offset: 0x600, PointerToRelocations: 0x0, PointerToLineNumbers: 0x0, NumberOfRelocations: 0x0, NumberOfLineNumbers: 0x0, Characteristics: 0x60500020}}, + &pe.Section{SectionHeader: pe.SectionHeader{Name: ".data", VirtualSize: 0x120, VirtualAddress: 0x3000, Size: 0x200, Offset: 0x2400, PointerToRelocations: 0x0, PointerToLineNumbers: 0x0, NumberOfRelocations: 0x0, NumberOfLineNumbers: 0x0, Characteristics: 0xc0600040}}, + }, + Symbols: []*pe.Symbol{ + &pe.Symbol{Name: "_adb_device_banner", Value: 0xa0, SectionNumber: 2, Type: 0x0, StorageClass: 0x2}, + &pe.Symbol{Name: "soong_build_number", Value: 0x20, SectionNumber: 2, Type: 0x0, StorageClass: 0x2}, + }, + }, + symbol: "soong_build_number", + offset: 0x2420, + size: 128, + }, + } + + for i, testCase := range testCases { + t.Run(strconv.Itoa(i), func(t *testing.T) { + file, err := extractPESymbols(testCase.file) + if err != nil { + t.Error(err.Error()) + } + offset, size, err := findSymbol(file, testCase.symbol) + if err != nil { + t.Error(err.Error()) + } + if offset != testCase.offset || size != testCase.size { + t.Errorf("expected %x:%x, got %x:%x", testCase.offset, testCase.size, offset, size) + } + }) + } +} diff --git a/cmd/symbol_inject/symbol_inject.go b/cmd/symbol_inject/symbol_inject.go index 75f8a1ac0..d0f01c536 100644 --- a/cmd/symbol_inject/symbol_inject.go +++ b/cmd/symbol_inject/symbol_inject.go @@ -29,6 +29,8 @@ var ( symbol = flag.String("s", "", "symbol to inject into") from = flag.String("from", "", "optional existing value of the symbol for verification") value = flag.String("v", "", "value to inject into symbol") + + dump = flag.Bool("dump", false, "dump the symbol table for copying into a test") ) var maxUint64 uint64 = math.MaxUint64 @@ -50,16 +52,18 @@ func main() { usageError("-i is required") } - if *output == "" { - usageError("-o is required") - } + if !*dump { + if *output == "" { + usageError("-o is required") + } - if *symbol == "" { - usageError("-s is required") - } + if *symbol == "" { + usageError("-s is required") + } - if *value == "" { - usageError("-v is required") + if *value == "" { + usageError("-v is required") + } } r, err := os.Open(*input) @@ -69,6 +73,15 @@ func main() { } defer r.Close() + if *dump { + err := dumpSymbols(r) + if err != nil { + fmt.Fprintln(os.Stderr, err.Error()) + os.Exit(6) + } + return + } + w, err := os.OpenFile(*output, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0777) if err != nil { fmt.Fprintln(os.Stderr, err.Error()) @@ -76,36 +89,45 @@ func main() { } defer w.Close() - err = injectSymbol(r, w, *symbol, *value, *from) + file, err := openFile(r) + if err != nil { + fmt.Fprintln(os.Stderr, err.Error()) + os.Exit(4) + } + + err = injectSymbol(file, w, *symbol, *value, *from) if err != nil { fmt.Fprintln(os.Stderr, err.Error()) os.Remove(*output) - os.Exit(2) + os.Exit(5) } } -type ReadSeekerAt interface { - io.ReaderAt - io.ReadSeeker -} - -func injectSymbol(r ReadSeekerAt, w io.Writer, symbol, value, from string) error { - var offset, size uint64 - var err error - - offset, size, err = findElfSymbol(r, symbol) +func openFile(r io.ReaderAt) (*File, error) { + file, err := elfSymbolsFromFile(r) if elfError, ok := err.(cantParseError); ok { // Try as a mach-o file - offset, size, err = findMachoSymbol(r, symbol) + file, err = machoSymbolsFromFile(r) if _, ok := err.(cantParseError); ok { // Try as a windows PE file - offset, size, err = findPESymbol(r, symbol) + file, err = peSymbolsFromFile(r) if _, ok := err.(cantParseError); ok { // Can't parse as elf, macho, or PE, return the elf error - return elfError + return nil, elfError } } } + if err != nil { + return nil, err + } + + file.r = r + + return file, err +} + +func injectSymbol(file *File, w io.Writer, symbol, value, from string) error { + offset, size, err := findSymbol(file, symbol) if err != nil { return err } @@ -119,7 +141,7 @@ func injectSymbol(r ReadSeekerAt, w io.Writer, symbol, value, from string) error expected := make([]byte, size) existing := make([]byte, size) copy(expected, from) - _, err := r.ReadAt(existing, int64(offset)) + _, err := file.r.ReadAt(existing, int64(offset)) if err != nil { return err } @@ -129,48 +151,107 @@ func injectSymbol(r ReadSeekerAt, w io.Writer, symbol, value, from string) error } } - return copyAndInject(r, w, offset, size, value) + return copyAndInject(file.r, w, offset, size, value) } -func copyAndInject(r io.ReadSeeker, w io.Writer, offset, size uint64, value string) (err error) { - // helper that asserts a two-value function returning an int64 and an error has err != nil - must := func(n int64, err error) { - if err != nil { - panic(err) - } - } - - // helper that asserts a two-value function returning an int and an error has err != nil - must2 := func(n int, err error) { - must(int64(n), err) - } - - // convert a panic into returning an error - defer func() { - if r := recover(); r != nil { - err, _ = r.(error) - if err == io.EOF { - err = io.ErrUnexpectedEOF - } - if err == nil { - panic(r) - } - } - }() - +func copyAndInject(r io.ReaderAt, w io.Writer, offset, size uint64, value string) (err error) { buf := make([]byte, size) copy(buf, value) - // Reset the input file - must(r.Seek(0, io.SeekStart)) // Copy the first bytes up to the symbol offset - must(io.CopyN(w, r, int64(offset))) - // Skip the symbol contents in the input file - must(r.Seek(int64(size), io.SeekCurrent)) - // Write the injected value in the output file - must2(w.Write(buf)) - // Write the remainder of the file - must(io.Copy(w, r)) + _, err = io.Copy(w, io.NewSectionReader(r, 0, int64(offset))) - return nil + // Write the injected value in the output file + if err == nil { + _, err = w.Write(buf) + } + + // Write the remainder of the file + pos := int64(offset + size) + if err == nil { + _, err = io.Copy(w, io.NewSectionReader(r, pos, 1<<63-1-pos)) + } + + if err == io.EOF { + err = io.ErrUnexpectedEOF + } + + return err +} + +func findSymbol(file *File, symbolName string) (uint64, uint64, error) { + for i, symbol := range file.Symbols { + if symbol.Name == symbolName { + // Find the next symbol (n the same section with a higher address + var n int + for n = i; n < len(file.Symbols); n++ { + if file.Symbols[n].Section != symbol.Section { + n = len(file.Symbols) + break + } + if file.Symbols[n].Addr > symbol.Addr { + break + } + } + + size := symbol.Size + if size == 0 { + var end uint64 + if n < len(file.Symbols) { + end = file.Symbols[n].Addr + } else { + end = symbol.Section.Size + } + + if end <= symbol.Addr || end > symbol.Addr+4096 { + return maxUint64, maxUint64, fmt.Errorf("symbol end address does not seem valid, %x:%x", symbol.Addr, end) + } + + size = end - symbol.Addr + } + + offset := symbol.Section.Offset + symbol.Addr + + return uint64(offset), uint64(size), nil + } + } + + return maxUint64, maxUint64, fmt.Errorf("symbol not found") +} + +type File struct { + r io.ReaderAt + Symbols []*Symbol + Sections []*Section +} + +type Symbol struct { + Name string + Addr uint64 // Address of the symbol inside the section. + Size uint64 // Size of the symbol, if known. + Section *Section +} + +type Section struct { + Name string + Addr uint64 // Virtual address of the start of the section. + Offset uint64 // Offset into the file of the start of the section. + Size uint64 +} + +func dumpSymbols(r io.ReaderAt) error { + err := dumpElfSymbols(r) + if elfError, ok := err.(cantParseError); ok { + // Try as a mach-o file + err = dumpMachoSymbols(r) + if _, ok := err.(cantParseError); ok { + // Try as a windows PE file + err = dumpPESymbols(r) + if _, ok := err.(cantParseError); ok { + // Can't parse as elf, macho, or PE, return the elf error + return elfError + } + } + } + return err } diff --git a/cmd/symbol_inject/symbol_inject_test.go b/cmd/symbol_inject/symbol_inject_test.go new file mode 100644 index 000000000..dbee39a06 --- /dev/null +++ b/cmd/symbol_inject/symbol_inject_test.go @@ -0,0 +1,67 @@ +// Copyright 2018 Google Inc. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package main + +import ( + "bytes" + "strconv" + "testing" +) + +func TestCopyAndInject(t *testing.T) { + s := "abcdefghijklmnopqrstuvwxyz" + testCases := []struct { + offset, size uint64 + value string + expected string + }{ + { + offset: 0, + size: 1, + value: "A", + expected: "Abcdefghijklmnopqrstuvwxyz", + }, + { + offset: 1, + size: 1, + value: "B", + expected: "aBcdefghijklmnopqrstuvwxyz", + }, + { + offset: 1, + size: 1, + value: "BCD", + expected: "aBcdefghijklmnopqrstuvwxyz", + }, + { + offset: 25, + size: 1, + value: "Z", + expected: "abcdefghijklmnopqrstuvwxyZ", + }, + } + + for i, testCase := range testCases { + t.Run(strconv.Itoa(i), func(t *testing.T) { + in := bytes.NewReader([]byte(s)) + out := &bytes.Buffer{} + copyAndInject(in, out, testCase.offset, testCase.size, testCase.value) + + if out.String() != testCase.expected { + t.Errorf("expected %s, got %s", testCase.expected, out.String()) + } + }) + } +}