Можно выключить ограничения доступа Java на отражение так, чтобы частный ничего не означал.
Эти setAccessible(true)
вызов делает это.
единственное ограничение - то, что ClassLoder может запретить Вам от выполнения этого.
См. Ниспровергающая Защита Доступа Java для Поблочного тестирования (Ross Burton) для способа сделать это в Java.
64-битная отметка времени - это время, когда основной поток приложения был создан с интервалом в 100 наносекунд с 1 января 1601 года (UTC) (это известно как FILETIME
) . 32-битная метка времени действительно имеет формат time_t
(он сообщает время создания модуля и хранится в заголовке модуля).
Я бы сказал, что 0x0002d160 - это смещение от адреса загрузки модуля. (кажется, слишком мало для абсолютного адреса). Запустите Visual Studio, запустите отладчик, посмотрите окно отладки «модулей». Ваш exe-файл должен быть указан там. Найдите адрес, по которому загружен модуль, добавьте к этому адресу 0x0002d160 и посмотрите на разборку по полученному адресу. Visual Studio показывает исходный код, смешанный со сборкой,
Вы мало что сможете сделать с этой информацией после смерти.
Полезный бит информации - это код исключения 0xc0000005, который в данном случае означает просто нарушение прав доступа. Итак, вы разыменовали нуль или какой-то другой бит памяти, которым вы не владели.
Смещение ошибки, я подозреваю, - это смещение от того места, где ваша DLL была загружена в память, так что теоретически вы можете добавить его к своему базовому адресу и найти код нарушения, но я не уверен.
Лучше всего отладить это в отладчике, когда это произойдет в следующий раз. Вы можете использовать Параметры выполнения файла изображения для автоматического запуска приложения в отладчике . Убедитесь, что у вас есть готовые символы (подумайте о создании DEBUG, если вы в настоящее время используете RELEASE).
Бог отладки Джон Роббинс создал небольшой инструмент под названием CrashFinder, чтобы помочь в таких ситуациях: https://www.wintellect.com/crashfinder-2-8-yes-native-code-still-lives/
Всегда полезно сохранять PDB для каждой сборки, которую вы публикуете (это звучит как инструмент, который вы используете только в частном порядке, но было бы неплохо сохранить символы PDB для последней сборки).