// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// This file/namespace contains utility functions for gathering
// information about PE (Portable Executable) headers within
// images (dll's / exe's )

#ifndef BASE_IMAGE_UTIL_H__
#define BASE_IMAGE_UTIL_H__

#include <vector>
#include "base/basictypes.h"
#include <windows.h>

namespace image_util {

// Contains both the PE section name (.text, .reloc etc) and its size.
struct ImageSectionData {
  std::string name;
  size_t size_in_bytes;
  ImageSectionData (const std::string& section_name, size_t section_size) :
      name (section_name), size_in_bytes(section_size) {
  }
};

typedef std::vector<ImageSectionData> ImageSectionsData;

// Provides image statistics for modules of a specified process, or for the
// specified process' own executable file. To use, invoke CreateImageMetrics()
// to get an instance for a specified process, then access the information via
// methods.
class ImageMetrics {
  public:
    // Creates an ImageMetrics instance for given process owned by
    // the caller.
    explicit ImageMetrics(HANDLE process);
    ~ImageMetrics();

    // Fills a vector of ImageSectionsData containing name/size info
    // for every section found in the specified dll's PE section table.
    // The DLL must be loaded by the process associated with this ImageMetrics
    // instance.
    bool GetDllImageSectionData(const std::string& loaded_dll_name,
        ImageSectionsData* section_sizes);

    // Fills a vector if ImageSectionsData containing name/size info
    // for every section found in the executable file of the process
    // associated with this ImageMetrics instance.
    bool GetProcessImageSectionData(ImageSectionsData* section_sizes);

  private:
    // Helper for GetDllImageSectionData and GetProcessImageSectionData
    bool GetImageSectionSizes(char* qualified_path, ImageSectionsData* result);

    HANDLE process_;

    DISALLOW_EVIL_CONSTRUCTORS(ImageMetrics);
};

} // namespace image_util

#endif

