Оптимизация компилятора объединяет реализацию идентичных функций, предназначенную для обхода во время выполнения.

У меня есть тестовый проект C ++ с кучей функций-заглушек, которые имеют ту же реализацию. Эти заглушки предназначены для «замены» во время выполнения с использованием Windows Detours. Проблема в том, что в режиме выпуска компилятор заставляет все эти заглушки указывать на одну и ту же реализацию. Чтобы проиллюстрировать это, рассмотрим этот код:

#include <iostream>
using namespace std;

void A() { cout << "stub" << endl; }
void B() { cout << "stub" << endl; }

void main()
{
cout << &A << ", " << &B << endl;
}

В режиме отладки значения указателя будут другими. В режиме релиза они одинаковые.
Я попробовал директиву pragma optimize (я использую компилятор Microsoft), но она не устранила проблему. В результате мой хук Windows Detours перехватывает все вызовы идентичных заглушек.

Как я могу это исправить?
Благодарю.

1

Решение

Попробуйте использовать макросы препроцессора, чтобы сделать функции-заглушки уникальными, чтобы оптимизатор не объединил их в один.

Использование __FILE__, __LINE__ и __FUNCTION__ в C ++

Что-то вроде этого:

void A() { cout << __FUNCTION__ << endl; }
void B() { cout << __FUNCTION__ << endl; }
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector