Я разрабатываю 64-битное приложение с парой DLL.
Исходя из win 32, где базовый адрес по умолчанию загруженных DLL
был 0x10.000.000, а затем они переехали, когда возникли конфликты.
Джон Роббинс из Wintellect рекомендовал устанавливать dll с уникальными адресами, поэтому использование пространства памяти было одинаковым при разных запусках.
Он предложил в книге по отладке приложений .net 2.0, что базовые адреса должны руководствоваться первой буквой имени DLL.
A-C 0x60.000.000
d-f 0x61.000.000
г-я 0x62.000.000
j-l 0x63.000.000
м-о 0x64.000.000
р-р 0х65.000.000
с-у 0x66.000.000
V-X 0x67.000.000
y-z 0x68.000.000
Я думаю, что изменилось с 64 бит. (хотя бы адреса).
кто-нибудь нашел лучшее решение?
(Таким образом, адрес из одного запуска на другом компьютере, может быть сопоставлен с моим?
— или сделанный где-то минидамп может быть загружен мной.)
Поскольку вы переходите на 64-битную версию, я предполагаю, что вы ориентируетесь на Windows Vista или выше, поскольку XP 64-битная версия никогда не была настолько популярной (и расширенная поддержка прекратилась).
В Windows Vista была введена рандомизация адресного пространства (ASLR), что повышает безопасность, поскольку угадывание мест в памяти стало сложнее.
ASLR рандомизирует базовый адрес и активируется с /DYNAMICBASE
(MSDN). Таким образом, больше нет необходимости самостоятельно генерировать или вычислять базовый адрес.
Как вы сказали, ребазинг может произойти уже в 32-битных приложениях. Это и ASLR не будут влиять на отладку аварийных дампов. Отладчик сможет разрешать символы.
Других решений пока нет …