Как узнать, по какому адресу загружена библиотека и какой её размер в байтах, что бы можно было сделать memmove?
 Да, я предполагаю, что это идиотизм какой-то, но всё же, как? 
Для этого надо как минимум разобраться, что библиотека представляет собой в памяти, и понять, что это детали не уровня "C++", а уровня "ОС".
После этого можно посмотреть на то, как загружаются ELF (или PE, или что там в твоей ОС), что такое сегменты и что такое динамические релокации. После этого уже можно будет понять, что отдельно друг от друга сегменты библиотеки двигать нет смысла (потому что относительные ссылки между ними не помечены релокациями), а всё целиком имеет смысл двигать только если после перемещения обновлять места динамических релокаций.
Несколько мыслей.
- Задача противоречит базовым принципам защиты информации в много-процессной ОС.  Если ее рассматривать с разных углов то можно видеть и анти-вирусную угрозу и просто краш системы если она будет работать от супер-пользователя. Эти пункты надо проговорить.
- Реализация будет сильно зависеть не от С++ а от ОС (Windows/Linux)
- Очень полезно понять мотивы зачем этого хочет автор. Тогда и можно придумать эффективное решение. Тоесть не просто сделать memmove,  сделать ДЛЯ КАКИХ_ТО целей.