В C/C++ указатель хранит абсолютный адрес памяти, или относительно приложения, или относительно модуля?

Например, если я объявлю функцию в основном приложении и передам указатель на нее из динамически загруженной библиотеки (через dlopen в Linux или LoadLibrary в Windows), используя аргумент gotten symbol (через dlsym или GetProcAddress соответственно) и попытаюсь вызвать эту функцию, будет ли она работать правильно?

То же самое, если передавать указатель из одной динамически загруженной библиотеки в другую? Я думаю, это должно работать, если указатель хотя бы относительно приложения, но не относительно модуля/библиотеки.

Другой пример. Я объявляю функцию в одном приложении и передаю указатель на нее в другое полностью независимое приложение (как C, так и C++) каким-то образом (строка параметров или файл i/o - не знаю как, просто идея) и пытаюсь вызвать эту функцию, это тоже будет работать? Я мог бы ожидать, что она будет работать, если указатели абсолютны. Может быть, это просто не сработает, потому что система вообще не любит такие перекрестные вызовы из-за безопасности?

10
задан Kevin Reid 4 June 2013 в 14:33
поделиться