c # — 64-битное адресное пространство Windows

Я разрабатываю 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 бит. (хотя бы адреса).
кто-нибудь нашел лучшее решение?
(Таким образом, адрес из одного запуска на другом компьютере, может быть сопоставлен с моим?
— или сделанный где-то минидамп может быть загружен мной.)

0

Решение

Поскольку вы переходите на 64-битную версию, я предполагаю, что вы ориентируетесь на Windows Vista или выше, поскольку XP 64-битная версия никогда не была настолько популярной (и расширенная поддержка прекратилась).

В Windows Vista была введена рандомизация адресного пространства (ASLR), что повышает безопасность, поскольку угадывание мест в памяти стало сложнее.

ASLR рандомизирует базовый адрес и активируется с /DYNAMICBASE (MSDN). Таким образом, больше нет необходимости самостоятельно генерировать или вычислять базовый адрес.

Как вы сказали, ребазинг может произойти уже в 32-битных приложениях. Это и ASLR не будут влиять на отладку аварийных дампов. Отладчик сможет разрешать символы.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]