comparison agent/src/share/classes/sun/jvm/hotspot/debugger/win32/coff/DumpExports.java @ 2072:d6cd0d55d0b5

6987812: 2/3 SAJDI: "gHotSpotVMTypes was not initialized properly in the remote process" Summary: Change ExportDirectoryTableImpl to return the 'Export RVA' field without modification. Read 'Base Of Data' field in optional header when PE32 format COFF file is read. Refine search for dbgeng.dll and dbghelp.dll. Other cleanups. Reviewed-by: swamyv, poonam
author dcubed
date Thu, 23 Dec 2010 07:58:35 -0800
parents c18cbe5936b8
children
comparison
equal deleted inserted replaced
2071:07c62ff47437 2072:d6cd0d55d0b5
1 /* 1 /*
2 * Copyright (c) 2001, Oracle and/or its affiliates. All rights reserved. 2 * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 * 4 *
5 * This code is free software; you can redistribute it and/or modify it 5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as 6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. 7 * published by the Free Software Foundation.
35 usage(); 35 usage();
36 } 36 }
37 37
38 String filename = args[0]; 38 String filename = args[0];
39 COFFFile file = COFFFileParser.getParser().parse(filename); 39 COFFFile file = COFFFileParser.getParser().parse(filename);
40 ExportDirectoryTable exports = 40
41 file.getHeader(). 41 // get common point for both things we want to dump
42 getOptionalHeader(). 42 OptionalHeaderDataDirectories dataDirs = file.getHeader().getOptionalHeader().
43 getDataDirectories(). 43 getDataDirectories();
44 getExportDirectoryTable(); 44
45 // dump the header data directory for the Export Table:
46 DataDirectory dir = dataDirs.getExportTable();
47 System.out.println("Export table: RVA = " + dir.getRVA() + "/0x" +
48 Integer.toHexString(dir.getRVA()) + ", size = " + dir.getSize() + "/0x" +
49 Integer.toHexString(dir.getSize()));
50
51 System.out.println(file.getHeader().getNumberOfSections() + " sections in file");
52 for (int i = 1; i <= file.getHeader().getNumberOfSections(); i++) {
53 SectionHeader sec = file.getHeader().getSectionHeader(i);
54 System.out.println(" Section " + i + ":");
55 System.out.println(" Name = '" + sec.getName() + "'");
56 System.out.println(" VirtualSize = " + sec.getSize() + "/0x" +
57 Integer.toHexString(sec.getSize()));
58 System.out.println(" VirtualAddress = " + sec.getVirtualAddress() + "/0x" +
59 Integer.toHexString(sec.getVirtualAddress()));
60 System.out.println(" SizeOfRawData = " + sec.getSizeOfRawData() + "/0x" +
61 Integer.toHexString(sec.getSizeOfRawData()));
62 System.out.println(" PointerToRawData = " + sec.getPointerToRawData() + "/0x" +
63 Integer.toHexString(sec.getPointerToRawData()));
64 }
65
66 ExportDirectoryTable exports = dataDirs.getExportDirectoryTable();
45 if (exports == null) { 67 if (exports == null) {
46 System.out.println("No exports found."); 68 System.out.println("No exports found.");
47 } else { 69 } else {
48 System.out.println(file.getHeader().getNumberOfSections() + " sections in file");
49 for (int i = 0; i < file.getHeader().getNumberOfSections(); i++) {
50 System.out.println(" Section " + i + ": " + file.getHeader().getSectionHeader(1 + i).getName());
51 }
52
53 DataDirectory dir = file.getHeader().getOptionalHeader().getDataDirectories().getExportTable();
54 System.out.println("Export table: RVA = 0x" + Integer.toHexString(dir.getRVA()) +
55 ", size = 0x" + Integer.toHexString(dir.getSize()));
56
57 System.out.println("DLL name: " + exports.getDLLName()); 70 System.out.println("DLL name: " + exports.getDLLName());
58 System.out.println("Time/date stamp 0x" + Integer.toHexString(exports.getTimeDateStamp())); 71 System.out.println("Time/date stamp 0x" + Integer.toHexString(exports.getTimeDateStamp()));
59 System.out.println("Major version 0x" + Integer.toHexString(exports.getMajorVersion() & 0xFFFF)); 72 System.out.println("Major version 0x" + Integer.toHexString(exports.getMajorVersion() & 0xFFFF));
60 System.out.println("Minor version 0x" + Integer.toHexString(exports.getMinorVersion() & 0xFFFF)); 73 System.out.println("Minor version 0x" + Integer.toHexString(exports.getMinorVersion() & 0xFFFF));
61 System.out.println(exports.getNumberOfNamePointers() + " functions found"); 74 System.out.println(exports.getNumberOfNamePointers() + " exports found");
62 for (int i = 0; i < exports.getNumberOfNamePointers(); i++) { 75 for (int i = 0; i < exports.getNumberOfNamePointers(); i++) {
63 System.out.println(" 0x" + 76 short ordinal = exports.getExportOrdinal(i);
64 Integer.toHexString(exports.getExportAddress(exports.getExportOrdinal(i))) + 77 System.out.print("[" + i + "] '" + exports.getExportName(i) + "': [" +
65 " " + 78 ordinal + "] = 0x" + Integer.toHexString(exports.getExportAddress(ordinal)));
66 (exports.isExportAddressForwarder(exports.getExportOrdinal(i)) ? 79 System.out.println(exports.isExportAddressForwarder(ordinal)
67 ("Forwarded to " + exports.getExportAddressForwarder(exports.getExportOrdinal(i))) : 80 ? " Forwarded to '" + exports.getExportAddressForwarder(ordinal) + "'"
68 exports.getExportName(i))); 81 : "");
69 } 82 }
70 } 83 }
71 } 84 }
72 } 85 }