У меня есть консольное приложение, которое использует puTTY в качестве DLL, и мне нужно отладить соответствующую библиотеку puTTY.

В UNIX я бы сделал strace <command> .

strace ls ggg

Напечатал бы что-то вроде:

stat("ggg", 0x166b0d0)                  = -1 ENOENT (No such file or directory)

потому что у меня нет файла или каталога с именем ggg в моем текущем каталоге. Мне это нужно для консольного приложения Windows.

Я искал в Интернете, скачал Windows SDK с инструментами отладки. Я перепробовал несколько программ, мне кажется, что мне нужен cdb .

делать cdb -o "!htrace -enable" <command> , как представляется, что мне нужно , но я думаю , что я что - то не хватает, потому что она не дает никакого намека на вопрос, почему команда не удается или не удалось файл открытым попытки. (если <command> загружает файл , он» если "преуспеть, однако, <command> хочет имя" сеанса ", а не путь к файлу, она ищет файл или ключ reg с этим именем сеанса):

CommandLine: <command>
Symbol search path is: srv*
Executable search path is:
ModLoad: 00400000 004a7000   image00400000
ModLoad: 77d00000 77e8d000   ntdll.dll
ModLoad: 77aa0000 77b70000   C:\WINDOWS\SysWOW64\KERNEL32.DLL
ModLoad: 748e0000 74ab7000   C:\WINDOWS\SysWOW64\KERNELBASE.dll
ModLoad: 779d0000 77a36000   C:\WINDOWS\SysWOW64\WS2_32.dll
ModLoad: 77b70000 77c2e000   C:\WINDOWS\SysWOW64\RPCRT4.dll
ModLoad: 74720000 74740000   C:\WINDOWS\SysWOW64\SspiCli.dll
ModLoad: 74710000 7471a000   C:\WINDOWS\SysWOW64\CRYPTBASE.dll
ModLoad: 74f00000 74f57000   C:\WINDOWS\SysWOW64\bcryptPrimitives.dll
ModLoad: 75d10000 75d53000   C:\WINDOWS\SysWOW64\sechost.dll
ModLoad: 757c0000 75838000   C:\WINDOWS\SysWOW64\ADVAPI32.dll
ModLoad: 776b0000 7776d000   C:\WINDOWS\SysWOW64\msvcrt.dll
(2f550.32120): Break instruction exception - code 80000003 (first chance)
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for ntdll.dll -
eax=00000000 ebx=00000010 ecx=44ce0000 edx=00000000 esi=00249000 edi=77d06964
eip=77dadbcf esp=00cafa0c ebp=00cafa38 iopl=0         nv up ei pl zr na pe nc
cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00000246
ntdll!LdrInitShimEngineDynamic+0x6af:
77dadbcf cc              int     3
0:000> cdb: Reading initial command '!htrace -enable'
Handle tracing enabled.
Handle tracing information snapshot successfully taken.
0:000>

По сути, я пытаюсь выяснить, откуда pscp.exe (puTTY scp) загружает сеанс в Windows, в данном случае - ответ на этот вопрос не поможет, я хочу знать, как я могу отслеживать дескрипторы, насколько я понимаю, cdb позволяет htrace после завершения программы или мне нужно что-то набрать для запуска команды (не уверен), я даже пытался создать новый процесс с опциями без использования отладчика, по-прежнему загружаются только DLL, ничего больше.

Я попробовал logger.exe <command> и logger.exe -o <command> как stackoverflow говорит, что он наиболее близок к strace , в нем перечислены библиотеки DLL, как и в cdb , и ничего более. В windbg я вижу 8 файловых дескрипторов, однако информации о путях к файлам нет ...

Извините, я парень из Linux, так что испорченный, strace без вариантов.

Я прочитал:

https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/-handle https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/cdb-command- Параметры строки https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/debugging-a-user-mode-process-using-cdb https://docs.microsoft.com/en- us/windows-hardware/drivers/debugger/-create - create-process- (чтобы попытаться запустить <command> после загрузки отладчика)... и еще несколько ...

1 ответ1

1

В настоящее время вы используете настоящие инструменты отладки, которые могут быть довольно сложными для понимания, но в конечном итоге предоставляют много деталей. С вашей целью это может быть возможность использовать более простой инструмент для получения необходимой информации.

Для Windows существует довольно много инструментов, известных как « набор sysinternals », которые могут помочь вам, не требуя понимания всех результатов отладки, которые вы получаете с фактическими инструментами отладки.

В частности, дескриптор инструмента должен помочь вам выяснить, что использует открытый в данный момент файл. В то время как монитор процесса покажет вам прямую трансляцию множества действий, выполняемых в настоящее время программами. В основном сосредоточены на реестре и файловых операциях.

Чтобы выяснить, откуда программа получает информацию, вы можете попробовать использовать монитор процессов и настроить его так, чтобы он отображал только действия определенной программы. Сам инструмент имеет параметры фильтрации для различных типов действий, а также для свойств этих действий.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .