mirror of
https://github.com/gaasedelen/lighthouse
synced 2026-06-08 14:19:10 +00:00
a25e77764a
* remove unneeded std namespace * remove Wno-aligned-new * This makes the build work again, tested on VC2015 community edition on Windows Server 2019. Credit for these changes go to: https://github.com/HongThatCong/Lighthouse-CodeCoverage-build
76 lines
1.9 KiB
C++
76 lines
1.9 KiB
C++
#include "ImageManager.h"
|
|
#include "pin.H"
|
|
|
|
ImageManager::ImageManager()
|
|
{
|
|
PIN_RWMutexInit(&images_lock);
|
|
}
|
|
|
|
ImageManager::~ImageManager()
|
|
{
|
|
PIN_RWMutexFini(&images_lock);
|
|
}
|
|
|
|
VOID ImageManager::addImage(std::string image_name, ADDRINT lo_addr,
|
|
ADDRINT hi_addr)
|
|
{
|
|
PIN_RWMutexWriteLock(&images_lock);
|
|
{
|
|
images.insert(LoadedImage(image_name, lo_addr, hi_addr));
|
|
}
|
|
PIN_RWMutexUnlock(&images_lock);
|
|
}
|
|
|
|
VOID ImageManager::removeImage(ADDRINT low)
|
|
{
|
|
PIN_RWMutexWriteLock(&images_lock);
|
|
{
|
|
std::set<LoadedImage>::iterator i = images.find(LoadedImage("", low));
|
|
if (i != images.end()) {
|
|
LoadedImage li = *i;
|
|
images.erase(i);
|
|
}
|
|
}
|
|
PIN_RWMutexUnlock(&images_lock);
|
|
}
|
|
|
|
VOID ImageManager::addWhiteListedImage(const std::string& image_name)
|
|
{
|
|
whitelist.insert(image_name);
|
|
}
|
|
|
|
BOOL ImageManager::isWhiteListed(const std::string& image_name)
|
|
{
|
|
return whitelist.find(image_name) != whitelist.end();
|
|
}
|
|
|
|
// Checks if the given address falls inside one of the white-listed images we are
|
|
// tracing.
|
|
BOOL ImageManager::isInterestingAddress(ADDRINT addr)
|
|
{
|
|
PIN_RWMutexReadLock(&images_lock);
|
|
{
|
|
// If there is no white-listed image, everything is white-listed.
|
|
if (images.empty() || (addr >= m_cached_low && addr < m_cached_high)) {
|
|
PIN_RWMutexUnlock(&images_lock);
|
|
return true;
|
|
}
|
|
|
|
auto i = images.upper_bound(LoadedImage("", addr));
|
|
--i;
|
|
|
|
// If the instruction address does not fall inside a valid white listed image, bail out.
|
|
if (!(i != images.end() && i->low_ <= addr && addr < i->high_)) {
|
|
PIN_RWMutexUnlock(&images_lock);
|
|
return false;
|
|
}
|
|
|
|
// Save the matched image.
|
|
m_cached_low = i->low_;
|
|
m_cached_high = i->high_;
|
|
}
|
|
PIN_RWMutexUnlock(&images_lock);
|
|
|
|
return true;
|
|
}
|