Показаны те же детали, как Process Explorer
скриншоте вы предоставили, кажется, скриншот Process Explorer, а не диспетчер задач. Это усложняет ситуацию, потому что (если я правильно помню) Process Explorer использует драйвер ядра для получения подробной информации о системе, чтобы более точно учитывать время CPU, чем Windows. У меня нет книги под рукой, но это должно быть описано в Windows Sysinternals Administrator's Reference.
Преобразование начальных адресов для библиотек DLL и методов
Начальный адрес, как говорит название, адрес. Обычно это будет отображаться в шестнадцатеричном формате, но на самом деле это всего лишь число, поэтому оно может быть числовым в вашем случае. Преобразование в Hex не представляет проблемы.
Если вы хотите повернуть число во что-то полезное, как имя DLL и имя метода, вам нужно использовать символы. Смотрите на скриншоте: Process Explorer также должен загружать символы, иначе смещение рассчитывается с начала DLL (как в van.dll+1c904
).
Для обработки символов Process Explorer использует Microsoft DLL под названием dbghelp.dll
. Вы настроили это в Options/Configure symbols...
. Вы можете использовать одну и ту же DLL, если хотите, но я бы сказал, что это тот момент, когда вы перестали использовать Powershell, потому что dbghelp.dll
является родной DLL и не может использоваться .NET. Вы даже не можете создать сборку .NET interop в Visual Studio, потому что это не COM-библиотека.
Кроме того, Process Explorer применяет еще одно волшебство к отображаемому значению начального адреса: обычно начальный адрес всегда один и тот же: некоторый код Microsoft, который создает объект Thread, который затем вызывает конкретный код приложения. Process Explorer подбирает трассировку стека и отображает первый кадр, не относящийся к Microsoft, в стеке вызовов. Я не уверен, что адрес, измененный WMI, рассматривает одно и то же.
Если вы хотите дать dbghelp.dll
a try, метод преобразования с адреса в DLL должен быть IDebugSymbols::GetNameByOffset().
Также обратите внимание, что преобразование с адреса на метод необходимо выполнить на удаленном компьютере, так как только удаленный компьютер будет знать, какая именно версия DLL загружена. Затем также учтите, что удаленная машина нуждается в доступе в Интернет для загрузки символов с сервера Microsoft.
Удаленное выполнение
В комментарии вы упомянули, что вы хотите, чтобы выполнить команду на удаленном компьютере. Process Explorer не поддерживает удаленные компьютеры. Хотя я не уверен в причинах, я предполагаю, что он сможет получить доступ к удаленному компьютеру через WMI и, следовательно, столкнуться с теми же ограничениями, что и вы.
Однако, есть alternatives to Process Explorer, discussed in the Process Explorer Forum. Они также, похоже, страдают от ограничений WMI, но вы можете попробовать. Кроме того, вы можете выполнять программы на удаленных машинах, используя SysInternals PsExec.
Общий вывод
Я предполагаю, что ожидаемое решение слишком сложна, чтобы ответить на StackOverflow, особенно если набор инструментов ограничен Powershell. Для доступа к удаленному компьютеру по крайней мере потребуется C++ для интеграции dbghelp.dll
, а также PSExec
.
@Neolisk Это достижимо через Powershell? –
@ShayLevy Любые идеи .... –
@RRUZ Код в 'http: //stackoverflow.com/questions/10159516/get-thread-start-address? Answertab = active # tab-top' близок к тому, что я находясь в поиске. Но как я могу запустить его через Powershell и для удаленной машины. –