Как регистрировать все вызовы API в Windows так же, как Wine в Linux? - PullRequest
1 голос
/ 01 июля 2011

Я отлаживаю Windows-приложение в Linux, используя wine (Eudora), используя WINEDEBUGGER=+relay для создания (довольно массивного) журнала вызовов API.Теперь, когда я обнаружил, в чем проблема, я хочу запустить одно и то же приложение в собственных окнах (ну, фактически, VirtualBox), поэтому посмотрите, как оно себя ведет, и сравните различия (если есть).

Я знаюЕсть несколько инструментов Windows, которые могут отслеживать вызовы API, но мне нужен инструмент, который может генерировать тот же тип журнала, что и Wine, поэтому я могу использовать тот же рабочий процесс:

  • Настройка регистратора/ tracer для исключения заданного списка функций (как в KERNEL32.SetLastError; KERNEL32.GetLastError; KERNEL32.FlsGetValue; ntdll.RtlEnterCriticalSection; ntdll.RtlLeaveCriticalSection, что эквивалентно записи реестра Debug\RelayExclude в Wine. Это очень важно, так как разница между журналом 30 МБ и 1,3 ГБ one

  • Все другие вызовы должны отслеживаться независимо от библиотеки / модуля / dll / чего угодно. Они должны не быть отсортированы или отфильтрованы по модулю, посколькупорядок выполнения звонков для меня очень важен (поэтому я могу вернуться и не потеряться)

  • Запустить трассировщик так же просто, как tracer c:\ProgramFiles\Eudora\Eudora.exe 2> hugelogfile.txt

  • Он запускает Eudora, я выполняю свои действия и закрываюse Eudora.

  • Трассер останавливается, когда завершается Eudora.Журнал готов для меня поиграть.

Вот фрагмент журнала Wine, если он помогает (желательно подобный формат):

0009:Call advapi32.RegQueryValueW(80000000,0033b5dc L".txt",0033b9a0,0033bbac) ret=7e9a6c7a
0009:Ret  advapi32.RegQueryValueW() retval=00000000 ret=7e9a6c7a
0009:Call advapi32.RegOpenKeyExW(80000000,0033b9a0 L"txtfile",00000000,02000000,0033a528) ret=7e9a3b66
0009:Ret  advapi32.RegOpenKeyExW() retval=00000000 ret=7e9a3b66
0009:Call advapi32.RegCloseKey(000000d4) ret=7e9a3bbc
0009:Ret  advapi32.RegCloseKey() retval=00000000 ret=7e9a3bbc
0009:Call advapi32.RegQueryValueW(80000000,0033b9a0 L"txtfile\\shell\\\\command",0033ada0,0033a52c) ret=7e9a3c04
0009:Ret  advapi32.RegQueryValueW() retval=00000002 ret=7e9a3c04
0009:Call shlwapi.PathIsDirectoryW(0033e464 L"D:\\Arquivos\\Email\\attach\\carro.txt") ret=7e9a8a26
0009:Call KERNEL32.GetFileAttributesW(0033e464 L"D:\\Arquivos\\Email\\attach\\carro.txt") ret=7eb47738
0009:Ret  KERNEL32.GetFileAttributesW() retval=00000020 ret=7eb47738
0009:Ret  shlwapi.PathIsDirectoryW() retval=00000000 ret=7e9a8a26
0009:Call shlwapi.PathIsURLW(0033e464 L"D:\\Arquivos\\Email\\attach\\carro.txt") ret=7e9a8e68
0009:Ret  shlwapi.PathIsURLW() retval=00000000 ret=7e9a8e68
0009:Call user32.LoadStringW(7e950000,000000a4,0033abb0,00000800) ret=7e9a3ac2
0009:Ret  user32.LoadStringW() retval=00000041 ret=7e9a3ac2
0009:Call user32.MessageBoxW(000100c4,0033abb0 L"There is no Windows program configured to open this type of file.",00000000,00000010) ret=7e9a3a84

Можетпожалуйста, предложите мне бесплатное, легко загружаемое программное обеспечение, которое может сделать это, и, самое важное, точные инструкции о том, как добиться этого рабочего процесса, предлагаемое программное обеспечение ?

Спасибо!

Ответы [ 2 ]

1 голос
/ 06 декабря 2013

WinAPIOverride может выполнять такую ​​трассировку (и многое другое).

1 голос
/ 27 сентября 2011

В общем, ничто, кроме WINE, не может дать вам искомый след.Причина, по которой WINE может это сделать, заключается в том, что она не использует реальные библиотеки DLL и библиотеки Windows, а использует реверсивные библиотеки, в которые было добавлено LARGE количество дополнительных журналов.Вы всегда можете попробовать подключить удаленный отладчик к работающему процессу Eudora и посмотреть, получите ли вы что-нибудь, но это, вероятно, будет бесполезным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...