А динамическая ли функция?

Обсуждения по программированию для ОС Windows безотносительно используемого языка программирования. Windows NT, Win32, Windows API, ядро и драйверы.
ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

А динамическая ли функция?

Сообщение ANDLL » 19.04.2005 (Вт) 8:21

Преположим, мы имеем такой сpp-файл:

Код: Выделить всё
#include "stdafx.h"

void* __stdcall SomeFunc(void* par) //Просто функция
{
   //...
}

DWORD WINAPI GetAddress()
{
   return (DWORD)SomeFunc;
}


1) Предположим, что он является частью EXE-программы. Можно ли утверждать, что при любом запуске этой программы, будь то с парамертрами, без параметров, как COM-сервер или standalone, возвращаемое GetAddress значение будет неизменным(при данной сборке, разумеется)?
2) Предположим, что он является частью DLL-файла. Можно ли утверждать, что как и в каком порядке бы эта DLL не подключалась, возвращаемое экспортируемой функцией GetAddress значение будет неизменным? SomeFunc не экспортируется. Если нет, то привязано ли это значение к чему нибудь?
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 19.04.2005 (Вт) 8:41

1) почти да, но без гарантии
2) скорее всего нет

пояснение по второму вопросу: представь себе, что подгружено две копии этой библиотеки (под разными именами, разумеется) - очевидно, что по одному и тому же адресу не могут располагаться обе SomeFunc.


Значение привязано к hModule, он же базовый адрес загрузки.
Изображение

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 19.04.2005 (Вт) 9:42

А как получить hModule? Это hInstance, который передается в DllMain? Нет там, часом, какого нибудь оператора для этого?
А как оно привязано к hModule?
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 19.04.2005 (Вт) 11:06

1. В общем случае нет. Адрес загрузки жёстко прописывается в заголовке PE. В случае, когда exe запускается как новый процесс, будет гарантированно использоваться этот адрес, а потому все зависимые от него тоже будут теми же. Но в случае подгрузки этого exe в другой процесс (а exe тоже можно подгрузить как dll) адрес либо будет тем же (если требуемое место свободно), либо будет другим (если место занято, но присутствует секция .reloc), либо загрузку не удастся произвести (если место занято, а .reloc нет).
2. Dll без .reloc возможна, но это большой юзлесс. Посему, правила те же, что в п.1 ч. "Место занято, есть .reloc".
3. hInstance==HMODULE.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 19.04.2005 (Вт) 11:26

А теперь объясни, зачем такие замутки :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 19.04.2005 (Вт) 13:18

Скажем так, для автоматизации некоторых действий было принято решение создать миникомпилятор ассемблера(всего несколько инструкций, необходимых для вызова функций моей DLL). Вот так.
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 19.04.2005 (Вт) 14:21

Всё равно не понял, зачем такие замутки :) Ну ладно :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас


Вернуться в Windows-программирование

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7

    TopList