IDA-RE-things / Far2-plugins-andrew-grechkin

Automatically exported from code.google.com/p/andrew-grechkin
3 stars 0 forks source link

FileVer 1.0.10 при запуске под XP SP3 пытается лезть в чужую память и падает с кодом NMI 0x00000005 #19

Closed GoogleCodeExporter closed 9 years ago

GoogleCodeExporter commented 9 years ago
Ошибка воспроизводится только под WinXP - 
плагин FileVer для Far 3 х86 при старте обращается 
в недопустимую область памяти что вызывает 
срабатывание схем контроля с кодом 
исключения 0х00000005 /нарушение защиты 
памяти/? f под семёркой всё нормально. 
Смотрел и на 2593 и на 2596 (последний на момент 
тестирования, собран из SVN r7844), после ошибки 
плагин нормально выгружается. Я проверял 
ошибку как на тестовой куче, так и на чистом 
наборе - Far + стандартный комплект плагинов 
из официальной поставки. На обоих наборах 
воспроизвелось. Дамп сделал, но он оказался 
бестолковым - "Код исключения не найден". 
Потому могу приложить что есть - скриншоты 
ошибки, стек вызовов PH:

99812, , , advapi32.dll!WmiFreeBuffer+0xa7, Normal
99768, , , Far.exe+0x19deff, Normal
99848, , , Far.exe+0x19fd6a, Normal

TID=99812:

0, ntkrnlpa.exe!KiDeliverApc+0xb3
1, ntkrnlpa.exe!ZwYieldExecution+0x257a
2, ntkrnlpa.exe!NtWaitForSingleObject+0x9a
3, ntkrnlpa.exe!KeReleaseInStackQueuedSpinLockFromDpcLevel+0xb74
4, ntdll.dll!KiFastSystemCallRet
5, ntdll.dll!RtlEnterCriticalSection+0x46
6, kernel32.dll!ExitThread+0x3e
7, kernel32.dll!GetModuleFileNameA+0x1c0

TID=99768

0, ntkrnlpa.exe!KiDeliverApc+0xb3
1, ntkrnlpa.exe!ZwYieldExecution+0x257a
2, ntkrnlpa.exe!NtWaitForSingleObject+0x9a
3, ntkrnlpa.exe!KeReleaseInStackQueuedSpinLockFromDpcLevel+0xb74
4, ntdll.dll!KiFastSystemCallRet
5, ntdll.dll!RtlEnterCriticalSection+0x46
6, ole32.dll!CoInitializeEx+0x2b6
7, ole32.dll!CoUninitialize+0x52
8, ole32.dll!ReleaseStgMedium+0x736
9, ole32.dll!CoTaskMemAlloc+0xf9
10, ole32.dll!CoTaskMemAlloc+0xa1
11, ntdll.dll!LdrInitializeThunk+0x24
12, ntdll.dll!LdrShutdownThread+0xed
13, kernel32.dll!ExitThread+0x3e
14, Far.exe+0x19debd
15, Far.exe+0x19dedf
16, Far.exe+0x19df63
17, kernel32.dll!GetModuleFileNameA+0x1ba

TID=99848

0, ntkrnlpa.exe!KiDeliverApc+0xb3
1, ntkrnlpa.exe!ZwYieldExecution+0x257a
2, ntkrnlpa.exe!NtWaitForSingleObject+0x9a
3, ntkrnlpa.exe!KeReleaseInStackQueuedSpinLockFromDpcLevel+0xb74
4, ntdll.dll!KiFastSystemCallRet
5, ntdll.dll!RtlEnterCriticalSection+0x46
6, guard32.dll+0x1d1c5
7, kernel32.dll!FreeLibrary+0x19
8, user32.dll!FindWindowA+0x46
9, ntdll.dll!KiUserCallbackDispatcher+0x13
10, pshook.dll!Ordinal7+0x155d
11, user32.dll!MoveWindow+0xd4
12, user32.dll!MoveWindow+0x79
13, user32.dll!GetWindowTextLengthW+0x9a
14, ntdll.dll!KiUserCallbackDispatcher+0x13
15, user32.dll!PeekMessageA+0xfb
16, MSCTF.dll!TF_CreateCategoryMgr+0x62b6
17, MSCTF.dll!TF_CreateCategoryMgr+0x633f
18, MSCTF.dll!TF_DllDetachInOther+0xcde
19, MSCTF.dll!TF_UninitSystem+0x4de
20, user32.dll!UnhookWinEvent+0x77
21, user32.dll!MoveWindow+0x79
22, user32.dll!ScrollWindowEx+0xb1
23, ntdll.dll!KiUserCallbackDispatcher+0x13
24, hooxpot.dll!CallWndProc+0xa3
25, user32.dll!MoveWindow+0x79
26, user32.dll!ScrollWindowEx+0xb1
27, ntdll.dll!KiUserCallbackDispatcher+0x13
28, pshook.dll!Ordinal7+0x1601
29, user32.dll!MoveWindow+0xd4
30, user32.dll!MoveWindow+0x79
31, user32.dll!ScrollWindowEx+0xb1
32, ntdll.dll!KiUserCallbackDispatcher+0x13
33, ole32.dll!CoUninitialize+0x52
34, Far.exe+0x19e7f8
35, Far.exe+0x19e8bb
36, Far.exe+0x19fd25
37, kernel32.dll!RegisterWaitForInputIdle+0x49

