Вызвать функцию из dll

126
24 декабря 2020, 14:10

Пытаюсь вызвать message box из dll, учебное задание.

typedef int (WINAPI* _MessageBoxA)(HWND, LPTSTR, LPTSTR, UINT);
HMODULE user32 = (*LoadLibraryAPointer)("user32.dll");
PDWORD Address = (PDWORD)((LPBYTE)user32 + pIED->AddressOfFunctions);
PDWORD Name = (PDWORD)((LPBYTE)user32 + pIED->AddressOfNames);
PDWORD Ordinal = (PWORD)((LPBYTE)user32 + pIED->AddressOfNameOrdinals);
_LoadLibraryA LoadLibraryAPointer;
_MessageBoxA MessageBoxPointer;
for (int i = 0; i < pIED->AddressOfFunctions; i++)
{
    if (!hashComparatorA(MESSAGE_BOX_HASH, (char*)user32 + Name[i])) 
    {
        MessageBoxPointer = (user32 + Address[Ordinal[i]]);
        break;
    }
}

Возникает ошибка

error C2440: '=' : cannot convert from 'HMODULE' to '_MessageBoxA'
Answer 1

Странные у вас учебные задания. Ошибка возникает из-за того, что тип HMODULE, который определен как указатель на структуру struct {int unused;}, несовместим с типом указателя на функцию. Эту ошибку можно убрать приведением типов, но в данном случае это не поможет заставить код работать, так как он выглядит в целом некорректным. Если предположить, что pIED - это указатель на структуру IMAGE_EXPORT_DIRECTORY, определенную в winnt.h (которая описывает раздел экспорта PE-файла), то адрес функции должен вычисляться так:

MessageBoxPointer = (_MessageBoxA)((char*)user32 + Address[i]); 

Тип HMODULE нужно привести к указателю на один байт, чтобы адресная арифметика работала как ожидается. Переменная user32 содержит базовый адрес DLL, а Address[i] - относительный адрес функции, поэтому мы их складываем. Ordinal не нужен.

READ ALSO
Появилась Uncaught Error: Syntax error, unrecognized expression: # при использования выпадающего меню Bootstrap 4

Появилась Uncaught Error: Syntax error, unrecognized expression: # при использования выпадающего меню Bootstrap 4

Пилю сайт, сначала был HTML шаблон, сейчас в процессе натяжки на WPВо время натяжки на CMS появилась промежуточная задача от заказчика, один из пунктов...

112
Перемножить элементы таблицы jquery

Перемножить элементы таблицы jquery

Есть корзина интернет магазина, в которой стараюсь сделать перерасчет по клику ценыВ случае 1 товара проблем особых нет, но в случае 2х и более...

142
Проблема с анимацией в select

Проблема с анимацией в select

пытаюсь стилизовать select, хочу сделать анимацию, что при клике на select и выборе нужного option, border-bottom будет менять цвет, а еще лучше это будет...

130
Почему ajax запрос возвращает 2 объекта?

Почему ajax запрос возвращает 2 объекта?

никак не могу понять, почему ajax возвращает 2 объекта

92