Как экспортировать чистый & quot; необработанный & quot; имя функции?

Я пытаюсь экспортировать полностью чистое имя функции, потому что мне нужно использовать его в GetProcAddress (2-й параметр). Я знаю, что это возможно, как будто вы тестируете dumpbin против Kernel32, он будет отображать чистые имена функций.

Я осмотрелся и нашел множество «решений», и я получил искаженное имя от фальши:

1 0 00001810 SomeFunction = _SomeFunction

Однако мне нужно, чтобы это выглядело так:

1 0 00001810 SomeFunction

Это позволило бы мне вызывать его из функции GetProcAddress, поскольку я не могу заставить его работать с «искаженным» именем.

Вот как я это определяю:

extern "C" __declspec(dllexport) void SomeFunction(void * SomeArguments)
{
//Function Content
}

С файлом определения модуля это бесполезно … Я получаю полностью искаженное имя.
Используя этот способ, я могу получить его почти там, однако ‘_’ не позволяет GetProcAddress разрешить имя моей функции по адресу.

Выход определения модуля:

1 0 00001810 SomeFunction =? SomeFunction @@ YAXPAX @ Z (void __cdecl SomeFunction (void *))

РЕДАКТИРОВАТЬ: (Если вы имеете в виду функцию над содержимым … это просто окно сообщения MessageBoxA () … там не может быть ничего плохого.)

GetProcAddressLine:

LPVOID SomeFunctionAddr = (LPVOID)GetProcAddress(GetModuleHandleA("Pies.dll"), "SomeFunction");

Полный «GetProcAddress»:

LPVOID SomeFunctionAddr = (LPVOID)GetProcAddress(GetModuleHandleA("Pies.dll"), "SomeFunction");
if (!SomeFunctionAddr)
{
std::cout << "Failed to obtain SomeFunction Address!\n";
return 0;
}

Allocate = VirtualAllocEx(Handle, NULL, strlen(Path), MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
WriteProcessMemory(Handle, Allocate, Path, strlen(Path), NULL);
Thread = CreateRemoteThread(Handle, NULL, NULL, (LPTHREAD_START_ROUTINE)SomeFunctionAddr, Allocate, 0, NULL);
WaitForSingleObject(Thread, INFINITE);
VirtualFreeEx(Handle, Thread, strlen(Path), MEM_RELEASE);

1

Решение

Задача ещё не решена.

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


По вопросам рекламы [email protected]