Скриншот окна Process Hacker для удобства 
ориентации и ссылку на последние на данный 
момент готовые бинарники Process Hacker - 
http://narod.ru/disk/45723150001.215ec78cfe55f45139257d188d469cbf/Process_Hacker
_2.28_SVN-r4985-bin.7z.html . Там и установка и 
бинарники для х86 и х64 лежат. Только чтобы он 
свои плагины похватил их надо сложить в 
подкаталог ./plugins - рекурсию он не понимает.:)

Original issue reported on code.google.com by victorvg04 on 10 Apr 2012 at 7:14

Attachments:

GoogleCodeExporter commented 9 years ago
[deleted comment]
GoogleCodeExporter commented 9 years ago
не обещаю что быстро исправлю, надо ставить 
хр, что не очень хочется.
но посмотрю

Original comment by andrew.grechkin on 10 Apr 2012 at 7:24

GoogleCodeExporter commented 9 years ago
Ой, забыл - Артём в такой ситуации под AudioPlayer 
ставил заплату на WinAPI - именно там 
происходил сбой, и похоже тут то же самое 
происходит - сам Far инициировался нормально 
и стал плагины грузить из кэша, доходит до 
FileVer, а тот поскольку у него адресное 
пространство в этот момент соответствует 
Win6 модели естественно лезет за пределы 
допустимых в ХР адресов и как следствие 
вызывает NMI после чего его схемы контроля 
закрывают как сбойный. И как я понимаю, 
именно потому мы и не можем толком получить 
ни дамп, ни код ошибки - состояние процесса 
filever в этот момент не определено и это 
ставит систему в положение Буриданова 
осла. И она находит единственный выход - 
перевести ошибочных процесс в состояние 
паузы и обратится к оператору за 
инструкциями.

Original comment by victorvg04 on 10 Apr 2012 at 7:25

GoogleCodeExporter commented 9 years ago
Это понятно, я потому и понял что у тебя 
сейчас семёрка и что под её модель памяти 
он подстроен, что там он не валится.

Original comment by victorvg04 on 10 Apr 2012 at 7:27

GoogleCodeExporter commented 9 years ago
И кстати, Андрюх, а зачем её ставить? Можно 
же взять Live! CD. Если что рабочий образ InfroCD 
скину, нет проблемы. Только записать на CD-R 
700 Mb. Сам им пользуюсь коли что 
протестировать надо - там улучшенный 
вариант WinPE - более-менее всё запускается и 
USB устройства работают, плюс куча тестов 
для железяк. Не раз выручал при поиске где 
что сгорело.:)

Original comment by victorvg04 on 10 Apr 2012 at 7:31

GoogleCodeExporter commented 9 years ago
Есть у меня одна идея, попробую пока 
проверить. Выйдет - получим время на 
спокойное устранение ошибки, не выйдет - 
буду искать решение.

Original comment by victorvg04 on 11 Apr 2012 at 12:00

GoogleCodeExporter commented 9 years ago
[deleted comment]
GoogleCodeExporter commented 9 years ago
не понял что это?

Original comment by andrew.grechkin on 13 Apr 2012 at 8:50

GoogleCodeExporter commented 9 years ago
Костыль на NSIS написал, даст время. Потом 
вышвырну его:

  StrCpy $2 0
  StrCpy $3 0
  ReadRegStr $3 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion" "CurrentVersion"
  StrCpy $2 $3 1 1
  StrCpy $3 $3 1 -1
  StrCpy $2 $2$3
  StrCpy $3 0
  RMDir /r "$EXEDIR\plugins\filever"
  CreateDirectory  "$EXEDIR\plugins\filever"
  IntCmp $2 51 +1 +1 +4
  CopyFiles "$EXEDIR\tmp\5\filever\*.*" "$EXEDIR\plugins\filever" ; copy version 1.0.8.13 for Far2 + Far3Wrap loader
  Goto +2
  CopyFiles "$EXEDIR\tmp\6\filever\*.*" "$EXEDIR\plugins\filever" ; copy native version 1.0.10.15 for Far3
  RMDir /r "$EXEDIR\tmp"

P.S.

плагины специально не использовал - 
минимизировал размеры модуля до предела.

Original comment by victorvg04 on 13 Apr 2012 at 8:52

GoogleCodeExporter commented 9 years ago
Всё, можем смело этот тикет закрыть - 
проблема устранена. Проверено - под XP SP3 
ошибка более не воспроизводится.

Original comment by victorvg04 on 11 Jul 2012 at 9:22

GoogleCodeExporter commented 9 years ago

Original comment by andrew.grechkin on 11 Jul 2012 at 10:34