![]() |
eXeL@B —› Вопросы новичков —› Вызов экспортируемой функции из exe |
Посл.ответ | Сообщение |
|
Создано: 22 июля 2013 20:42 · Личное сообщение · #1 Имеется exe файл собранный через gcc. В exe файле есть такие функции: __declspec(dllexport) int main(int argc, char *argv[]) __declspec(dllexport) int __stdcall mains(int argc, char *argv[]) __declspec(dllexport) void maint() __declspec(dllexport) void __stdcall mainf() И BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) Функции видно через dumpbin /EXPORTS, но вызвать их другой программой просто как из dll нельзя т.к. это не библиотека dll. Возможно ли как то вызвать одну из этих 4-х функций из другой программы? ![]() |
|
Создано: 22 июля 2013 20:54 · Личное сообщение · #2 |
|
Создано: 22 июля 2013 21:08 · Личное сообщение · #3 Я почему-то всегда думал, что такое делается для обеспечения доступа к экспорту со стороны динамических библиотек. Т.е. ехе, который у вас есть, запускается. В его адресное пространство грузиться библиотека, и вот она эти экспорты может юзать, но в адресном пространстве процесса, созданного с проекции ехе. А так, чтоб в другом ехе имеющийся подгрузить как длл, то как же быть с ЕР? Даже если и есть BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) внутри ехешника, как же она получит управление? А без её вызова может и не работать. ----- Stuck to the plan, always think that we would stand up, never ran. ![]() |
|
Создано: 22 июля 2013 21:15 · Поправил: vden · Личное сообщение · #4 |
|
Создано: 22 июля 2013 21:20 · Личное сообщение · #5 |
|
Создано: 22 июля 2013 21:24 · Личное сообщение · #6 |
|
Создано: 22 июля 2013 21:26 · Личное сообщение · #7 |
|
Создано: 22 июля 2013 21:42 · Поправил: Kadet89 · Личное сообщение · #8 Стала вылезать ошибка "dll либо не предназначен для выполнения под управлением Windows или содержит ошибку. ..." т.ч. не прокатило. Я тут нагуглил: One importand difference between EXE and DLL which is very hard to overcome are relocations. When EXE is loaded into memory, it can be stored on any address; but when a DLL is loaded, some addresses are already taken by the main program and previously loaded modules. Relocation Table is used to help in changing address at which DLL is loaded. But EXE file do not have the relocation table, and therefore loading it into different address may cause invalid memory references. Т.е. надо восстанавливать релоки... Есть еще варианты? ![]() |
|
Создано: 22 июля 2013 22:00 · Поправил: vden · Личное сообщение · #9 Какие у exe зависимости (что импортирует) ? Размер? Для более конкретных ответов желательно выложить файл и описать что в итоге требуется. Вполне возможно, что способ о котором я написал будет работать. Грубо говоря нужно чтобы exe прошел инициализацию, далее его функции можно вызывать. Еще варианты не для новичков: * рипать нужные функции * делать dll из exe (на практике, на больших образах, это сложно) ![]() |
|
Создано: 22 июля 2013 22:51 · Личное сообщение · #10 |
![]() Ранг: 419.0 (мудрец), 647thx Активность: 0.46↗0.51 Статус: Участник "Тибериумный реверсинг" |
Создано: 23 июля 2013 18:22 · Личное сообщение · #11 Kadet89 пишет: Мне нужно без создания процесса. Т.е. чтобы exe работал как dll Если я правильно понимаю, с другой стороны, вопрос в том, чтоб совместить ImageBase(0x400000) если релоков нету. Тогда имеет смысл Вашу программу, которая грузит, компильнуть с ImageBase != 0x400000 (+/- Image Size) и лоадлибрариех с флагами LOAD_LIBRARY_AS_DATAFILE или DONT_RESOLVE_DLL_REFERENCES. Kadet89 пишет: собранный через gcc. Очевидно с компилятором существуют свои нюансы ![]() |
|
Создано: 23 июля 2013 20:35 · Личное сообщение · #12 |
|
Создано: 23 июля 2013 21:37 · Личное сообщение · #13 |
|
Создано: 23 июля 2013 21:49 · Личное сообщение · #14 |
|
Создано: 23 июля 2013 21:57 · Личное сообщение · #15 Kadet89 LoadEXEfromMem типа аналог LoadLibrary GetProcAddr аналог GetProcAddress при нажатии на ок Code:
![]() |
|
Создано: 23 июля 2013 22:09 · Личное сообщение · #16 |
|
Создано: 23 июля 2013 22:20 · Личное сообщение · #17 |
|
Создано: 25 июля 2013 21:38 · Поправил: Kadet89 · Личное сообщение · #18 |
|
Создано: 25 июля 2013 22:41 · Личное сообщение · #19 |
|
Создано: 26 июля 2013 19:16 · Поправил: Kadet89 · Личное сообщение · #20 |
![]() |
eXeL@B —› Вопросы новичков —› Вызов экспортируемой функции из exe |