[C++] Читаем таблицу экспорта (рефлектор кулхакера)
От: Kluev  
Дата: 26.06.06 08:01
Оценка: 16 (2)
Этот код предназначен для того чтобы избавить программиста от необходимости руками регестрировать юнит-тесты, фабрики классов, и т.п. глобальные обьекты и функции.

Регистрация осуществляется крайне просто:
1) заводим префикс для семейства обьектов, например my_prefix_
2) добавляем __declspec(dllexport) к обьекту.

__declspec(dllexport) void my_prefix_test_1()
{
   // понеслась
}

// для удобства юзаем макросы
#define MY_TEST(name) __declspec(dllexport) void my_prefix_##name

MY_TEST(foo)()
{
  // понеслась
}


Теперь прочитав таблицу экспорта в PE файле можно получить список нужных функций:

#include "stdafx.h"
#include "hacking.h" // <- здесь

const char *prefix = "?my_prefix_"; // образаем внимание на знак вопроса перед именем

typedef void (*Func)();

int main(int argc, char* argv[])
{
    hacking::ImpEntry e;
    int n = hacking::imp_table_size();
    int prefix_len = strlen(prefix);

    // вызываем все функции которые начинаются с my_prefix
    for (int i = 0; i < n; i++ )
    {
        e = hacking::imp_table_at(i);
        if ( strncmp( prefix, e.name, prefix_len) == 0 )
            ((Func)e.addr)(); // call
    }

    return 0;
}


Сырцы и примерчик здесь
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.