Программа крэшится до точки входа, на стадии загрузки
От: CaptainFlint Россия http://flint-inc.ru/
Дата: 26.02.18 13:28
Оценка:
Имеется крохотная программка на MSVC 2015 без CRT. Полный код с проектом лежит на гитхабе (компиляется только релизная версия, для дебажной требуется всякие опции поотключать, чтоб линковалось). Всё делается под Windows 7 x64.

Компилирую программу под 64 бита, запускаю — работает. Какое-то время пользуюсь. В один прекрасный момент очередной запуск внезапно обваливается со знаменитым 0xC0000005. И тут начинается самое интересное: с этого момента все последующие запуски будут выдавать этот 0xC0000005. Не помогает даже перезагрузка системы. Стоит лишь переименовать файл, или как-то его модифицировать (вплоть до правки одного байта хекс-редактором, скажем, инкремент таймштампа в PE-заголовке), или даже просто сменить дату/время модификации, он магическим образом снова начинает запускаться и работать. Потом в какой-то момент ему надоедает, он выкидывает очередной 0xC0000005, после которого см. пункт 1.

Если же я пытаюсь отладить и понять, откуда вообще берётся исключение, отладчик швыряет меня в какие-то дебри системных библиотек, в которых я ни бум-бум. Насколько я смог понять, исключение возникает ещё ДО того, как управление передаётся хотя бы первому байту моего кода. Во всяком случае, моих адресов в стеке нет, а бряки, поставленные на начало wWinMainCRTStartup не срабатывают.

Вот как выглядит ошибка:

Unhandled exception at 0x000000013F4B1000 in hideconsole_hdls_nocrt.exe: 0xC0000005: Access violation executing location 0x000000013F4B1000


А это — стек-трейс:

000000013f4b1000()
kernel32.dll!BaseThreadInitThunk()
ntdll.dll!RtlUserThreadStart()


Асмовый код в точке падения:
BaseThreadInitThunk:
0000000076E559C0 sub  rsp,28h  
0000000076E559C4 test ecx,ecx  
0000000076E559C6 jne  BaseThreadInitThunk+16h (076E559D6h)  
0000000076E559C8 mov  rcx,r8  
0000000076E559CB call rdx

Падает, собственно, CALL. rdx тут равен вот этому самому 0x000000013F4B1000, а по этому адресу светятся одни вопросики. Видимо, несуществующая страница, отсюда и access denied. Но как он пришёл к такому состоянию, я не могу понять, не хватает опыта низкоуровневой отладки.

Когда я ради эксперимента переделал проект на CRT-шный, проблемы прекратились, то есть обходной путь найден. Но мне хочется разобраться:
1) Что это за падение? Чем оно может быть вызвано и как его избежать? И почему оно работает-работает, а потом вдруг решает, что с него хватит?
2) Каким-таким волшебным образом система запоминает падучесть программы? Я подозреваю сбой в каком-нибудь prefetch-е, но не знаю, как проверить. Возобновление работы после "обновления" файла явно намекает на какие-то технологии кэширования. Однако в каталоге c:\Windows\Prefetch\ нет ни одного файла с именем, начинающемся на имя моего исполняемого файла.
Почему же, ё-моё, ты нигде не пишешь «ё»?
Re: Программа крэшится до точки входа, на стадии загрузки
От: enigmas Ниоткуда  
Дата: 26.02.18 13:34
Оценка:
Здравствуйте, CaptainFlint, Вы писали:

CF>Когда я ради эксперимента переделал проект на CRT-шный, проблемы прекратились, то есть обходной путь найден. Но мне хочется разобраться:

CF>1) Что это за падение? Чем оно может быть вызвано и как его избежать? И почему оно работает-работает, а потом вдруг решает, что с него хватит?
CF>2) Каким-таким волшебным образом система запоминает падучесть программы? Я подозреваю сбой в каком-нибудь prefetch-е, но не знаю, как проверить. Возобновление работы после "обновления" файла явно намекает на какие-то технологии кэширования. Однако в каталоге c:\Windows\Prefetch\ нет ни одного файла с именем, начинающемся на имя моего исполняемого файла.

Варианты:
1. Что то в TLS Callback. Посмотрите, есть ли колбеки в файле, если есть, удалите, чтобы исключить их влияние.
2. Если TLS Callback нет, или после их удаления все равно падает, возможно, кто-то инжектится в процесс (например, тот же Windows Defender или другой антивирус). Попробуйте антивирус отключить, полностью.
The Enigma Protector — software protection system
http://enigmaprotector.com/
Re[2]: Программа крэшится до точки входа, на стадии загрузки
От: CaptainFlint Россия http://flint-inc.ru/
Дата: 26.02.18 14:56
Оценка:
Здравствуйте, enigmas, Вы писали:

E>1. Что то в TLS Callback. Посмотрите, есть ли колбеки в файле, если есть, удалите, чтобы исключить их влияние.


Как это посмотреть? TLS Directory в PE-заголовке пустая, это оно?
Сам я точно никаких коллбеков не делал, весь проект — это тупой CreateProcess с ожиданием завершения. Код на полстранички. В проекте тоже ничего необычного не выставлял. По-моему, только entry point (иначе без CRT и не собрать).

E>2. Если TLS Callback нет, или после их удаления все равно падает, возможно, кто-то инжектится в процесс (например, тот же Windows Defender или другой антивирус). Попробуйте антивирус отключить, полностью.


Ок, попробую. Сейчас, после экспериментов оно пока работает, а принудительно вызывать этот сбой не получается.
Почему же, ё-моё, ты нигде не пишешь «ё»?
Re: Программа крэшится до точки входа, на стадии загрузки
От: okman Беларусь https://searchinform.ru/
Дата: 26.02.18 15:25
Оценка:
Здравствуйте, CaptainFlint.

Судя по содержимому kernel32!BaseThreadInitThunk в Windows 7, call rdx — это прыжок на
точку входа в стартовую функцию потока, т.е. это обычно или threadstartex, или main/WinMain.
Похоже, что или какой-то чужой поток вклинился в работу exe, или кто-то нечаянно подпортил
содержимое регистров при старте процесса (такое в теории может быть при установленных
антивирусах, фаерволах, DLP и т.п. программах).

Можно еще открыть крэш-дамп в WinDBG и выполнить такую команду:

dps @rsp L300
(просмотр "сырого" стека)
или
dps начало конец
(начало и конец стека вытаскиваются командой !teb, см. поля StackBase и StackLimit).

Ну а дальше в стеке попытаться найти "виновника" проблемы, т.е. какой-то
сторонний модуль или функцию.
Re[2]: Программа крэшится до точки входа, на стадии загрузки
От: CaptainFlint Россия http://flint-inc.ru/
Дата: 26.02.18 22:41
Оценка:
Здравствуйте, okman, Вы писали:

O>Судя по содержимому kernel32!BaseThreadInitThunk в Windows 7, call rdx — это прыжок на

O>точку входа в стартовую функцию потока, т.е. это обычно или threadstartex, или main/WinMain.
O>Похоже, что или какой-то чужой поток вклинился в работу exe, или кто-то нечаянно подпортил
O>содержимое регистров при старте процесса (такое в теории может быть при установленных
O>антивирусах, фаерволах, DLP и т.п. программах).

Поймал падение, отключил антивирь, падение никуда не делось.
Загрузил файл в WinDbg, стартанул до крэша. В списке загруженных модулей перечислены только Майкрософтовские.
  Список
USER32    00000000`77870000    00000000`7796a000    Thu Nov 10 19:33:04 2016 (5824a140)    00100335        C:\Windows\system32\USER32.dll
kernel32    00000000`77970000    00000000`77a8f000    Wed Sep 13 18:30:49 2017 (59b94f29)    00120369    PDB    c:\symbols\kernel32.pdb\52715E2CB2604B7C837FA92AE3E5021A2\kernel32.pdb
ntdll    00000000`77a90000    00000000`77c3a000    Wed Sep 13 18:29:40 2017 (59b94ee4)    001b3ef7    PDB    c:\symbols\ntdll.pdb\28027EB4F08E4E5589A0FA880169FA0C2\ntdll.pdb
image00000001_3f050000    00000001`3f050000    00000001`3f055000    Tue Feb 20 01:12:30 2018 (5a8b4bce)    00000000        image00000001`3f050000
KERNELBASE    000007fe`fd7a0000    000007fe`fd80a000    Wed Sep 13 18:30:50 2017 (59b94f2a)    0006d049        C:\Windows\system32\KERNELBASE.dll
msvcrt    000007fe`fdb40000    000007fe`fdbdf000    Fri Dec 16 11:37:19 2011 (4eeb033f)    000a708a        C:\Windows\system32\msvcrt.dll
USP10    000007fe`fdf90000    000007fe`fe05b000    Wed Aug 16 18:29:58 2017 (599464f6)    000c6d6d        C:\Windows\system32\USP10.dll
IMM32    000007fe`fe060000    000007fe`fe08e000    Tue Jul 14 04:28:32 2009 (4a5bdf40)    0003550d        C:\Windows\system32\IMM32.DLL
GDI32    000007fe`fe090000    000007fe`fe0f7000    Fri Sep 08 18:30:48 2017 (59b2b7a8)    00065bd8        C:\Windows\system32\GDI32.dll
LPK    000007fe`fe100000    000007fe`fe10e000    Thu Oct 12 03:56:05 2017 (59debda5)    00013228        C:\Windows\system32\LPK.dll
MSCTF    000007fe`fe680000    000007fe`fe789000    Wed Sep 13 18:29:09 2017 (59b94ec5)    0010978f        C:\Windows\system32\MSCTF.dll

O>Можно еще открыть крэш-дамп в WinDBG и выполнить такую команду:

O>dps @rsp L300

O>(просмотр "сырого" стека)
O>или
O>dps начало конец
O>(начало и конец стека вытаскиваются командой !teb, см. поля StackBase и StackLimit).

O>Ну а дальше в стеке попытаться найти "виновника" проблемы, т.е. какой-то

O>сторонний модуль или функцию.

Увы, виновников не видать. Стек начиная с Base (00140000) забит нулями вверх вплоть до RtlUserThreadStart:

0:000> dps @rsp L300
00000000`0013fe08  00000000`779859cd kernel32!BaseThreadInitThunk+0xd
00000000`0013fe10  00000000`00000000
00000000`0013fe18  00000000`00000000
00000000`0013fe20  00000000`00000000
00000000`0013fe28  00000000`00000000
00000000`0013fe30  00000000`00000000
00000000`0013fe38  00000000`77aba561 ntdll!RtlUserThreadStart+0x1d
00000000`0013fe40  00000000`00000000
<много нулей скиппед>
0:000> !teb
TEB at 000007fffffde000
    ExceptionList:        0000000000000000
    StackBase:            0000000000140000
    StackLimit:           000000000013c000
    SubSystemTib:         0000000000000000
    FiberData:            0000000000001e00
    ArbitraryUserPointer: 0000000000000000
    Self:                 000007fffffde000
    EnvironmentPointer:   0000000000000000
    ClientId:             0000000000003c98 . 0000000000007df0
    RpcHandle:            0000000000000000
    Tls Storage:          000007fffffde058
    PEB Address:          000007fffffd7000
    LastErrorValue:       14007
    LastStatusValue:      c0150008
    Count Owned Locks:    0
    HardErrorMode:        0
Почему же, ё-моё, ты нигде не пишешь «ё»?
Re[3]: Программа крэшится до точки входа, на стадии загрузки
От: CaptainFlint Россия http://flint-inc.ru/
Дата: 26.02.18 23:55
Оценка:
Немножко дополнительной инфы. Я скопировал фейлящийся файл под новым именем (чтобы он перестал фейлиться), тоже загнал в дебаггер и сравнил поведение. В самом начале, в ntdll:RtlUserThreadStart адрес моего кода должен храниться в RCX (потом копируется в RDX). Собственно, при нормальном запуске там правильный адрес (== адресу начала загруженного EXE-модуля + смещение 0x1000), при сбойном — неправильный. Но что любопытно, когда я инициализирую запуск (выставил в Иде останов на самой ранней стадии), RIP указывает на самую первую инструкцию RtlUserThreadStart, и RCX отображается такой, каким должен быть, а в списке загруженных модулей присутствует только мой одинокий EXE. Стоит мне сделать один шаг (инструкция — sub rsp, 48h), как список модулей дополняется стандартными DLL, а RCX неожиданно меняется на фигню (и подсвечивается как модифицированный). В нормальном сценарии запуска с модулями происходит то же самое, но RCX на первом шаге не меняется.

Не знаю, какие можно из этого сделать выводы, но на всякий случай решил написать. Может, конечно, это неточность отладчика (скажем, он уверен, что RCX обязан указывать на начало кода, так что вместо чтения реального значения подставляет туда нужный адрес, а потом опа, оказывается, там с самого начала было что-то другое).
Почему же, ё-моё, ты нигде не пишешь «ё»?
Re[3]: Программа крэшится до точки входа, на стадии загрузки
От: okman Беларусь https://searchinform.ru/
Дата: 27.02.18 10:13
Оценка: 9 (2)
Здравствуйте, CaptainFlint, Вы писали:

CF>Поймал падение, отключил антивирь, падение никуда не делось.

CF>...

Можно попробовать копнуть глубже, если есть желание...

Случись у меня такая проблема, я бы попробовал запустить "сбойную" версию приложения из WinDBG и
поставить точку останова на ntdll!NtTestAlert. А затем, когда она сработает, поискал бы в стеке структуру
CONTEXT — она лежит обычно на самом дне стека и в ней хранятся значения регистров для прыжка на
точку входа, т.е. для RtlUserThreadStart и main/WinMain. Если на входе в NtTestAlert внутри структуры
CONTEXT значение RCX уже указывает не на main/WinMain, либо Rip указывает на что-то другое вместо
RtlUserThreadStart, значит, с вероятностью 99.9%, в запуск процесса вмешиваются "третьи силы".

Если RCX меняется уже после NtTestAlert, т.е. например между NtTestAlert и входом в RtlUserThreadStart, то
это значит, что значение меняется какой-то асинхронной процедурой (APC), т.к. они как раз и доставляются в
этот момент. И этим механизмом частенько пользуются антивирусы и тому подобный софт для внедрения в процессы
своего кода. Иногда и в "отключенном" состоянии тоже.
Re[4]: Программа крэшится до точки входа, на стадии загрузки
От: CaptainFlint Россия http://flint-inc.ru/
Дата: 27.02.18 12:34
Оценка:
Здравствуйте, okman, Вы писали:

O>Можно попробовать копнуть глубже, если есть желание...


Желание есть, но пока не хватает понимания…

O>Случись у меня такая проблема, я бы попробовал запустить "сбойную" версию приложения из WinDBG и

O>поставить точку останова на ntdll!NtTestAlert. А затем, когда она сработает, поискал бы в стеке структуру
O>CONTEXT — она лежит обычно на самом дне стека и в ней хранятся значения регистров для прыжка на
O>точку входа, т.е. для RtlUserThreadStart и main/WinMain. <…>

Не могу сообразить, как найти начало структуры CONTEXT. "На самом дне стека" — это где? Прямо от Stack Base? На момент ntdll!NtTestAlert стек выглядит так:
  Скрытый текст
0:000> !teb
TEB at 000007fffffdd000
    ExceptionList:        0000000000000000
    StackBase:            00000000001b0000
    StackLimit:           00000000001ac000
    SubSystemTib:         0000000000000000
    FiberData:            0000000000001e00
    ArbitraryUserPointer: 0000000000000000
    Self:                 000007fffffdd000
    EnvironmentPointer:   0000000000000000
    ClientId:             0000000000002200 . 0000000000003104
    RpcHandle:            0000000000000000
    Tls Storage:          000007fffffdd058
    PEB Address:          000007fffffdf000
    LastErrorValue:       14007
    LastStatusValue:      c0150008
    Count Owned Locks:    0
    HardErrorMode:        0

0:000> dps @rsp 00000000001b0000
00000000`001af418  00000000`76f8a474 ntdll!LdrpInitialize+0xa4
00000000`001af420  00000000`00000000
00000000`001af428  00000000`76f9f3b1 ntdll!InitSecurityCookie+0x1d
00000000`001af430  00000000`001af4e0
00000000`001af438  00000000`00000000
00000000`001af440  00000000`00000000
00000000`001af448  00000000`00000000
00000000`001af450  00000000`00000000
00000000`001af458  00000000`76ffc125 ntdll! ?? ::FNODOBFM::`string'+0x22c35
00000000`001af460  00000000`00000000
00000000`001af468  00000000`00000000
00000000`001af470  00000000`00000000
00000000`001af478  00000000`00000000
00000000`001af480  00000000`00000000
00000000`001af488  00000000`76f8a36e ntdll!LdrInitializeThunk+0xe
00000000`001af490  00000000`001af4e0
00000000`001af498  00000000`00000000
00000000`001af4a0  000007ff`fffdf000
00000000`001af4a8  00000000`00000000
00000000`001af4b0  00000000`00000000
00000000`001af4b8  00000000`00000000
00000000`001af4c0  00000000`00000000
00000000`001af4c8  00000000`00000000
00000000`001af4d0  00000000`00000000
00000000`001af4d8  00000000`00000000
00000000`001af4e0  00000000`00000000
00000000`001af4e8  00000000`00000000
00000000`001af4f0  00000000`00000000
00000000`001af4f8  00000000`00000000
00000000`001af500  00000000`00000000
00000000`001af508  00000000`00000000
00000000`001af510  00001f80`0010001b
00000000`001af518  00000000`00000033
00000000`001af520  00000200`002b0000
00000000`001af528  00000000`00000000
00000000`001af530  00000000`00000000
00000000`001af538  00000000`00000000
00000000`001af540  00000000`00000000
00000000`001af548  00000000`00000000
00000000`001af550  00000000`00000000
00000000`001af558  00000000`00000000
00000000`001af560  00000001`3fb31000
00000000`001af568  000007ff`fffdf000
00000000`001af570  00000000`00000000
00000000`001af578  00000000`001af9b8
00000000`001af580  00000000`00000000
00000000`001af588  00000000`00000000
00000000`001af590  00000000`00000000
00000000`001af598  00000000`00000000
00000000`001af5a0  00000000`00000000
00000000`001af5a8  00000000`00000000
00000000`001af5b0  00000000`00000000
00000000`001af5b8  00000000`00000000
00000000`001af5c0  00000000`00000000
00000000`001af5c8  00000000`00000000
00000000`001af5d0  00000000`00000000
00000000`001af5d8  00000000`76f8a540 ntdll!RtlUserThreadStart
00000000`001af5e0  00000000`0000027f
00000000`001af5e8  00000000`00000000
00000000`001af5f0  00000000`00000000
00000000`001af5f8  0000ffff`00001f80
00000000`001af600  00000000`00000000
00000000`001af608  00000000`00000000
00000000`001af610  00000000`00000000
00000000`001af618  00000000`00000000
00000000`001af620  00000000`00000000
00000000`001af628  00000000`00000000
00000000`001af630  00000000`00000000
00000000`001af638  00000000`00000000
00000000`001af640  00000000`00000000
00000000`001af648  00000000`00000000
00000000`001af650  00000000`00000000
00000000`001af658  00000000`00000000
00000000`001af660  00000000`00000000
00000000`001af668  00000000`00000000
00000000`001af670  00000000`00000000
00000000`001af678  00000000`00000000
00000000`001af680  00000000`00000000
00000000`001af688  00000000`00000000
00000000`001af690  00000000`00000000
00000000`001af698  00000000`00000000
00000000`001af6a0  00000000`00000000
00000000`001af6a8  00000000`00000000
00000000`001af6b0  00000000`00000000
00000000`001af6b8  00000000`00000000
00000000`001af6c0  00000000`00000000
00000000`001af6c8  00000000`00000000
00000000`001af6d0  00000000`00000000
00000000`001af6d8  00000000`00000000
00000000`001af6e0  00000000`00000000
00000000`001af6e8  00000000`00000000
00000000`001af6f0  00000000`00000000
00000000`001af6f8  00000000`00000000
00000000`001af700  00000000`00000000
00000000`001af708  00000000`00000000
00000000`001af710  00000000`00000000
00000000`001af718  00000000`00000000
00000000`001af720  00000000`00000000
00000000`001af728  00000000`00000000
00000000`001af730  00000000`00000000
00000000`001af738  00000000`00000000
00000000`001af740  00000000`00000000
00000000`001af748  00000000`00000000
00000000`001af750  00000000`00000000
00000000`001af758  00000000`00000000
00000000`001af760  00000000`00000000
00000000`001af768  00000000`00000000
00000000`001af770  00000000`00000000
00000000`001af778  00000000`00000000
00000000`001af780  00000000`00000000
00000000`001af788  00000000`00000000
00000000`001af790  00000000`00000000
00000000`001af798  00000000`00000000
00000000`001af7a0  00000000`00000000
00000000`001af7a8  00000000`00000000
00000000`001af7b0  00000000`00000000
00000000`001af7b8  00000000`00000000
00000000`001af7c0  00000000`00000000
00000000`001af7c8  00000000`00000000
00000000`001af7d0  00000000`00000000
00000000`001af7d8  00000000`00000000
00000000`001af7e0  00000000`00000000
00000000`001af7e8  00000000`00000000
00000000`001af7f0  00000000`00000000
00000000`001af7f8  00000000`00000000
00000000`001af800  00000000`00000000
00000000`001af808  00000000`00000000
00000000`001af810  00000000`00000000
00000000`001af818  00000000`00000000
00000000`001af820  00000000`00000000
00000000`001af828  00000000`00000000
00000000`001af830  00000000`00000000
00000000`001af838  00000000`00000000
00000000`001af840  00000000`00000000
00000000`001af848  00000000`00000000
00000000`001af850  00000000`00000000
00000000`001af858  00000000`00000000
00000000`001af860  00000000`00000000
00000000`001af868  00000000`00000000
00000000`001af870  00000000`00000000
00000000`001af878  00000000`00000000
00000000`001af880  00000000`00000000
00000000`001af888  00000000`00000000
00000000`001af890  00000000`00000000
00000000`001af898  00000000`00000000
00000000`001af8a0  00000000`00000000
00000000`001af8a8  00000000`00000000
00000000`001af8b0  00000000`00000000
00000000`001af8b8  00000000`00000000
00000000`001af8c0  00000000`00000000
00000000`001af8c8  00000000`00000000
00000000`001af8d0  00000000`00000000
00000000`001af8d8  00000000`00000000
00000000`001af8e0  00000000`00000000
00000000`001af8e8  00000000`00000000
00000000`001af8f0  00000000`00000000
00000000`001af8f8  00000000`00000000
00000000`001af900  00000000`00000000
00000000`001af908  00000000`00000000
00000000`001af910  00000000`00000000
00000000`001af918  00000000`00000000
00000000`001af920  00000000`00000000
00000000`001af928  00000000`00000000
00000000`001af930  00000000`00000000
00000000`001af938  00000000`00000000
00000000`001af940  00000000`00000000
00000000`001af948  00000000`00000000
00000000`001af950  00000000`00000000
00000000`001af958  00000000`00000000
00000000`001af960  00000000`00000000
00000000`001af968  00000000`00000000
00000000`001af970  00000000`00000000
00000000`001af978  00000000`00000000
00000000`001af980  00000000`00000000
00000000`001af988  00000000`00000000
00000000`001af990  00000000`00000000
00000000`001af998  00000000`00000000
00000000`001af9a0  00000000`00000000
00000000`001af9a8  00000000`00000000
00000000`001af9b0  00000000`00000000
00000000`001af9b8  00000000`00000000
00000000`001af9c0  00000000`00000000
00000000`001af9c8  00000000`00000000
00000000`001af9d0  00000000`00000000
00000000`001af9d8  00000000`00000000
00000000`001af9e0  00000000`00000000
00000000`001af9e8  00000000`00000000
00000000`001af9f0  00000000`00000000
00000000`001af9f8  00000000`00000000
00000000`001afa00  00000000`00000000
00000000`001afa08  00000000`00000000
00000000`001afa10  00000000`00000000
00000000`001afa18  00000000`00000000
00000000`001afa20  00000000`00000000
00000000`001afa28  00000000`00000000
00000000`001afa30  00000000`00000000
00000000`001afa38  00000000`00000000
00000000`001afa40  00000000`00000000
00000000`001afa48  00000000`00000000
00000000`001afa50  00000000`00000000
00000000`001afa58  00000000`00000000
00000000`001afa60  00000000`00000000
00000000`001afa68  00000000`00000000
00000000`001afa70  00000000`00000000
00000000`001afa78  00000000`00000000
00000000`001afa80  00000000`00000000
00000000`001afa88  00000000`00000000
00000000`001afa90  00000000`00000000
00000000`001afa98  00000000`00000000
00000000`001afaa0  00000000`00000000
00000000`001afaa8  00000000`00000000
00000000`001afab0  00000000`00000000
00000000`001afab8  00000000`00000000
00000000`001afac0  00000000`00000000
00000000`001afac8  00000000`00000000
00000000`001afad0  00000000`00000000
00000000`001afad8  00000000`00000000
00000000`001afae0  00000000`00000000
00000000`001afae8  00000000`00000000
00000000`001afaf0  00000000`00000000
00000000`001afaf8  00000000`00000000
00000000`001afb00  00000000`00000000
00000000`001afb08  00000000`00000000
00000000`001afb10  00000000`00000000
00000000`001afb18  00000000`00000000
00000000`001afb20  00000000`00000000
00000000`001afb28  00000000`00000000
00000000`001afb30  00000000`00000000
00000000`001afb38  00000000`00000000
00000000`001afb40  00000000`00000000
00000000`001afb48  00000000`00000000
00000000`001afb50  00000000`00000000
00000000`001afb58  00000000`00000000
00000000`001afb60  00000000`00000000
00000000`001afb68  00000000`00000000
00000000`001afb70  00000000`00000000
00000000`001afb78  00000000`00000000
00000000`001afb80  00000000`00000000
00000000`001afb88  00000000`00000000
00000000`001afb90  00000000`00000000
00000000`001afb98  00000000`00000000
00000000`001afba0  00000000`00000000
00000000`001afba8  00000000`00000000
00000000`001afbb0  00000000`00000000
00000000`001afbb8  00000000`00000000
00000000`001afbc0  00000000`00000000
00000000`001afbc8  00000000`00000000
00000000`001afbd0  00000000`00000000
00000000`001afbd8  00000000`00000000
00000000`001afbe0  00000000`00000000
00000000`001afbe8  00000000`00000000
00000000`001afbf0  00000000`00000000
00000000`001afbf8  00000000`00000000
00000000`001afc00  00000000`00000000
00000000`001afc08  00000000`00000000
00000000`001afc10  00000000`00000000
00000000`001afc18  00000000`00000000
00000000`001afc20  00000000`00000000
00000000`001afc28  00000000`00000000
00000000`001afc30  00000000`00000000
00000000`001afc38  00000000`00000000
00000000`001afc40  00000000`00000000
00000000`001afc48  00000000`00000000
00000000`001afc50  00000000`00000000
00000000`001afc58  00000000`00000000
00000000`001afc60  00000000`00000000
00000000`001afc68  00000000`00000000
00000000`001afc70  00000000`00000000
00000000`001afc78  00000000`00000000
00000000`001afc80  00000000`00000000
00000000`001afc88  00000000`00000000
00000000`001afc90  00000000`00000000
00000000`001afc98  00000000`00000000
00000000`001afca0  00000000`00000000
00000000`001afca8  00000000`00000000
00000000`001afcb0  00000000`00000000
00000000`001afcb8  00000000`00000000
00000000`001afcc0  00000000`00000000
00000000`001afcc8  00000000`00000000
00000000`001afcd0  00000000`00000000
00000000`001afcd8  00000000`00000000
00000000`001afce0  00000000`00000000
00000000`001afce8  00000000`00000000
00000000`001afcf0  00000000`00000000
00000000`001afcf8  00000000`00000000
00000000`001afd00  00000000`00000000
00000000`001afd08  00000000`00000000
00000000`001afd10  00000000`00000000
00000000`001afd18  00000000`00000000
00000000`001afd20  00000000`00000000
00000000`001afd28  00000000`00000000
00000000`001afd30  00000000`00000000
00000000`001afd38  00000000`00000000
00000000`001afd40  00000000`00000000
00000000`001afd48  00000000`00000000
00000000`001afd50  00000000`00000000
00000000`001afd58  00000000`00000000
00000000`001afd60  00000000`00000000
00000000`001afd68  00000000`00000000
00000000`001afd70  00000000`00000000
00000000`001afd78  00000000`00000000
00000000`001afd80  00000000`00000000
00000000`001afd88  00000000`00000000
00000000`001afd90  00000000`00000000
00000000`001afd98  00000000`00000000
00000000`001afda0  00000000`00000000
00000000`001afda8  00000000`00000000
00000000`001afdb0  00000000`00000000
00000000`001afdb8  00000000`00000000
00000000`001afdc0  00000000`00000000
00000000`001afdc8  00000000`00000000
00000000`001afdd0  00000000`00000000
00000000`001afdd8  00000000`00000000
00000000`001afde0  00000000`00000000
00000000`001afde8  00000000`00000000
00000000`001afdf0  00000000`00000000
00000000`001afdf8  00000000`00000000
00000000`001afe00  00000000`00000000
00000000`001afe08  00000000`00000000
00000000`001afe10  00000000`00000000
00000000`001afe18  00000000`00000000
00000000`001afe20  00000000`00000000
00000000`001afe28  00000000`00000000
00000000`001afe30  00000000`00000000
00000000`001afe38  00000000`00000000
00000000`001afe40  00000000`00000000
00000000`001afe48  00000000`00000000
00000000`001afe50  00000000`00000000
00000000`001afe58  00000000`00000000
00000000`001afe60  00000000`00000000
00000000`001afe68  00000000`00000000
00000000`001afe70  00000000`00000000
00000000`001afe78  00000000`00000000
00000000`001afe80  00000000`00000000
00000000`001afe88  00000000`00000000
00000000`001afe90  00000000`00000000
00000000`001afe98  00000000`00000000
00000000`001afea0  00000000`00000000
00000000`001afea8  00000000`00000000
00000000`001afeb0  00000000`00000000
00000000`001afeb8  00000000`00000000
00000000`001afec0  00000000`00000000
00000000`001afec8  00000000`00000000
00000000`001afed0  00000000`00000000
00000000`001afed8  00000000`00000000
00000000`001afee0  00000000`00000000
00000000`001afee8  00000000`00000000
00000000`001afef0  00000000`00000000
00000000`001afef8  00000000`00000000
00000000`001aff00  00000000`00000000
00000000`001aff08  00000000`00000000
00000000`001aff10  00000000`00000000
00000000`001aff18  00000000`00000000
00000000`001aff20  00000000`00000000
00000000`001aff28  00000000`00000000
00000000`001aff30  00000000`00000000
00000000`001aff38  00000000`00000000
00000000`001aff40  00000000`00000000
00000000`001aff48  00000000`00000000
00000000`001aff50  00000000`00000000
00000000`001aff58  00000000`00000000
00000000`001aff60  00000000`00000000
00000000`001aff68  00000000`00000000
00000000`001aff70  00000000`00000000
00000000`001aff78  00000000`00000000
00000000`001aff80  00000000`00000000
00000000`001aff88  00000000`00000000
00000000`001aff90  00000000`00000000
00000000`001aff98  00000000`00000000
00000000`001affa0  00000000`00000000
00000000`001affa8  00000000`00000000
00000000`001affb0  00000000`00000000
00000000`001affb8  00000000`00000000
00000000`001affc0  00000000`00000000
00000000`001affc8  00000000`00000000
00000000`001affd0  00000000`00000000
00000000`001affd8  00000000`00000000
00000000`001affe0  00000000`00000000
00000000`001affe8  00000000`00000000
00000000`001afff0  00000000`00000000
00000000`001afff8  00000000`00000000
00000000`001b0000  00000000`00000020

Если верить winnt.h и команде "dt _CONTEXT", структура зело жирная из-за всяких XMM-регистров и занимает 0x4d0 байт. Такой шматок во всём стеке может поместиться лишь где-то в промежутке от StackBase (1b0000) до вызова ntdll!RtlUserThreadStart, но как видно из дампа, там практически одни только нули, лишь перед самым вызовом сидят два ненулевых значения, ни одно из которых на адрес точки входа и близко не походит (а в моём случае RCX всё-таки указывает куда-то поблизости от реальной точки, а не в открытый космос, не говоря уж о том, что RCX находится не у самого края структуры, а в серёдке).
Почему же, ё-моё, ты нигде не пишешь «ё»?
Отредактировано 27.02.2018 12:43 CaptainFlint . Предыдущая версия .
Re[5]: Программа крэшится до точки входа, на стадии загрузки
От: okman Беларусь https://searchinform.ru/
Дата: 27.02.18 13:05
Оценка: 6 (1)
Здравствуйте, CaptainFlint, Вы писали:

CF>Не могу сообразить, как найти начало структуры CONTEXT. "На самом дне стека" — это где? Прямо от Stack Base?


Да, не совсем точно выразился. Вот на примере notepad.exe:

Запускаю из WinDBG процесс C:\Windows\notepad.exe, отладчик останавливается в ntdll!LdrpDoDebuggerBreak,
ставлю точку останова:

bp ntdll!NtTestAlert

и возобновляю выполнение — g

отладчик останавливается:

Breakpoint 0 hit
ntdll!NtTestAlert:
00007ff8`97c33510 4c8bd1 mov r10,rcx

получаем полный стек текущего потока:

!teb

TEB at 000000b194fed000
ExceptionList: 0000000000000000
StackBase: 000000b194d20000
StackLimit: 000000b194d0f000

dp 000000b194d0f000 000000b194d20000

и далее, просматривая полученную "портянку" снизу-вверх, — а там пока одни нули, — ищем
значения 0010001b (ContextFlags), 33 и 2b (сегментные регистры в x64). В моем случае получилось вот что:

...
000000b1`94d1f300 00000000`00000000 00000000`00000000
000000b1`94d1f310 00000000`00000000 00000000`00000000
000000b1`94d1f320 00000000`00000000 00000000`00000000
000000b1`94d1f330 00000000`00000000 00000000`00000000
000000b1`94d1f340 00000000`00000000 00000000`00000000
000000b1`94d1f350 00001f80`0010001b 00000000`00000033
000000b1`94d1f360 00000200`002b0000 00000000`00000000
000000b1`94d1f370 00000000`00000000 00000000`00000000
000000b1`94d1f380 00000000`00000000 00000000`00000000
000000b1`94d1f390 00000000`00000000 00000000`00000000
000000b1`94d1f3a0 00007ff6`e26193e0 000000b1`94fec000
000000b1`94d1f3b0 00000000`00000000 000000b1`94d1f7f8
000000b1`94d1f3c0 00000000`00000000 00000000`00000000
000000b1`94d1f3d0 00000000`00000000 00000000`00000000
000000b1`94d1f3e0 00000000`00000000 00000000`00000000
...

Далее проверяем, что это структура CONTEXT. От поля со значением 0010001b нужно отмотать некоторое
количество байт назад (т.к. поле ContextFlags в структуре CONTEXT лежит не в самом начале).
Замечу, что на x64 структура CONTEXT всегда лежит на границе 16 байт:

dt nt!_CONTEXT 000000b1`94d1f320

Надо, чтобы получилось вот так:

...
+0x030 ContextFlags : 0x10001b
...

Остальные поля, т.е. SegCs, SegSs, Rcx, Rsp, Rip и т.д., тоже
должны иметь "осмысленные" значения:

+0x038 SegCs : 0x33
...
+0x042 SegSs : 0x2b

+0x080 Rcx : 0x00007ff6`e26193e0
+0x088 Rdx : 0x000000b1`94fec000
...
+0x098 Rsp : 0x000000b1`94d1f7f8
...
+0x0f8 Rip : 0x00007ff8`97bfef90

Здесь в SegCs и SegSs будут жестко прошитые константы — 33 и 2b,
в Rcx — адрес main/WinMain (проверить можно командой u адрес),
в Rip — адрес RtlUserThreadStart, а в Rdx — адрес PEB (проверить
можно командой !peb и сравнить).

Если там явный мусор — надо искать CONTEXT дальше (т.е. по тексту вверх).
Re: Программа крэшится до точки входа, на стадии загрузки
От: EreTIk EreTIk's Box
Дата: 27.02.18 13:25
Оценка:
Здравствуйте, CaptainFlint, Вы писали:

CF>Если же я пытаюсь отладить и понять, откуда вообще берётся исключение, отладчик швыряет меня в какие-то дебри системных библиотек, в которых я ни бум-бум. Насколько я смог понять, исключение возникает ещё ДО того, как управление передаётся хотя бы первому байту моего кода. Во всяком случае, моих адресов в стеке нет, а бряки, поставленные на начало wWinMainCRTStartup не срабатывают.


CF>Вот как выглядит ошибка:

CF>

CF>Unhandled exception at 0x000000013F4B1000 in hideconsole_hdls_nocrt.exe: 0xC0000005: Access violation executing location 0x000000013F4B1000


CF>А это — стек-трейс:

CF>

CF>000000013f4b1000()
CF>kernel32.dll!BaseThreadInitThunk()
CF>ntdll.dll!RtlUserThreadStart()


CF>Асмовый код в точке падения:

CF>
CF>BaseThreadInitThunk:
CF>0000000076E559C0 sub  rsp,28h  
CF>0000000076E559C4 test ecx,ecx  
CF>0000000076E559C6 jne  BaseThreadInitThunk+16h (076E559D6h)  
CF>0000000076E559C8 mov  rcx,r8  
CF>0000000076E559CB call rdx  
CF>

CF>Падает, собственно, CALL. rdx тут равен вот этому самому 0x000000013F4B1000, а по этому адресу светятся одни вопросики. Видимо, несуществующая страница, отсюда и access denied. Но как он пришёл к такому состоянию, я не могу понять, не хватает опыта низкоуровневой отладки.

На уровне предположения: внешний процесс создал нить с точкой входа в 0x000000013F4B1000, не рассчитав отсутствие в целевом процессе какой-то DLL. Надо при падении посмотреть является ли текущая нить главной нитью этого процесса, для WinDbg команда просмотра нитей с их стеками: ~*k

Если еще удастся поймать падение — сделайте полный дамп для анализа (из WinDbg: .dump /mfh /b dump.cab).
Re[6]: Программа крэшится до точки входа, на стадии загрузки
От: CaptainFlint Россия http://flint-inc.ru/
Дата: 27.02.18 18:02
Оценка:
Здравствуйте, okman, Вы писали:

O>Да, не совсем точно выразился. Вот на примере notepad.exe:


Благодарю, получилось. RCX в CONTEXT уже указывает на фигню.
  Дамп команд с выводом
0:000> !teb
TEB at 000007fffffdd000
    ExceptionList:        0000000000000000
    StackBase:            00000000001b0000
    StackLimit:           00000000001ac000
    SubSystemTib:         0000000000000000
    FiberData:            0000000000001e00
    ArbitraryUserPointer: 0000000000000000
    Self:                 000007fffffdd000
    EnvironmentPointer:   0000000000000000
    ClientId:             0000000000002200 . 0000000000003104
    RpcHandle:            0000000000000000
    Tls Storage:          000007fffffdd058
    PEB Address:          000007fffffdf000
    LastErrorValue:       14007
    LastStatusValue:      c0150008
    Count Owned Locks:    0
    HardErrorMode:        0
0:000> dp 00000000001ac000 00000000001b0000
00000000`001ac000  00000000`00000000 00000000`00000000
00000000`001ac010  00000000`00000000 00000000`00000000
00000000`001ac020  00000000`00000000 00000000`00000000
00000000`001ac030  00000000`00000000 00000000`00000000
00000000`001ac040  00000000`00000000 00000000`00000000
00000000`001ac050  00000000`00000000 00000000`00000000
00000000`001ac060  00000000`00000000 00000000`00000000
00000000`001ac070  00000000`00000000 00000000`00000000
00000000`001ac080  00000000`00000000 00000000`00000000
00000000`001ac090  00000000`00000000 00000000`00000000
00000000`001ac0a0  00000000`00000000 00000000`00000000
00000000`001ac0b0  00000000`00000000 00000000`00000000
00000000`001ac0c0  00000000`00000000 00000000`00000000
00000000`001ac0d0  00000000`00000000 00000000`00000000
00000000`001ac0e0  00000000`00000000 00000000`00000000
00000000`001ac0f0  00000000`00000000 00000000`00000000
00000000`001ac100  00000000`00000000 00000000`00000000
00000000`001ac110  00000000`00000000 00000000`00000000
00000000`001ac120  00000000`00000000 00000000`00000000
00000000`001ac130  00000000`00000000 00000000`00000000
00000000`001ac140  00000000`00000000 00000000`00000000
00000000`001ac150  00000000`00000000 00000000`00000000
00000000`001ac160  00000000`00000000 00000000`00000000
00000000`001ac170  00000000`00000000 00000000`00000000
00000000`001ac180  00000000`00000000 00000000`00000000
00000000`001ac190  00000000`00000000 00000000`00000000
00000000`001ac1a0  00000000`00000000 00000000`00000000
00000000`001ac1b0  00000000`00000000 00000000`00000000
00000000`001ac1c0  00000000`00000000 00000000`00000000
00000000`001ac1d0  00000000`00000000 00000000`00000000
00000000`001ac1e0  00000000`00000000 00000000`00000000
00000000`001ac1f0  00000000`00000000 00000000`00000000
00000000`001ac200  00000000`00000000 00000000`00000000
00000000`001ac210  00000000`00000000 00000000`00000000
00000000`001ac220  00000000`00000000 00000000`00000000
00000000`001ac230  00000000`00000000 00000000`00000000
00000000`001ac240  00000000`00000000 00000000`00000000
00000000`001ac250  00000000`00000000 00000000`00000000
00000000`001ac260  00000000`00000000 00000000`00000000
00000000`001ac270  00000000`00000000 00000000`00000000
00000000`001ac280  00000000`00000000 00000000`00000000
00000000`001ac290  00000000`00000000 00000000`00000000
00000000`001ac2a0  00000000`00000000 00000000`00000000
00000000`001ac2b0  00000000`00000000 00000000`00000000
00000000`001ac2c0  00000000`00000000 00000000`00000000
00000000`001ac2d0  00000000`00000000 00000000`00000000
00000000`001ac2e0  00000000`00000000 00000000`00000000
00000000`001ac2f0  00000000`00000000 00000000`00000000
00000000`001ac300  00000000`00000000 00000000`00000000
00000000`001ac310  00000000`00000000 00000000`00000000
00000000`001ac320  00000000`00000000 00000000`00000000
00000000`001ac330  00000000`00000000 00000000`00000000
00000000`001ac340  00000000`00000000 00000000`00000000
00000000`001ac350  00000000`00000000 00000000`00000000
00000000`001ac360  00000000`00000000 00000000`00000000
00000000`001ac370  00000000`00000000 00000000`00000000
00000000`001ac380  00000000`00000000 00000000`00000000
00000000`001ac390  00000000`00000000 00000000`00000000
00000000`001ac3a0  00000000`00000000 00000000`00000000
00000000`001ac3b0  00000000`00000000 00000000`00000000
00000000`001ac3c0  00000000`00000000 00000000`00000000
00000000`001ac3d0  00000000`00000000 00000000`00000000
00000000`001ac3e0  00000000`00000000 00000000`00000000
00000000`001ac3f0  00000000`00000000 00000000`00000000
00000000`001ac400  00000000`00000000 00000000`00000000
00000000`001ac410  00000000`00000000 00000000`00000000
00000000`001ac420  00000000`00000000 00000000`00000000
00000000`001ac430  00000000`00000000 00000000`00000000
00000000`001ac440  00000000`00000000 00000000`00000000
00000000`001ac450  00000000`00000000 00000000`00000000
00000000`001ac460  00000000`00000000 00000000`00000000
00000000`001ac470  00000000`00000000 00000000`00000000
00000000`001ac480  00000000`00000000 00000000`00000000
00000000`001ac490  00000000`00000000 00000000`00000000
00000000`001ac4a0  00000000`00000000 00000000`00000000
00000000`001ac4b0  00000000`00000000 00000000`00000000
00000000`001ac4c0  00000000`00000000 00000000`00000000
00000000`001ac4d0  00000000`00000000 00000000`00000000
00000000`001ac4e0  00000000`00000000 00000000`00000000
00000000`001ac4f0  00000000`00000000 00000000`00000000
00000000`001ac500  00000000`00000000 00000000`00000000
00000000`001ac510  00000000`00000000 00000000`00000000
00000000`001ac520  00000000`00000000 00000000`00000000
00000000`001ac530  00000000`00000000 00000000`00000000
00000000`001ac540  00000000`00000000 00000000`00000000
00000000`001ac550  00000000`00000000 00000000`00000000
00000000`001ac560  00000000`00000000 00000000`00000000
00000000`001ac570  00000000`00000000 00000000`00000000
00000000`001ac580  00000000`00000000 00000000`00000000
00000000`001ac590  00000000`00000000 00000000`00000000
00000000`001ac5a0  00000000`00000000 00000000`00000000
00000000`001ac5b0  00000000`00000000 00000000`00000000
00000000`001ac5c0  00000000`00000000 00000000`00000000
00000000`001ac5d0  00000000`00000000 00000000`00000000
00000000`001ac5e0  00000000`00000000 00000000`00000000
00000000`001ac5f0  00000000`00000000 00000000`00000000
00000000`001ac600  00000000`00000000 00000000`00000000
00000000`001ac610  00000000`00000000 00000000`00000000
00000000`001ac620  00000000`00000000 00000000`00000000
00000000`001ac630  00000000`00000000 00000000`00000000
00000000`001ac640  00000000`00000000 00000000`00000000
00000000`001ac650  00000000`00000000 00000000`00000000
00000000`001ac660  00000000`00000000 00000000`00000000
00000000`001ac670  00000000`00000000 00000000`00000000
00000000`001ac680  00000000`00000000 00000000`00000000
00000000`001ac690  00000000`00000000 00000000`00000000
00000000`001ac6a0  00000000`00000000 00000000`00000000
00000000`001ac6b0  00000000`00000000 00000000`00000000
00000000`001ac6c0  00000000`00000000 00000000`00000000
00000000`001ac6d0  00000000`00000000 00000000`00000000
00000000`001ac6e0  00000000`00000000 00000000`00000000
00000000`001ac6f0  00000000`00000000 00000000`00000000
00000000`001ac700  00000000`00000000 00000000`00000000
00000000`001ac710  00000000`00000000 00000000`00000000
00000000`001ac720  00000000`00000000 00000000`00000000
00000000`001ac730  00000000`00000000 00000000`00000000
00000000`001ac740  00000000`00000000 00000000`00000000
00000000`001ac750  00000000`00000000 00000000`00000000
00000000`001ac760  00000000`00000000 00000000`00000000
00000000`001ac770  00000000`00000000 00000000`00000000
00000000`001ac780  00000000`00000000 00000000`00000000
00000000`001ac790  00000000`00000000 00000000`00000000
00000000`001ac7a0  00000000`00000000 00000000`00000000
00000000`001ac7b0  00000000`00000000 00000000`00000000
00000000`001ac7c0  00000000`00000000 00000000`00000000
00000000`001ac7d0  00000000`00000000 00000000`00000000
00000000`001ac7e0  00000000`00000000 00000000`00000000
00000000`001ac7f0  00000000`00000000 00000000`00000000
00000000`001ac800  00000000`00000000 00000000`00000000
00000000`001ac810  00000000`00000000 00000000`00000000
00000000`001ac820  00000000`00000000 00000000`00000000
00000000`001ac830  00000000`00000000 00000000`00000000
00000000`001ac840  00000000`00000000 00000000`00000000
00000000`001ac850  00000000`00000000 00000000`00000000
00000000`001ac860  00000000`00000000 00000000`00000000
00000000`001ac870  00000000`00000000 00000000`00000000
00000000`001ac880  00000000`00000000 00000000`00000000
00000000`001ac890  00000000`00000000 00000000`00000000
00000000`001ac8a0  00000000`00000000 00000000`00000000
00000000`001ac8b0  00000000`00000000 00000000`00000000
00000000`001ac8c0  00000000`00000000 00000000`00000000
00000000`001ac8d0  00000000`00000000 00000000`00000000
00000000`001ac8e0  00000000`00000000 00000000`00000000
00000000`001ac8f0  00000000`00000000 00000000`00000000
00000000`001ac900  00000000`00000000 00000000`00000000
00000000`001ac910  00000000`00000000 00000000`00000000
00000000`001ac920  00000000`00000000 00000000`00000000
00000000`001ac930  00000000`00000000 00000000`00000000
00000000`001ac940  00000000`00000000 00000000`00000000
00000000`001ac950  00000000`00000000 00000000`00000000
00000000`001ac960  00000000`00000000 00000000`00000000
00000000`001ac970  00000000`00000000 00000000`00000000
00000000`001ac980  00000000`00000000 00000000`00000000
00000000`001ac990  00000000`00000000 00000000`00000000
00000000`001ac9a0  00000000`00000000 00000000`00000000
00000000`001ac9b0  00000000`00000000 00000000`00000000
00000000`001ac9c0  00000000`00000000 00000000`00000000
00000000`001ac9d0  00000000`00000000 00000000`00000000
00000000`001ac9e0  00000000`00000000 00000000`00000000
00000000`001ac9f0  00000000`00000000 00000000`00000000
00000000`001aca00  00000000`00000000 00000000`00000000
00000000`001aca10  00000000`00000000 00000000`00000000
00000000`001aca20  00000000`00000000 00000000`00000000
00000000`001aca30  00000000`00000000 00000000`76fb21c9
00000000`001aca40  00000000`00000000 00000000`00000000
00000000`001aca50  00000000`00000000 00000000`00000000
00000000`001aca60  00000000`00000000 00000000`00000000
00000000`001aca70  000007ff`fffdf000 00000000`00000002
00000000`001aca80  00000000`00000002 00000000`76fb20c0
00000000`001aca90  00000000`00030000 00000000`ffffffff
00000000`001acaa0  00000000`00003064 00000000`00000000
00000000`001acab0  00000000`76fb1e80 00000000`00000000
00000000`001acac0  00000000`00000000 00000000`00000000
00000000`001acad0  00000000`00000002 00000000`00000000
00000000`001acae0  000007ff`fffdf000 000007ff`fffdd000
00000000`001acaf0  00000000`00000002 00000000`001acbd8
00000000`001acb00  00000000`001acbe8 00000000`76fb1f49
00000000`001acb10  ffffffff`fffffffc 00000000`00000001
00000000`001acb20  00000000`00030000 00000000`001acbc8
00000000`001acb30  00000000`001acbc4 00000000`00000003
00000000`001acb40  00000000`00000000 00000000`001acc88
00000000`001acb50  00000000`00031790 00000000`00000000
00000000`001acb60  00000000`00000003 00000000`001accb0
00000000`001acb70  00000000`000004b4 00000000`76fb2ca6
00000000`001acb80  00000000`00000000 00000000`001acbc8
00000000`001acb90  00000000`001acbc4 00000000`001accb0
00000000`001acba0  00000000`001acbe0 00000000`001acbe4
00000000`001acbb0  00000000`00000001 00000000`00000002
00000000`001acbc0  000004b4`00000000 00000000`00031790
00000000`001acbd0  00000000`00000000 00000000`00000000
00000000`001acbe0  f46857d4`00000001 00000003`00000020
00000000`001acbf0  00000000`00000000 00000003`00000002
00000000`001acc00  00000000`00000002 00000000`00000000
00000000`001acc10  00000000`00000000 00000000`00000001
00000000`001acc20  00000000`00000000 00000000`00000000
00000000`001acc30  00000000`00000000 00000000`76fb312e
00000000`001acc40  00000000`001ace00 00000000`001ace48
00000000`001acc50  00000000`001ace80 00000000`00000000
00000000`001acc60  00000000`001accb0 00000000`76fb21c9
00000000`001acc70  00000000`00000000 00000000`00000000
00000000`001acc80  00000000`00000000 00000000`00140012
00000000`001acc90  00000000`001ad180 00000000`00000000
00000000`001acca0  000007ff`fffdf000 00000000`00000002
00000000`001accb0  00000000`00000002 00000000`76fb20c0
00000000`001accc0  00000000`00030000 00000000`ffffffff
00000000`001accd0  00000000`00003064 00000000`00000000
00000000`001acce0  00000000`76fb1e80 00000000`00000000
00000000`001accf0  00000000`00000000 00000000`00000000
00000000`001acd00  00000000`00000002 00000000`00000000
00000000`001acd10  000007ff`fffdf000 000007ff`fffdd000
00000000`001acd20  00000000`00000002 00000000`001ace08
00000000`001acd30  00000000`001ace18 00000000`76fb1f49
00000000`001acd40  ffffffff`fffffffc 00000000`00000001
00000000`001acd50  00000000`00030000 00000000`001acdf8
00000000`001acd60  00000000`001acdf4 00000000`00000003
00000000`001acd70  00000000`00000000 00000000`001aceb8
00000000`001acd80  00000000`00031790 00000000`00000000
00000000`001acd90  00000000`00000003 00000000`001acee0
00000000`001acda0  00000000`000004b4 00000000`76fb2ca6
00000000`001acdb0  00000000`00000000 00000000`001acdf8
00000000`001acdc0  00000000`001acdf4 00000000`001acee0
00000000`001acdd0  00000000`001ace10 00000000`001ace14
00000000`001acde0  00000000`00000001 00000000`00000002
00000000`001acdf0  000004b4`00000003 00000000`00031790
00000000`001ace00  00000000`00000000 00000000`00000000
00000000`001ace10  3306012e`00000001 00000003`00000020
00000000`001ace20  00000000`00000000 00000003`00000002
00000000`001ace30  00000000`00000002 00000000`001ada70
00000000`001ace40  00000000`00000000 00000000`00000001
00000000`001ace50  00000000`00000000 00000000`00000000
00000000`001ace60  00000000`00000000 00000000`76fb312e
00000000`001ace70  00000000`001ad030 00000000`001ad078
00000000`001ace80  00000000`001ad0b0 00000000`000008e0
00000000`001ace90  00000000`001acee0 00000000`00000000
00000000`001acea0  00000000`002b0230 00000000`00000000
00000000`001aceb0  00000000`00000000 00000000`003c003a
00000000`001acec0  00000000`001ada70 00000000`00000000
00000000`001aced0  00000000`00000080 00000000`001acff0
00000000`001acee0  00000000`00000070 00000000`00000000
00000000`001acef0  00000000`00000000 00000000`00000000
00000000`001acf00  00000000`00000000 00000000`00000000
00000000`001acf10  00000000`00000000 00000000`00000000
00000000`001acf20  00000000`00000000 00000000`00000000
00000000`001acf30  00000000`00000000 00000000`00000000
00000000`001acf40  00000000`00000000 00000000`00000000
00000000`001acf50  00000000`00020000 00000000`001acf90
00000000`001acf60  00000000`001acf90 00000000`001acf90
00000000`001acf70  00000000`00000002 00000000`00000002
00000000`001acf80  00000000`001ad030 00000000`00000000
00000000`001acf90  00000000`001a0000 00000000`001ad1b8
00000000`001acfa0  00000000`3f09c772 00000000`00000000
00000000`001acfb0  00000000`00000080 00000000`00000000
00000000`001acfc0  00000000`00000000 00000000`001ad360
00000000`001acfd0  00000000`00000000 00000000`001ad350
00000000`001acfe0  00000000`00000000 00000000`76fb35ba
00000000`001acff0  00000000`00000002 00000000`00000000
00000000`001ad000  00000000`00000000 00000000`001ad068
00000000`001ad010  00000000`001ad0b0 00000000`001ad518
00000000`001ad020  00000000`fffd0000 000007ff`fffd0032
00000000`001ad030  00000000`003c003a 00000000`001ada70
00000000`001ad040  00000000`00000000 00000000`00000000
00000000`001ad050  00000000`00000000 00000000`00000001
00000000`001ad060  00000000`00000000 00000000`0080003a
00000000`001ad070  00000000`001ad190 00000000`00000000
00000000`001ad080  00000000`77072890 00000000`001ad1c8
00000000`001ad090  00000000`00031790 00000000`00000000
00000000`001ad0a0  00000000`00000003 00000000`001ad1f0
00000000`001ad0b0  00000000`00000000 00000000`00000000
00000000`001ad0c0  00000000`00000000 00000000`00000000
00000000`001ad0d0  00000000`00000000 00000000`00000000
00000000`001ad0e0  00000000`00000000 00000000`00000000
00000000`001ad0f0  00000000`00000000 00000000`00000000
00000000`001ad100  00000000`00000000 00000000`00000000
00000000`001ad110  00000000`00000000 00000000`00000000
00000000`001ad120  d69702de`00200000 00000000`001ad170
00000000`001ad130  00000000`001ad170 00000000`001ad170
00000000`001ad140  00000000`00000020 00000000`00000020
00000000`001ad150  00000000`00000000 00000000`00000001
00000000`001ad160  00000000`00000000 00000000`00000000
00000000`001ad170  00000000`00000000 00000000`76fb312e
00000000`001ad180  00000000`001ad340 00000000`001ad388
00000000`001ad190  0057005c`003a0043 006f0064`006e0069
00000000`001ad1a0  0073005c`00730077 00650074`00730079
00000000`001ad1b0  00000000`002b6bb0 00000000`76f8c9c0
00000000`001ad1c0  004c0044`002e0032 00000000`0000004c
00000000`001ad1d0  00000000`00000000 00000000`00000000
00000000`001ad1e0  00000000`7708d520 00000000`76f99b0f
00000000`001ad1f0  00000000`00000000 00000000`001ad370
00000000`001ad200  00000000`00000002 00000000`001ad360
00000000`001ad210  00000000`3f09c6f2 00000000`00000000
00000000`001ad220  000007fe`ff280000 00000000`001ad5a8
00000000`001ad230  00000000`001ad558 00000000`00000001
00000000`001ad240  00000000`00000000 00000000`001ae3e0
00000000`001ad250  00000000`00000000 00000000`76fb3658
00000000`001ad260  00000000`00000001 00000000`001ad2a0
00000000`001ad270  00000000`001ad2a0 00000000`001ad2a0
00000000`001ad280  00000000`001ad350 00000000`001ad348
00000000`001ad290  00000000`00000000 00000000`00000000
00000000`001ad2a0  00000000`00000000 00000000`07040003
00000000`001ad2b0  00000000`001ad360 00000000`002b78c8
00000000`001ad2c0  00000000`00000000 00000000`001ad558
00000000`001ad2d0  00000000`00000001 00000000`00000001
00000000`001ad2e0  00000000`001ad558 00000000`00000001
00000000`001ad2f0  00000000`c0150000 00000000`76fb3b82
00000000`001ad300  00000000`001ae3e0 00000000`00000001
00000000`001ad310  00000000`001ad5a8 00000000`00000000
00000000`001ad320  00000000`001ad350 00000000`001ad348
00000000`001ad330  00000000`001ad340 00000000`00000000
00000000`001ad340  00000000`002b78c0 00000000`76fb21c9
00000000`001ad350  00000000`00000000 00000000`00000000
00000000`001ad360  00000000`003c003a 00000000`001ada70
00000000`001ad370  00000000`002b6bb0 00000000`00000000
00000000`001ad380  000007ff`fffdf000 00000000`00000002
00000000`001ad390  00000000`00000002 00000000`76fb20c0
00000000`001ad3a0  00000000`00030000 00000000`ffffffff
00000000`001ad3b0  00000000`00003064 00000000`00000000
00000000`001ad3c0  00000000`76fb1e80 00000000`000016e0
00000000`001ad3d0  00000000`002b78d0 00000000`002b0274
00000000`001ad3e0  00000000`00000002 00000000`0000007f
00000000`001ad3f0  000007ff`fffdf000 000007ff`fffdd000
00000000`001ad400  00000000`00000002 00000000`001ad4e8
00000000`001ad410  00000000`001ad4f8 00000000`76fb1f49
00000000`001ad420  ffffffff`fffffffc 00000000`00000001
00000000`001ad430  00000000`00030000 00000000`001ad4d8
00000000`001ad440  00000000`001ad4d4 00000000`00000003
00000000`001ad450  00000000`00000000 00000000`001ad598
00000000`001ad460  00000000`00031790 00000000`00000000
00000000`001ad470  00000000`00000003 00000000`001ad5c0
00000000`001ad480  00000000`000004b4 00000000`76fb2ca6
00000000`001ad490  00000000`00000000 00000000`001ad4d8
00000000`001ad4a0  00000000`001ad4d4 00000000`001ad5c0
00000000`001ad4b0  00000000`001ad4f0 00000000`001ad4f4
00000000`001ad4c0  00000000`00000001 00000000`00000001
00000000`001ad4d0  000004b4`001ad5a8 00000000`00031790
00000000`001ad4e0  00000000`00000000 00000000`00000000
00000000`001ad4f0  e6debadd`00000001 00000003`00000020
00000000`001ad500  00000000`00000000 00000003`00000002
00000000`001ad510  00000000`00000002 00000000`00000000
00000000`001ad520  00000000`00000000 00000000`00000001
00000000`001ad530  00000000`00000000 00000000`00000000
00000000`001ad540  00000000`00000000 00000000`76fb312e
00000000`001ad550  00000000`001ad710 00000000`001ad758
00000000`001ad560  00000000`001ad790 00000000`76fb3658
00000000`001ad570  00000000`001ad5c0 00000000`00000000
00000000`001ad580  00000000`00000000 00000000`00000000
00000000`001ad590  00000000`001ad5c0 00000000`0010000e
00000000`001ad5a0  00000000`002b8470 00000000`003c003a
00000000`001ad5b0  00000000`001ada70 00000000`002b7acb
00000000`001ad5c0  00000000`00000070 00000000`00000000
00000000`001ad5d0  00000000`00000000 00000000`00000000
00000000`001ad5e0  00000000`00000000 00000000`00000000
00000000`001ad5f0  00000000`00000000 00000000`00000000
00000000`001ad600  00000000`00000000 00000000`00000000
00000000`001ad610  00000000`00000000 00000000`00000000
00000000`001ad620  00000000`00000000 00000000`00000000
00000000`001ad630  ffffffff`00020000 00000000`001ad670
00000000`001ad640  00000000`001ad670 00000000`001ad670
00000000`001ad650  00000000`00000002 00000000`00000002
00000000`001ad660  00000000`50140163 00000000`76fcd0a0
00000000`001ad670  00000000`002b0000 00000000`002b7d8b
00000000`001ad680  00000000`3f09dc52 00000000`00000000
00000000`001ad690  00000000`00000001 00000000`00000000
00000000`001ad6a0  00000000`00000000 00000000`001ada40
00000000`001ad6b0  00000000`00000000 00000000`001ada30
00000000`001ad6c0  00000000`00000000 00000000`76fb35ba
00000000`001ad6d0  00000000`00000005 00000000`00000000
00000000`001ad6e0  00000000`00000000 00000000`00000000
00000000`001ad6f0  00000000`001ad790 00000000`07040003
00000000`001ad700  00000000`00000030 00000000`002b84c8
00000000`001ad710  00000000`00000001 00000000`002b0000
00000000`001ad720  00000000`50000163 00000000`76fcd0a0
00000000`001ad730  00000000`002b84ca 00000000`002b84cb
00000000`001ad740  00000000`002b84c0 00000000`00000000
00000000`001ad750  00000000`001ad801 00000000`00000006
00000000`001ad760  00000000`000000aa 00000000`07040003
00000000`001ad770  00000000`00000900 00000000`002b8528
00000000`001ad780  00000000`00000001 00000000`002b0000
00000000`001ad790  00000000`5000016b 00000000`76fa478a
00000000`001ad7a0  00000000`002b852a 00000000`002b852b
00000000`001ad7b0  00000000`002b8520 00000000`00000000
00000000`001ad7c0  0000007f`00000001 00000000`00000093
00000000`001ad7d0  00000000`00000017 00000000`00000006
00000000`001ad7e0  00000000`00000000 00000000`00000000
00000000`001ad7f0  05000003`00000004 00000000`00000000
00000000`001ad800  00000000`002b8520 00000000`002b8530
00000000`001ad810  00000000`001ad850 00000000`002b8530
00000000`001ad820  00000000`002b84d0 00000000`0000007f
00000000`001ad830  0000007f`002b0230 00000000`00000017
00000000`001ad840  000007fe`fd57d6c0 00000000`00000093
00000000`001ad850  00000000`002b0000 00000000`00000900
00000000`001ad860  00000000`002b0230 00000000`002b8530
00000000`001ad870  00000000`00000030 00000000`002b0230
00000000`001ad880  000007ff`fffdf000 00000000`00000a80
00000000`001ad890  00000000`b40400b0 00000000`76fe2365
00000000`001ad8a0  00000000`002b0230 00000000`0000007f
00000000`001ad8b0  00000000`002b9fd0 00000000`76fd2bf7
00000000`001ad8c0  00000000`7708d520 00000000`002b9fd0
00000000`001ad8d0  00000000`002b8fc0 00000000`00000000
00000000`001ad8e0  00000000`00000000 00000000`002b0000
00000000`001ad8f0  00000000`002b0158 00000000`76fb8600
00000000`001ad900  00000000`07040003 00000000`76faddd8
00000000`001ad910  00000000`002b0000 00000000`50000163
00000000`001ad920  00000000`002b9010 00000000`07040003
00000000`001ad930  00000000`00000030 00000000`002b8e58
00000000`001ad940  00000000`00000001 00000000`002b0000
00000000`001ad950  00000000`50000163 00000000`76fcd0a0
00000000`001ad960  00000000`002b8e5a 00000000`002b8e5b
00000000`001ad970  00000000`002b8e50 00000000`00000000
00000000`001ad980  00000000`50000101 00000000`00000006
00000000`001ad990  00000000`00000111 00000000`002b0158
00000000`001ad9a0  00000000`00fbda00 00000000`00000000
00000000`001ad9b0  05000003`00000004 00000000`00000000
00000000`001ad9c0  00000000`002b8e50 00000000`002b8e60
00000000`001ad9d0  00000000`0000007f 00000000`002b8e60
00000000`001ad9e0  00000000`0000007f 00000000`00000006
00000000`001ad9f0  0000007f`0000007f 00000000`00000111
00000000`001ada00  00000000`002b7760 00000000`07040003
00000000`001ada10  00000000`00000020 00000000`002b8eb8
00000000`001ada20  00000000`00000001 00000000`002b0000
00000000`001ada30  00000000`50000163 00000000`76fcd0a0
00000000`001ada40  00000000`002b8eba 00000000`002b8ebb
00000000`001ada50  00000000`002b8eb0 00000000`00000000
00000000`001ada60  00000000`002b0201 00000000`00000005
00000000`001ada70  00000000`0000010c 00000000`002b8e60
00000000`001ada80  00000000`002b9000 00000000`00000000
00000000`001ada90  05000003`002b0204 00000000`00000000
00000000`001adaa0  00000000`002b8eb0 00000000`002b8ec0
00000000`001adab0  05000000`0000007f 00000000`002b8ec0
00000000`001adac0  00000000`12040117 00000000`00000005
00000000`001adad0  0000007f`00000038 00000000`0000010c
00000000`001adae0  00000000`06040002 00000000`00000005
00000000`001adaf0  00000000`002b8e70 00000000`00000000
00000000`001adb00  00000000`00000008 00000000`002b8ec0
00000000`001adb10  00000000`00000030 00000000`002b0230
00000000`001adb20  00000000`002b0000 00000000`000010f0
00000000`001adb30  00000000`002b8ec0 00000000`002b0274
00000000`001adb40  00000000`002b0230 00000000`0000007f
00000000`001adb50  00000000`00000030 00000000`00000060
00000000`001adb60  00000000`00000000 00000000`001adc50
00000000`001adb70  00000000`002b0230 00000000`00000006
00000000`001adb80  00000000`00000000 00000000`ff0400fb
00000000`001adb90  00000000`00000001 00000000`00000002
00000000`001adba0  00000000`14040111 00000000`06040002
00000000`001adbb0  00000000`002b0000 00000000`77023771
00000000`001adbc0  00000000`06040002 00000000`50000163
00000000`001adbd0  00000000`002b0000 00000000`77023771
00000000`001adbe0  00000000`770703c8 00000000`00000000
00000000`001adbf0  00000000`00000000 00000000`002b0000
00000000`001adc00  00000000`002b0000 00000000`00000020
00000000`001adc10  00000000`00000000 00000000`76faddd8
00000000`001adc20  00000000`002b0000 00000000`50000163
00000000`001adc30  00000000`00000020 00000000`00000050
00000000`001adc40  00000000`00000000 00000000`001add30
00000000`001adc50  00000000`00000000 00000000`50000163
00000000`001adc60  00000000`00000000 00000000`770244e8
00000000`001adc70  00000000`00000001 00000000`002b8e60
00000000`001adc80  00000000`00000030 00000000`40000062
00000000`001adc90  00000000`002b0000 00000000`77023771
00000000`001adca0  00000000`002b0000 00000000`50000163
00000000`001adcb0  00000000`002b0000 000007ff`50000163
00000000`001adcc0  00000000`00000000 00000000`76fc797c
00000000`001adcd0  00000000`002b0000 00000000`50000063
00000000`001adce0  00000000`002b0000 00000000`00000004
00000000`001adcf0  00000000`00000001 00000000`00000020
00000000`001add00  00000000`40000062 00000000`002b0000
00000000`001add10  00000000`002b0000 00000000`50000163
00000000`001add20  00000000`002b0000 00000000`77031d0d
00000000`001add30  00000000`00000000 00000000`76e53762
00000000`001add40  00000000`00000000 00000000`76fc0000
00000000`001add50  00000000`002b0001 00000000`002b8ec0
00000000`001add60  00000000`001addc8 00000000`40000062
00000000`001add70  00000000`00000000 00000000`76faf4e3
00000000`001add80  00000000`00000000 00000000`00000030
00000000`001add90  00000000`00000000 00000000`00000000
00000000`001adda0  00000000`76d40000 00000000`76e53697
00000000`001addb0  00000000`00000000 00000000`00000000
00000000`001addc0  00000000`00000000 00000000`00000004
00000000`001addd0  00000000`001addf4 00000000`001ade18
00000000`001adde0  00000000`00000000 00000000`00000000
00000000`001addf0  00000000`00020019 00000000`00000000
00000000`001ade00  00000000`00000030 00000000`00020019
00000000`001ade10  00000000`00000034 00000000`00000000
00000000`001ade20  00000000`00000000 00000000`00000008
00000000`001ade30  00000001`3f720000 00000000`00000000
00000000`001ade40  00000000`00000000 00000000`00000030
00000000`001ade50  00000000`00000030 00000000`001ae120
00000000`001ade60  00000000`00000040 00000000`00000000
00000000`001ade70  00000000`00000000 00000000`006a006a
00000000`001ade80  00000000`76ede9b0 00000000`0000dd00
00000000`001ade90  00000000`00000000 00000000`00000030
00000000`001adea0  00000000`00000030 00000000`001ae120
00000000`001adeb0  00000000`00000040 00000000`00000000
00000000`001adec0  00000000`00000000 00000000`76f86eac
00000000`001aded0  00000000`00000001 00000000`76f86f4e
00000000`001adee0  00000000`00000003 00000000`001adf20
00000000`001adef0  00000000`770703c8 00000000`00000000
00000000`001adf00  00000000`00000000 00000000`76faf4e3
00000000`001adf10  000007ff`fffdd000 00000000`00000148
00000000`001adf20  00000000`00000000 00000000`76faddd8
00000000`001adf30  00000000`770703c8 00000000`76e53ee5
00000000`001adf40  00000000`00000000 00000000`002b0000
00000000`001adf50  00000000`001ae160 00000000`00000020
00000000`001adf60  00000000`00000090 00000000`001adf84
00000000`001adf70  00000000`002b0000 00000000`40000062
00000000`001adf80  00000010`00000002 00000000`001adfd0
00000000`001adf90  00000000`001ae1d8 00000000`00000000
00000000`001adfa0  00000000`00000000 00000000`00000034
00000000`001adfb0  00000000`00000000 00000000`001ae0f0
00000000`001adfc0  00000000`00000034 00000000`001ae0f4
00000000`001adfd0  00000004`00000000 00000000`00000004
00000000`001adfe0  00000000`00000000 00000000`00000030
00000000`001adff0  00000000`00000000 00000000`00000030
00000000`001ae000  00000000`00000000 00000000`76ede8a0
00000000`001ae010  00000000`00000040 00000000`00000000
00000000`001ae020  00000000`00000000 00000000`00007500
00000000`001ae030  00000000`00000000 00000000`00000030
00000000`001ae040  00000000`00000000 00000000`00000000
00000000`001ae050  00000000`00000040 00000000`00000000
00000000`001ae060  00000000`3ef41f4a 00000000`001ae118
00000000`001ae070  00000000`001ae160 00000000`00000000
00000000`001ae080  00000000`001ae1d8 00000000`00000000
00000000`001ae090  00000000`76edea20 00000000`00000000
00000000`001ae0a0  00000000`001ae1e0 00000000`76d40000
00000000`001ae0b0  00000000`001ae1d0 00000000`76e53ff2
00000000`001ae0c0  00000000`00000000 00000000`76e539d5
00000000`001ae0d0  00000000`002b8ec0 00000000`00020019
00000000`001ae0e0  00000000`001ae170 00000000`001ae0f4
00000000`001ae0f0  00000004`00000004 00000000`00000000
00000000`001ae100  00000000`00000000 00000000`00000000
00000000`001ae110  00000000`00220020 00000000`76edea20
00000000`001ae120  00000000`00000000 00000000`76e54183
00000000`001ae130  00000000`00000000 00000000`00000000
00000000`001ae140  00000000`00000000 00000000`00000000
00000000`001ae150  00000000`00000004 00000000`76e56864
00000000`001ae160  00000000`00000000 00000000`00000034
00000000`001ae170  00000000`00000000 00000000`001ae1e0
00000000`001ae180  00000000`001ae1d8 00000000`001ae1d0
00000000`001ae190  00000000`00000001 00000000`00000001
00000000`001ae1a0  ffffffff`00000000 00000000`00000034
00000000`001ae1b0  00000000`76dc9c58 000007ff`fffdd000
00000000`001ae1c0  00000000`00000003 00000000`76d5a6dd
00000000`001ae1d0  00000000`00000004 00000000`00000000
00000000`001ae1e0  00000000`00000004 00000000`00000000
00000000`001ae1f0  ffffffff`fffffffc 00000000`00000001
00000000`001ae200  00000000`00030000 00000000`001ae2a8
00000000`001ae210  00000000`001ae2a4 00000000`00000003
00000000`001ae220  00000000`002b0000 00000000`001ae368
00000000`001ae230  00000000`00000001 00000000`00000030
00000000`001ae240  00000000`001ae2b0 000007fe`fcf41725
00000000`001ae250  00000000`002b0000 00000000`50000163
00000000`001ae260  00000000`002b0000 00000000`77031d0d
00000000`001ae270  00000000`00000000 00000000`00000000
00000000`001ae280  00000000`002b26e0 000007fe`fcf39a82
00000000`001ae290  000007fe`fcf80aa0 00000000`00000000
00000000`001ae2a0  00000000`3f09e9f2 000007fe`fcf3ad9b
00000000`001ae2b0  00000000`00000000 00000000`00000005
00000000`001ae2c0  00000000`00000000 00000000`001ae380
00000000`001ae2d0  00000000`001ae3f0 00000000`00000000
00000000`001ae2e0  00000000`002b6cf4 00000000`76f861b3
00000000`001ae2f0  00000000`00000001 000007fe`fcf3ade1
00000000`001ae300  00000000`001ae3f8 000007fe`fcf42871
00000000`001ae310  000007fe`fcf80a01 00000000`00000000
00000000`001ae320  00000000`00000000 000007fe`fcf423cd
00000000`001ae330  00000000`00000000 00000000`002b6cf4
00000000`001ae340  00000000`00000000 00000000`00000000
00000000`001ae350  00000000`00000000 000007fe`fcf401a2
00000000`001ae360  00000000`002b6bb0 00000000`00000000
00000000`001ae370  00000000`002b6cf0 00000000`00000000
00000000`001ae380  00000000`003c003a 00000000`001ae400
00000000`001ae390  00000000`002b6cf4 00000000`00000000
00000000`001ae3a0  00000000`00000000 000007fe`fcf23312
00000000`001ae3b0  00000000`00000001 00000000`76d40000
00000000`001ae3c0  00000000`76dd2700 00000000`00000000
00000000`001ae3d0  00000000`00000000 00000000`76d5b4e4
00000000`001ae3e0  000007fe`fd560000 00000000`00000005
00000000`001ae3f0  00000000`00000000 00000000`76f866d8
00000000`001ae400  0057005c`003a0043 006f0064`006e0069
00000000`001ae410  0073005c`00730077 00650074`00730079
00000000`001ae420  005c0032`0033006d 0033004d`004d0049
00000000`001ae430  00000000`00000000 00000000`00000000
00000000`001ae440  00000000`0000000a 00000000`76fb20c0
00000000`001ae450  00000000`00040000 00000000`ffffffff
00000000`001ae460  00000000`000002f8 00000000`00000000
00000000`001ae470  00000000`76fb1e80 00000000`0000082c
00000000`001ae480  00000000`03fb59d5 ffffffff`fa330010
00000000`001ae490  00000000`0000000a 000007fe`fd01afeb
00000000`001ae4a0  00000000`00000000 00000000`00000005
00000000`001ae4b0  00000000`00000000 00000000`76dca2b0
00000000`001ae4c0  00000000`00000000 00000000`7701b0e8
00000000`001ae4d0  00000000`00000000 00000000`00000008
00000000`001ae4e0  00000000`001ae910 00000000`001ae520
00000000`001ae4f0  00000000`001ae5c0 00000000`001ae518
00000000`001ae500  00000000`00000020 00000000`00220020
00000000`001ae510  000007fe`ffffffff 00000000`00040000
00000000`001ae520  00000000`00000030 00000000`00000000
00000000`001ae530  00000000`001ae508 00000000`00000040
00000000`001ae540  00000000`00000000 00000000`76faf4e3
00000000`001ae550  00000000`001ae600 00000000`000005a0
00000000`001ae560  00000000`00000001 00000000`76d5b5d3
00000000`001ae570  00670065`0052005c 00000000`76e61a36
00000000`001ae580  0061004d`c0150008 006e0069`00680063
00000000`001ae590  006f0053`005c0065 00610077`00740066
00000000`001ae5a0  00000000`00000000 00000000`76e88a3e
00000000`001ae5b0  00000000`00000000 00000000`00000000
00000000`001ae5c0  00730077`00000000 005c0054`004e0020
00000000`001ae5d0  00000000`001ae910 00000000`00000008
00000000`001ae5e0  00000000`00000000 0047005c`006e006f
00000000`001ae5f0  0049005f`00450052 00690074`0069006e
00000000`001ae600  007a0069`006c0061 00000000`00000065
00000000`001ae610  00000000`00000000 00000000`76dd2700
00000000`001ae620  00000000`00000001 00000000`76d5a282
00000000`001ae630  00000000`00000000 00000000`76d40000
00000000`001ae640  00000000`00000000 00000000`00000000
00000000`001ae650  00000000`001ae910 00000000`00000008
00000000`001ae660  00000000`00000000 00000000`00000060
00000000`001ae670  00000000`00000240 00000000`001ae760
00000000`001ae680  00000000`002b0000 00000000`00000000
00000000`001ae690  00026161`00000000 003f8873`00001000
00000000`001ae6a0  0043e5ff`00000000 00000000`00010000
00000000`001ae6b0  00000000`00010000 000007ff`fffeffff
00000000`001ae6c0  00000000`000000ff 00000000`77023708
00000000`001ae6d0  00000000`097f033b 00000000`00530a70
00000000`001ae6e0  00000000`003b0000 00000000`00000018
00000000`001ae6f0  00000000`00531e50 fffff900`c0050000
00000000`001ae700  00000000`00000318 00000000`00532090
00000000`001ae710  00000000`00000000 00000000`00000000
00000000`001ae720  00000000`00000318 00000000`00532100
00000000`001ae730  00000000`00000014 00000000`00532170
00000000`001ae740  00000000`00000000 00000000`00000000
00000000`001ae750  00000000`00000000 00000000`00000000
00000000`001ae760  00000000`00000000 00000000`00000000
00000000`001ae770  00000000`00000318 00000000`00532200
00000000`001ae780  00000000`00000318 00000000`005322e0
00000000`001ae790  00000000`00000318 00000000`00532350
00000000`001ae7a0  00000000`00000402 00000000`00532000
00000000`001ae7b0  00000000`00000318 00000000`005323c0
00000000`001ae7c0  00000000`00000318 00000000`00532270
00000000`001ae7d0  00000000`00000000 00000000`00000000
00000000`001ae7e0  00000000`00000318 00000000`00532190
00000000`001ae7f0  00000000`00000288 00000000`00532430
00000000`001ae800  00000000`00000082 00000000`00532490
00000000`001ae810  00000000`00000000 00000000`00000000
00000000`001ae820  00000000`00000000 00000000`00000000
00000000`001ae830  00000000`00000000 00000000`00000000
00000000`001ae840  00000000`00000000 00000000`00000000
00000000`001ae850  00000000`00000000 00000000`00000000
00000000`001ae860  00000000`00000000 00000000`00000000
00000000`001ae870  00000000`00000000 00000000`00000000
00000000`001ae880  00000000`00000000 00000000`00000000
00000000`001ae890  00000000`00000000 00000000`00000000
00000000`001ae8a0  000007fe`00000000 00000000`00000000
00000000`001ae8b0  00000000`00000000 00000000`00000000
00000000`001ae8c0  00000000`00000000 00000000`00000000
00000000`001ae8d0  00000000`00000000 00000000`00000000
00000000`001ae8e0  00000000`00000000 00000000`00000000
00000000`001ae8f0  00000000`0000033f 00000000`00531f20
00000000`001ae900  00000000`00000319 00000000`00531f90
00000000`001ae910  000007fe`fd062490 00000000`00000000
00000000`001ae920  00730065`0053005c 006e006f`00690073
00000000`001ae930  005c0031`005c0073 0064006e`00690057
00000000`001ae940  00000073`0077006f 00000000`001ae998
00000000`001ae950  000007fe`fd062490 00000000`00004b88
00000000`001ae960  00000000`0000001c 00000000`76f8fa3b
00000000`001ae970  00000000`00000000 00000000`002b0000
00000000`001ae980  000007fe`ff21beb4 00000000`00000001
00000000`001ae990  000007fe`ff1a0000 000007fe`fcf2cb60
00000000`001ae9a0  00000000`001ae9c0 00000000`001aeb40
00000000`001ae9b0  00000000`00000000 00000000`0000000e
00000000`001ae9c0  00000000`0080000e 00000000`001aeb54
00000000`001ae9d0  00000000`001e001c 00000000`001ae9f4
00000000`001ae9e0  00000006`0000011c 00001db1`00000001
00000000`001ae9f0  00650053`00000002 00630069`00760072
00000000`001aea00  00610050`00200065 00310020`006b0063
00000000`001aea10  61684374`65470000 74646957`43424172
00000000`001aea20  00000000`00497368 00000000`00000000
00000000`001aea30  00000000`002b6cf0 00000000`00000000
00000000`001aea40  00000000`00140012 00000000`00000000
00000000`001aea50  00000000`3f09e032 00000000`770603f0
00000000`001aea60  00000000`00000000 00000000`00000005
00000000`001aea70  00000000`00000000 00000000`00000000
00000000`001aea80  00000000`00000004 00000000`76f9d3ea
00000000`001aea90  000007fe`ff225940 000007fe`ff1a0000
00000000`001aeaa0  00000000`002b6720 00000000`76f86604
00000000`001aeab0  00000000`00000400 00000000`001aeac0
00000000`001aeac0  000007fe`00000000 000007ff`003c003a
00000000`001aead0  00000000`76fb4bc0 000007fe`fcf233d0
00000000`001aeae0  00000000`00000001 000007fe`fcf2ce89
00000000`001aeaf0  00000001`fffdd000 03020382`00010100
00000000`001aeb00  000007fe`b4f89a62 00000000`00000000
00000000`001aeb10  00000000`00000001 000007fe`ff1bcea9
00000000`001aeb20  0057005c`003a0043 006f0064`006e0069
00000000`001aeb30  0073005c`00730077 00650074`00730079
00000000`001aeb40  005c0032`0033006d 0033004d`004d0049
00000000`001aeb50  004c0044`002e0032 6b636150`0000004c
00000000`001aeb60  00000000`00003120 00000000`00000000
00000000`001aeb70  00000000`00000001 000007fe`ff21babb
00000000`001aeb80  00000000`002b53a0 000007fe`ff1a1410
00000000`001aeb90  00000000`00000001 000007fe`fcf2ab1a
00000000`001aeba0  00000000`00000001 000007fe`ff21bc59
00000000`001aebb0  00000000`00000000 03010301`03010301
00000000`001aebc0  03010301`03010301 000007fe`ff1bd19a
00000000`001aebd0  00000000`00000005 00000000`00000000
00000000`001aebe0  0000ac1d`e89a4843 00000000`00000001
00000000`001aebf0  000007fe`ff1a0000 000007fe`ff21bd97
00000000`001aec00  00000000`00000001 00000000`770603f0
00000000`001aec10  03020302`03020302 03020302`03020302
00000000`001aec20  00000000`00000001 00000000`00000005
00000000`001aec30  00000000`00000000 00000000`ffffffff
00000000`001aec40  00000000`00000000 00000000`00000008
00000000`001aec50  00000000`002b4c58 00000000`76fcdaaa
00000000`001aec60  00000000`00000004 00000000`00001000
00000000`001aec70  00000000`00000af8 000007fe`fee114e4
00000000`001aec80  00000000`00000014 00000000`002b4bb8
00000000`001aec90  00000000`00000030 00000000`00000004
00000000`001aeca0  00000000`001aec80 00000000`00000240
00000000`001aecb0  00000000`00000000 00000000`00000000
00000000`001aecc0  00000000`002b4c58 00000000`76d5a4e0
00000000`001aecd0  01d3afc1`70d77641 00000000`770603f0
00000000`001aece0  00000000`002b4dd0 00000000`00000004
00000000`001aecf0  00000000`76d40000 00000000`76d5a466
00000000`001aed00  01d3afc1`70d77641 000003dc`d07c51e0
00000000`001aed10  00000000`001af4e0 00000000`002b4c00
00000000`001aed20  00000000`770603f0 00000000`76d5a2c5
00000000`001aed30  0000ac1d`e89a5075 00000000`00000000
00000000`001aed40  00000000`00000000 00000000`00000001
00000000`001aed50  00000000`002b4c00 00000000`76f96cb9
00000000`001aed60  00000000`770603f0 00000000`00000000
00000000`001aed70  00000000`76d5a2a0 00000000`770603f0
00000000`001aed80  00000000`00000004 00000000`00000000
00000000`001aed90  00000000`002b3560 00000000`001aedd0
00000000`001aeda0  00000000`00000001 43c51546`00000005
00000000`001aedb0  00000000`002b4c00 00000000`76d5a2a0
00000000`001aedc0  00000000`00000000 00000000`76f97e29
00000000`001aedd0  00000000`00000048 00000000`00000001
00000000`001aede0  00000000`00000000 00000000`00000000
00000000`001aedf0  00000000`00000070 ffffffff`ffffffff
00000000`001aee00  ffffffff`ffffffff 00000000`76f96c88
00000000`001aee10  00000000`76f96cb9 00000000`00001000
00000000`001aee20  00000001`3f722000 00000000`00000000
00000000`001aee30  00000001`3f722230 00000000`0000003c
00000000`001aee40  00000001`3f722208 00000000`00000000
00000000`001aee50  00000000`001aeea0 00000000`002b3a60
00000000`001aee60  00000000`00000000 00000000`76e40000
00000000`001aee70  00000000`002b5520 00000000`002b53a0
00000000`001aee80  00000000`002b5090 00000000`002b4dd0
00000000`001aee90  00000000`002b4c00 ffffffff`ffffffff
00000000`001aeea0  ffffffff`ffffffff 00000000`76f97cf6
00000000`001aeeb0  00000000`76f97e29 00000000`76f861b3
00000000`001aeec0  00000000`001aef40 00000000`00000000
00000000`001aeed0  00000000`00000080 00000001`3f7200c8
00000000`001aeee0  00000000`3f09e392 00000000`77007975
00000000`001aeef0  00000000`00000000 00000000`001af4e0
00000000`001aef00  00000000`770603f0 000007ff`fffdf000
00000000`001aef10  00000000`7708d650 00000000`7708d520
00000000`001aef20  00000000`00000000 00000000`76f9fbfd
00000000`001aef30  00000000`001af4e0 00000000`00000000
00000000`001aef40  00000000`00000000 00000000`00000000
00000000`001aef50  00000000`00000004 00000000`00000000
00000000`001aef60  00000000`00000000 00000000`00000000
00000000`001aef70  00000000`00000000 00000000`00000000
00000000`001aef80  00000000`00000001 00000000`0060005e
00000000`001aef90  00000000`002b331a 00000001`3f7200c8
00000000`001aefa0  00000000`02080062 00000000`002b2ae0
00000000`001aefb0  00000000`00000000 00000000`00000000
00000000`001aefc0  00000000`0060005e 00000000`002b331a
00000000`001aefd0  00000000`00000000 00000000`001af4e0
00000000`001aefe0  00000000`003c0028 00000000`002b3490
00000000`001aeff0  00000000`00000000 00000000`00000000
00000000`001af000  00000000`00000028 00000000`00000030
00000000`001af010  00000000`00000008 00000000`77060320
00000000`001af020  00000000`00000040 00000000`00000000
00000000`001af030  00000000`00000000 00000000`76e40000
00000000`001af040  00000000`0000000c 00000000`00000000
00000000`001af050  00000000`76f60000 00000000`00000000
00000000`001af060  000007ff`fffdd000 00000000`76f600e0
00000000`001af070  00000000`00160014 00000000`7ffe0030
00000000`001af080  00000000`00000000 00000000`00000000
00000000`001af090  00000000`00000000 00000000`00000000
00000000`001af0a0  00000000`00000000 00000000`00000000
00000000`001af0b0  00000000`00000060 00000000`00000000
00000000`001af0c0  00000000`00000000 00000000`00000000
00000000`001af0d0  00000000`00000000 00000000`00000000
00000000`001af0e0  00000000`00000000 00000000`00000000
00000000`001af0f0  00000000`00000000 00000000`00000000
00000000`001af100  00000000`00000000 00000000`00000000
00000000`001af110  00000000`00000000 00000000`00000000
00000000`001af120  00000000`00000000 00000000`00000000
00000000`001af130  003f003f`00010362 00000000`003f003f
00000000`001af140  00000000`00000000 00000000`00000000
00000000`001af150  000007ff`fffc0244 000007ff`fffc064a
00000000`001af160  000007ff`fffc0646 00000000`00000000
00000000`001af170  003f003f`000104e3 00000000`003f003f
00000000`001af180  00000000`00000000 00000000`00000000
00000000`001af190  000007ff`fffb001c 000007ff`fffb0222
00000000`001af1a0  000007ff`fffb021e 00000000`00000000
00000000`001af1b0  000007ff`fffd0654 000007ff`fffd1a56
00000000`001af1c0  00000000`00000000 00000000`00000000
00000000`001af1d0  00000000`00000000 00000000`00000000
00000000`001af1e0  00000000`00000000 00000000`00000000
00000000`001af1f0  00000000`00000000 00000000`00000000
00000000`001af200  00000000`00000000 00000000`00000000
00000000`001af210  00000000`00000000 00000000`00000000
00000000`001af220  00000000`00000000 00000000`00000000
00000000`001af230  00000000`00000000 00000000`00000000
00000000`001af240  00000000`00000000 00000000`00000000
00000000`001af250  00000000`00000000 00000000`00000000
00000000`001af260  00000000`00000000 00000000`00000000
00000000`001af270  00000000`00000000 00000000`00000000
00000000`001af280  00000000`00000000 00000000`00000000
00000000`001af290  00000000`00000000 00000000`00000000
00000000`001af2a0  00000000`00000000 00000000`00000000
00000000`001af2b0  00000000`00000000 00000000`00000000
00000000`001af2c0  00000000`00000000 00000000`00000000
00000000`001af2d0  00000000`00000000 00000000`00000000
00000000`001af2e0  00000000`00000000 00000000`00000000
00000000`001af2f0  00000000`00000000 00000000`00000000
00000000`001af300  00000000`00000000 00000000`00000000
00000000`001af310  00000000`00000000 00000000`00000000
00000000`001af320  00000000`00000000 00000000`00000000
00000000`001af330  00000000`00000000 00000000`00000000
00000000`001af340  00000000`00000000 00000000`00000000
00000000`001af350  00000000`00000000 00000000`00000000
00000000`001af360  00000000`00000000 00000000`00000000
00000000`001af370  00000000`00000000 00000000`00000000
00000000`001af380  00000000`00000000 00000000`00000000
00000000`001af390  00000000`00000000 00000000`00000000
00000000`001af3a0  00000000`00000000 00000000`00000000
00000000`001af3b0  00000000`00000000 00000000`00000000
00000000`001af3c0  00000000`00000000 00000000`00000000
00000000`001af3d0  00000000`3f09e632 00000000`00000000
00000000`001af3e0  00000000`76fb4510 00000000`00000001
00000000`001af3f0  00000000`76f60000 00000000`00000000
00000000`001af400  000007ff`fffdd000 00000000`00000000
00000000`001af410  000007ff`fffdf000 00000000`76f8a474
00000000`001af420  00000000`00000000 00000000`76f9f3b1
00000000`001af430  00000000`001af4e0 00000000`00000000
00000000`001af440  00000000`00000000 00000000`00000000
00000000`001af450  00000000`00000000 00000000`76ffc125
00000000`001af460  00000000`00000000 00000000`00000000
00000000`001af470  00000000`00000000 00000000`00000000
00000000`001af480  00000000`00000000 00000000`76f8a36e
00000000`001af490  00000000`001af4e0 00000000`00000000
00000000`001af4a0  000007ff`fffdf000 00000000`00000000
00000000`001af4b0  00000000`00000000 00000000`00000000
00000000`001af4c0  00000000`00000000 00000000`00000000
00000000`001af4d0  00000000`00000000 00000000`00000000
00000000`001af4e0  00000000`00000000 00000000`00000000
00000000`001af4f0  00000000`00000000 00000000`00000000
00000000`001af500  00000000`00000000 00000000`00000000
00000000`001af510  00001f80`0010001b 00000000`00000033
00000000`001af520  00000200`002b0000 00000000`00000000
00000000`001af530  00000000`00000000 00000000`00000000
00000000`001af540  00000000`00000000 00000000`00000000
00000000`001af550  00000000`00000000 00000000`00000000
00000000`001af560  00000001`3fb31000 000007ff`fffdf000
00000000`001af570  00000000`00000000 00000000`001af9b8
00000000`001af580  00000000`00000000 00000000`00000000
00000000`001af590  00000000`00000000 00000000`00000000
00000000`001af5a0  00000000`00000000 00000000`00000000
00000000`001af5b0  00000000`00000000 00000000`00000000
00000000`001af5c0  00000000`00000000 00000000`00000000
00000000`001af5d0  00000000`00000000 00000000`76f8a540
00000000`001af5e0  00000000`0000027f 00000000`00000000
00000000`001af5f0  00000000`00000000 0000ffff`00001f80
00000000`001af600  00000000`00000000 00000000`00000000
00000000`001af610  00000000`00000000 00000000`00000000
00000000`001af620  00000000`00000000 00000000`00000000
00000000`001af630  00000000`00000000 00000000`00000000
00000000`001af640  00000000`00000000 00000000`00000000
00000000`001af650  00000000`00000000 00000000`00000000
00000000`001af660  00000000`00000000 00000000`00000000
00000000`001af670  00000000`00000000 00000000`00000000
00000000`001af680  00000000`00000000 00000000`00000000
00000000`001af690  00000000`00000000 00000000`00000000
00000000`001af6a0  00000000`00000000 00000000`00000000
00000000`001af6b0  00000000`00000000 00000000`00000000
00000000`001af6c0  00000000`00000000 00000000`00000000
00000000`001af6d0  00000000`00000000 00000000`00000000
00000000`001af6e0  00000000`00000000 00000000`00000000
00000000`001af6f0  00000000`00000000 00000000`00000000
00000000`001af700  00000000`00000000 00000000`00000000
00000000`001af710  00000000`00000000 00000000`00000000
00000000`001af720  00000000`00000000 00000000`00000000
00000000`001af730  00000000`00000000 00000000`00000000
00000000`001af740  00000000`00000000 00000000`00000000
00000000`001af750  00000000`00000000 00000000`00000000
00000000`001af760  00000000`00000000 00000000`00000000
00000000`001af770  00000000`00000000 00000000`00000000
00000000`001af780  00000000`00000000 00000000`00000000
00000000`001af790  00000000`00000000 00000000`00000000
00000000`001af7a0  00000000`00000000 00000000`00000000
00000000`001af7b0  00000000`00000000 00000000`00000000
00000000`001af7c0  00000000`00000000 00000000`00000000
00000000`001af7d0  00000000`00000000 00000000`00000000
00000000`001af7e0  00000000`00000000 00000000`00000000
00000000`001af7f0  00000000`00000000 00000000`00000000
00000000`001af800  00000000`00000000 00000000`00000000
00000000`001af810  00000000`00000000 00000000`00000000
00000000`001af820  00000000`00000000 00000000`00000000
00000000`001af830  00000000`00000000 00000000`00000000
00000000`001af840  00000000`00000000 00000000`00000000
00000000`001af850  00000000`00000000 00000000`00000000
00000000`001af860  00000000`00000000 00000000`00000000
00000000`001af870  00000000`00000000 00000000`00000000
00000000`001af880  00000000`00000000 00000000`00000000
00000000`001af890  00000000`00000000 00000000`00000000
00000000`001af8a0  00000000`00000000 00000000`00000000
00000000`001af8b0  00000000`00000000 00000000`00000000
00000000`001af8c0  00000000`00000000 00000000`00000000
00000000`001af8d0  00000000`00000000 00000000`00000000
00000000`001af8e0  00000000`00000000 00000000`00000000
00000000`001af8f0  00000000`00000000 00000000`00000000
00000000`001af900  00000000`00000000 00000000`00000000
00000000`001af910  00000000`00000000 00000000`00000000
00000000`001af920  00000000`00000000 00000000`00000000
00000000`001af930  00000000`00000000 00000000`00000000
00000000`001af940  00000000`00000000 00000000`00000000
00000000`001af950  00000000`00000000 00000000`00000000
00000000`001af960  00000000`00000000 00000000`00000000
00000000`001af970  00000000`00000000 00000000`00000000
00000000`001af980  00000000`00000000 00000000`00000000
00000000`001af990  00000000`00000000 00000000`00000000
00000000`001af9a0  00000000`00000000 00000000`00000000
00000000`001af9b0  00000000`00000000 00000000`00000000
00000000`001af9c0  00000000`00000000 00000000`00000000
00000000`001af9d0  00000000`00000000 00000000`00000000
00000000`001af9e0  00000000`00000000 00000000`00000000
00000000`001af9f0  00000000`00000000 00000000`00000000
00000000`001afa00  00000000`00000000 00000000`00000000
00000000`001afa10  00000000`00000000 00000000`00000000
00000000`001afa20  00000000`00000000 00000000`00000000
00000000`001afa30  00000000`00000000 00000000`00000000
00000000`001afa40  00000000`00000000 00000000`00000000
00000000`001afa50  00000000`00000000 00000000`00000000
00000000`001afa60  00000000`00000000 00000000`00000000
00000000`001afa70  00000000`00000000 00000000`00000000
00000000`001afa80  00000000`00000000 00000000`00000000
00000000`001afa90  00000000`00000000 00000000`00000000
00000000`001afaa0  00000000`00000000 00000000`00000000
00000000`001afab0  00000000`00000000 00000000`00000000
00000000`001afac0  00000000`00000000 00000000`00000000
00000000`001afad0  00000000`00000000 00000000`00000000
00000000`001afae0  00000000`00000000 00000000`00000000
00000000`001afaf0  00000000`00000000 00000000`00000000
00000000`001afb00  00000000`00000000 00000000`00000000
00000000`001afb10  00000000`00000000 00000000`00000000
00000000`001afb20  00000000`00000000 00000000`00000000
00000000`001afb30  00000000`00000000 00000000`00000000
00000000`001afb40  00000000`00000000 00000000`00000000
00000000`001afb50  00000000`00000000 00000000`00000000
00000000`001afb60  00000000`00000000 00000000`00000000
00000000`001afb70  00000000`00000000 00000000`00000000
00000000`001afb80  00000000`00000000 00000000`00000000
00000000`001afb90  00000000`00000000 00000000`00000000
00000000`001afba0  00000000`00000000 00000000`00000000
00000000`001afbb0  00000000`00000000 00000000`00000000
00000000`001afbc0  00000000`00000000 00000000`00000000
00000000`001afbd0  00000000`00000000 00000000`00000000
00000000`001afbe0  00000000`00000000 00000000`00000000
00000000`001afbf0  00000000`00000000 00000000`00000000
00000000`001afc00  00000000`00000000 00000000`00000000
00000000`001afc10  00000000`00000000 00000000`00000000
00000000`001afc20  00000000`00000000 00000000`00000000
00000000`001afc30  00000000`00000000 00000000`00000000
00000000`001afc40  00000000`00000000 00000000`00000000
00000000`001afc50  00000000`00000000 00000000`00000000
00000000`001afc60  00000000`00000000 00000000`00000000
00000000`001afc70  00000000`00000000 00000000`00000000
00000000`001afc80  00000000`00000000 00000000`00000000
00000000`001afc90  00000000`00000000 00000000`00000000
00000000`001afca0  00000000`00000000 00000000`00000000
00000000`001afcb0  00000000`00000000 00000000`00000000
00000000`001afcc0  00000000`00000000 00000000`00000000
00000000`001afcd0  00000000`00000000 00000000`00000000
00000000`001afce0  00000000`00000000 00000000`00000000
00000000`001afcf0  00000000`00000000 00000000`00000000
00000000`001afd00  00000000`00000000 00000000`00000000
00000000`001afd10  00000000`00000000 00000000`00000000
00000000`001afd20  00000000`00000000 00000000`00000000
00000000`001afd30  00000000`00000000 00000000`00000000
00000000`001afd40  00000000`00000000 00000000`00000000
00000000`001afd50  00000000`00000000 00000000`00000000
00000000`001afd60  00000000`00000000 00000000`00000000
00000000`001afd70  00000000`00000000 00000000`00000000
00000000`001afd80  00000000`00000000 00000000`00000000
00000000`001afd90  00000000`00000000 00000000`00000000
00000000`001afda0  00000000`00000000 00000000`00000000
00000000`001afdb0  00000000`00000000 00000000`00000000
00000000`001afdc0  00000000`00000000 00000000`00000000
00000000`001afdd0  00000000`00000000 00000000`00000000
00000000`001afde0  00000000`00000000 00000000`00000000
00000000`001afdf0  00000000`00000000 00000000`00000000
00000000`001afe00  00000000`00000000 00000000`00000000
00000000`001afe10  00000000`00000000 00000000`00000000
00000000`001afe20  00000000`00000000 00000000`00000000
00000000`001afe30  00000000`00000000 00000000`00000000
00000000`001afe40  00000000`00000000 00000000`00000000
00000000`001afe50  00000000`00000000 00000000`00000000
00000000`001afe60  00000000`00000000 00000000`00000000
00000000`001afe70  00000000`00000000 00000000`00000000
00000000`001afe80  00000000`00000000 00000000`00000000
00000000`001afe90  00000000`00000000 00000000`00000000
00000000`001afea0  00000000`00000000 00000000`00000000
00000000`001afeb0  00000000`00000000 00000000`00000000
00000000`001afec0  00000000`00000000 00000000`00000000
00000000`001afed0  00000000`00000000 00000000`00000000
00000000`001afee0  00000000`00000000 00000000`00000000
00000000`001afef0  00000000`00000000 00000000`00000000
00000000`001aff00  00000000`00000000 00000000`00000000
00000000`001aff10  00000000`00000000 00000000`00000000
00000000`001aff20  00000000`00000000 00000000`00000000
00000000`001aff30  00000000`00000000 00000000`00000000
00000000`001aff40  00000000`00000000 00000000`00000000
00000000`001aff50  00000000`00000000 00000000`00000000
00000000`001aff60  00000000`00000000 00000000`00000000
00000000`001aff70  00000000`00000000 00000000`00000000
00000000`001aff80  00000000`00000000 00000000`00000000
00000000`001aff90  00000000`00000000 00000000`00000000
00000000`001affa0  00000000`00000000 00000000`00000000
00000000`001affb0  00000000`00000000 00000000`00000000
00000000`001affc0  00000000`00000000 00000000`00000000
00000000`001affd0  00000000`00000000 00000000`00000000
00000000`001affe0  00000000`00000000 00000000`00000000
00000000`001afff0  00000000`00000000 00000000`00000000
00000000`001b0000  00000000`00000020
0:000> dt _CONTEXT 001af4e0
ntdll!_CONTEXT
   +0x000 P1Home           : 0
   +0x008 P2Home           : 0
   +0x010 P3Home           : 0
   +0x018 P4Home           : 0
   +0x020 P5Home           : 0
   +0x028 P6Home           : 0
   +0x030 ContextFlags     : 0x10001b
   +0x034 MxCsr            : 0x1f80
   +0x038 SegCs            : 0x33
   +0x03a SegDs            : 0
   +0x03c SegEs            : 0
   +0x03e SegFs            : 0
   +0x040 SegGs            : 0
   +0x042 SegSs            : 0x2b
   +0x044 EFlags           : 0x200
   +0x048 Dr0              : 0
   +0x050 Dr1              : 0
   +0x058 Dr2              : 0
   +0x060 Dr3              : 0
   +0x068 Dr6              : 0
   +0x070 Dr7              : 0
   +0x078 Rax              : 0
   +0x080 Rcx              : 0x00000001`3fb31000
   +0x088 Rdx              : 0x000007ff`fffdf000
   +0x090 Rbx              : 0
   +0x098 Rsp              : 0x1af9b8
   +0x0a0 Rbp              : 0
   +0x0a8 Rsi              : 0
   +0x0b0 Rdi              : 0
   +0x0b8 R8               : 0
   +0x0c0 R9               : 0
   +0x0c8 R10              : 0
   +0x0d0 R11              : 0
   +0x0d8 R12              : 0
   +0x0e0 R13              : 0
   +0x0e8 R14              : 0
   +0x0f0 R15              : 0
   +0x0f8 Rip              : 0x76f8a540
   +0x100 FltSave          : _XSAVE_FORMAT
   +0x100 Header           : [2] _M128A
   +0x120 Legacy           : [8] _M128A
   +0x1a0 Xmm0             : _M128A
   +0x1b0 Xmm1             : _M128A
   +0x1c0 Xmm2             : _M128A
   +0x1d0 Xmm3             : _M128A
   +0x1e0 Xmm4             : _M128A
   +0x1f0 Xmm5             : _M128A
   +0x200 Xmm6             : _M128A
   +0x210 Xmm7             : _M128A
   +0x220 Xmm8             : _M128A
   +0x230 Xmm9             : _M128A
   +0x240 Xmm10            : _M128A
   +0x250 Xmm11            : _M128A
   +0x260 Xmm12            : _M128A
   +0x270 Xmm13            : _M128A
   +0x280 Xmm14            : _M128A
   +0x290 Xmm15            : _M128A
   +0x300 VectorRegister   : [26] _M128A
   +0x4a0 VectorControl    : 0
   +0x4a8 DebugControl     : 0
   +0x4b0 LastBranchToRip  : 0
   +0x4b8 LastBranchFromRip : 0
   +0x4c0 LastExceptionToRip : 0
   +0x4c8 LastExceptionFromRip : 0
0:000> !peb
PEB at 000007fffffdf000
    InheritedAddressSpace:    No
    ReadImageFileExecOptions: No
    BeingDebugged:            Yes
    ImageBaseAddress:         000000013f720000
    Ldr                       000000007708d640
    Ldr.Initialized:          Yes
    Ldr.InInitializationOrderModuleList: 00000000002b3690 . 00000000002b6bd0
    Ldr.InLoadOrderModuleList:           00000000002b3560 . 00000000002b7560
    Ldr.InMemoryOrderModuleList:         00000000002b3570 . 00000000002b7570
            Base TimeStamp                     Module
       13f720000 5a8b4bce Feb 20 01:12:30 2018 C:\Programs\CaptainFlintSW\hideconsole_hdls.exe
        76f60000 59b94ee4 Sep 13 18:29:40 2017 C:\Windows\SYSTEM32\ntdll.dll
        76e40000 59b94f29 Sep 13 18:30:49 2017 C:\Windows\system32\kernel32.dll
     7fefcf20000 59b94f2a Sep 13 18:30:50 2017 C:\Windows\system32\KERNELBASE.dll
        76d40000 5824a140 Nov 10 19:33:04 2016 C:\Windows\system32\USER32.dll
     7fefd010000 59b2b7a8 Sep 08 18:30:48 2017 C:\Windows\system32\GDI32.dll
     7fefda20000 59debda5 Oct 12 03:56:05 2017 C:\Windows\system32\LPK.dll
     7feff1a0000 599464f6 Aug 16 18:29:58 2017 C:\Windows\system32\USP10.dll
     7fefee10000 4eeb033f Dec 16 11:37:19 2011 C:\Windows\system32\msvcrt.dll
     7fefd560000 4a5bdf40 Jul 14 04:28:32 2009 C:\Windows\system32\IMM32.DLL
     7fefd0a0000 59b94ec5 Sep 13 18:29:09 2017 C:\Windows\system32\MSCTF.dll
    SubSystemData:     0000000000000000
    ProcessHeap:       00000000002b0000
    ProcessParameters: 00000000002b26e0
    CurrentDirectory:  'C:\Program Files (x86)\Windows Kits\10\Debuggers\'
    WindowTitle:  'C:\Programs\CaptainFlintSW\hideconsole_hdls.exe'
    ImageFile:    'C:\Programs\CaptainFlintSW\hideconsole_hdls.exe'
    CommandLine:  'C:\Programs\CaptainFlintSW\hideconsole_hdls.exe'
    DllPath:      'C:\Programs\CaptainFlintSW;;C:\Windows\system32;C:\Windows\system;C:\Windows;.;C:\Program Files (x86)\Windows Kits\10\Debuggers\x64;C:\Programs\Perl\site\bin;C:\Programs\Perl\bin;C:\Programs\Python\;C:\Programs\Python\Scripts\;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Program Files\EmEditor;C:\Program Files\Diskeeper Corporation\Undelete\;C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\;C:\Program Files\Microsoft SQL Server\110\Tools\Binn\;C:\Program Files (x86)\Microsoft SDKs\TypeScript\1.0\;C:\Program Files (x86)\Windows Phone TShell\;C:\Program Files\OnlyOffice\converter;C:\Program Files\TortoiseGit\bin;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Tools;C:\Programs\Sysinternals;C:\Programs\Git\bin'
    Environment:  00000000002b1380
        =::=::\
        ALLUSERSPROFILE=C:\ProgramData
        APPDATA=C:\Users\CaptainFlint\AppData\Roaming
        CommonProgramFiles=C:\Program Files\Common Files
        CommonProgramFiles(x86)=C:\Program Files (x86)\Common Files
        CommonProgramW6432=C:\Program Files\Common Files
        COMPUTERNAME=KVLASOV
        ComSpec=C:\Windows\system32\cmd.exe
        DEVMGR_SHOW_NONPRESENT_DEVICES=1
        EMAIL=T:\AppData\The Bat!
        FP_NO_HOST_CHECK=NO
        HOMEDRIVE=C:
        HOMEPATH=\Users\CaptainFlint
        LOCALAPPDATA=C:\Users\CaptainFlint\AppData\Local
        LOGONSERVER=\\KVLASOV
        NUMBER_OF_PROCESSORS=8
        OS=Windows_NT
        Path=C:\Program Files (x86)\Windows Kits\10\Debuggers\x64;C:\Programs\Perl\site\bin;C:\Programs\Perl\bin;C:\Programs\Python\;C:\Programs\Python\Scripts\;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Program Files\EmEditor;C:\Program Files\Diskeeper Corporation\Undelete\;C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\;C:\Program Files\Microsoft SQL Server\110\Tools\Binn\;C:\Program Files (x86)\Microsoft SDKs\TypeScript\1.0\;C:\Program Files (x86)\Windows Phone TShell\;C:\Program Files\OnlyOffice\converter;C:\Program Files\TortoiseGit\bin;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Tools;C:\Programs\Sysinternals;C:\Programs\Git\bin
        PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.py;.pyw
        PROCESSOR_ARCHITECTURE=AMD64
        PROCESSOR_IDENTIFIER=Intel64 Family 6 Model 60 Stepping 3, GenuineIntel
        PROCESSOR_LEVEL=6
        PROCESSOR_REVISION=3c03
        ProgramData=C:\ProgramData
        ProgramFiles=C:\Program Files
        ProgramFiles(x86)=C:\Program Files (x86)
        ProgramW6432=C:\Program Files
        PSModulePath=C:\Windows\system32\WindowsPowerShell\v1.0\Modules\
        PUBLIC=C:\Users\Public
        SESSIONNAME=Console
        SystemDrive=C:
        SystemRoot=C:\Windows
        TEMP=C:\Users\CAPTAI~1\AppData\Local\Temp
        TMP=C:\Users\CAPTAI~1\AppData\Local\Temp
        USERDOMAIN=KVlasov
        USERNAME=CaptainFlint
        USERPROFILE=C:\Users\CaptainFlint
        VBOX_MSI_INSTALL_PATH=C:\Program Files\Oracle\VirtualBox\
        VS110COMNTOOLS=C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\Tools\
        VS120COMNTOOLS=C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools\
        VS140COMNTOOLS=C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools\
        VSSDK140Install=C:\Program Files (x86)\Microsoft Visual Studio 14.0\VSSDK\
        WINDBG_DIR=C:\Program Files (x86)\Windows Kits\10\Debuggers\x64
        windir=C:\Windows
        windows_tracing_flags=3
        windows_tracing_logfile=C:\BVTBin\Tests\installpackage\csilogfile.log
0:000> ~*k

.  0  Id: 2200.3104 Suspend: 1 Teb: 000007ff`fffdd000 Unfrozen
 # Child-SP          RetAddr           Call Site
00 00000000`001af418 00000000`76f8a474 ntdll!NtTestAlert
01 00000000`001af420 00000000`76f8a36e ntdll!LdrpInitialize+0xa4
02 00000000`001af490 00000000`00000000 ntdll!LdrInitializeThunk+0xe

Эх, как бы эти "третьи силы" теперь ущучить… желательно без ядерного отладчика и без "раздевания" системы от всех установленных программ…
Почему же, ё-моё, ты нигде не пишешь «ё»?
Re[2]: Программа крэшится до точки входа, на стадии загрузки
От: CaptainFlint Россия http://flint-inc.ru/
Дата: 27.02.18 18:06
Оценка:
Здравствуйте, EreTIk, Вы писали:

ETI>На уровне предположения: внешний процесс создал нить с точкой входа в 0x000000013F4B1000, не рассчитав отсутствие в целевом процессе какой-то DLL. Надо при падении посмотреть является ли текущая нить главной нитью этого процесса, для WinDbg команда просмотра нитей с их стеками: ~*k


Поток один-единственный. (Разве что до бряка успевает создасться, нагадить и завершиться.) Да и как-то странно было бы, что для некоторых запусков (и после модификации файла) эти потоки не создаются (иначе в "нормальных условиях" я бы всегда получал RCX, указывающий не на мою точку входа, а на что-то внешнее, и лишь потом — ещё раз останов уже с моей точкой).

ETI>Если еще удастся поймать падение — сделайте полный дамп для анализа (из WinDbg: .dump /mfh /b dump.cab).


Падение я зафиксировал, для основной работы просто скопировал файлы под другим именем, а "сбойный" оставил без модификаций для дальнейшего анализа.
Вот дамп: https://yadi.sk/d/Od9aQ5hD3SqNxd
Почему же, ё-моё, ты нигде не пишешь «ё»?
Re[3]: Программа крэшится до точки входа, на стадии загрузки
От: EreTIk EreTIk's Box
Дата: 27.02.18 19:27
Оценка:
CF>Падение я зафиксировал, для основной работы просто скопировал файлы под другим именем, а "сбойный" оставил без модификаций для дальнейшего анализа.
Кто и как (какой функцией) запускает этот процесс?
Re[4]: Программа крэшится до точки входа, на стадии загрузки
От: CaptainFlint Россия http://flint-inc.ru/
Дата: 27.02.18 20:29
Оценка:
Здравствуйте, EreTIk, Вы писали:

CF>>Падение я зафиксировал, для основной работы просто скопировал файлы под другим именем, а "сбойный" оставил без модификаций для дальнейшего анализа.

ETI>Кто и как (какой функцией) запускает этот процесс?

Как минимум, прямой вызов CreateProcess (фактически, я натравил рабочую копию этой же программулины на запуск "сломанной" копии, а там у меня применяется CreateProcess). Также попробовал запустить через альтернативный вариант этой же прожки, где CreateProcess дёргается с другими параметрами (без перезачи STD-хэндлов и с bInheritHandles==FALSE), результат аналогичный (если что, код второй прожки тут).

Среди других способов я не могу с уверенностью сказать, какой API применяется в них, но это: запуск из перлового скрипта (оператор "бэктик" для запуска с чтением вывода stdout), из Total Commander (double-click, Enter), из Проводника, из cmd.exe, из Task Scheduler'а (запуск с повышенными привилегиями при логине — не для этой конкретной программы, но для другой, тоже без CRT, с которой тоже иногда проявляется подобный крэш), из WinDbg (Open executable, Debug -> Go).
Почему же, ё-моё, ты нигде не пишешь «ё»?
Re[2]: Программа крэшится до точки входа, на стадии загрузки
От: кт  
Дата: 28.02.18 12:31
Оценка:
Здравствуйте, CaptainFlint, Вы писали:

CF>>Асмовый код в точке падения:

CF>>
CF>>BaseThreadInitThunk:
CF>>0000000076E559C0 sub  rsp,28h  
CF>>0000000076E559C4 test ecx,ecx  
CF>>0000000076E559C6 jne  BaseThreadInitThunk+16h (076E559D6h)  
CF>>0000000076E559C8 mov  rcx,r8  
CF>>0000000076E559CB call rdx  
CF>>

CF>>Падает, собственно, CALL. rdx тут равен вот этому самому 0x000000013F4B1000, а по этому адресу светятся одни вопросики. Видимо, несуществующая страница, отсюда и access denied. Но как он пришёл к такому состоянию, я не могу понять, не хватает опыта низкоуровневой отладки.

Что-то код выглядит странновато. Вроде sub rsp,28h показывает, что при вызове будет 5 параметров. Но параметры передаются через RCX, RDX, R8, R9 и пятый через стек.
А здесь получается, что запускается подпрограмма как 2-ой параметр? Непонятно. А чуть ниже есть еще какие-нибудь вызовы?
Re[3]: Программа крэшится до точки входа, на стадии загрузки
От: CaptainFlint Россия http://flint-inc.ru/
Дата: 28.02.18 12:50
Оценка:
Здравствуйте, кт, Вы писали:

кт>Что-то код выглядит странновато. Вроде sub rsp,28h показывает, что при вызове будет 5 параметров. Но параметры передаются через RCX, RDX, R8, R9 и пятый через стек.

кт>А здесь получается, что запускается подпрограмма как 2-ой параметр? Непонятно. А чуть ниже есть еще какие-нибудь вызовы?

Вот полный код функции:
BaseThreadInitThunk:
0000000076E559C0  sub         rsp,28h  
0000000076E559C4  test        ecx,ecx  
0000000076E559C6  jne         BaseThreadInitThunk+16h (076E559D6h)  
0000000076E559C8  mov         rcx,r8  
0000000076E559CB  call        rdx  
0000000076E559CD  mov         ecx,eax  
0000000076E559CF  call        qword ptr [__imp_RtlExitUserThread (076EDCE88h)]  
0000000076E559D5  int         3  
0000000076E559D6  test        byte ptr [7FFE02D0h],10h  
0000000076E559DE  je          BaseThreadInitThunk+4Fh (076E55A0Fh)  
0000000076E559E0  mov         rax,qword ptr gs:[30h]  
0000000076E559E9  mov         rcx,qword ptr [rax+60h]  
0000000076E559ED  mov         rcx,qword ptr [rcx+10h]  
0000000076E559F1  call        qword ptr [__imp_RtlImageNtHeader (076EDC7C0h)]  
0000000076E559F7  test        rax,rax  
0000000076E559FA  je          TlsGetValue+178FBh (076E78E9Bh)  
0000000076E55A00  mov         ecx,8000h  
0000000076E55A05  test        word ptr [rax+5Eh],cx  
0000000076E55A09  je          TlsGetValue+178FBh (076E78E9Bh)  
0000000076E55A0F  xor         eax,eax  
0000000076E55A11  add         rsp,28h  
0000000076E55A15  ret
Почему же, ё-моё, ты нигде не пишешь «ё»?
Re[4]: Программа крэшится до точки входа, на стадии загрузки
От: кт  
Дата: 28.02.18 13:51
Оценка:
Здравствуйте, CaptainFlint, Вы писали:

CF>Вот полный код функции:

CF>
CF>BaseThreadInitThunk:
CF>0000000076E559C0  sub         rsp,28h  
CF>0000000076E559C4  test        ecx,ecx  
CF>0000000076E559C6  jne         BaseThreadInitThunk+16h (076E559D6h)  
CF>0000000076E559C8  mov         rcx,r8  
CF>0000000076E559CB  call        rdx  
CF>0000000076E559CD  mov         ecx,eax  
CF>0000000076E559CF  call        qword ptr [__imp_RtlExitUserThread (076EDCE88h)]  
CF>0000000076E559D5  int         3  
CF>0000000076E559D6  test        byte ptr [7FFE02D0h],10h  
CF>0000000076E559DE  je          BaseThreadInitThunk+4Fh (076E55A0Fh)  
CF>0000000076E559E0  mov         rax,qword ptr gs:[30h]  
CF>0000000076E559E9  mov         rcx,qword ptr [rax+60h]  
CF>0000000076E559ED  mov         rcx,qword ptr [rcx+10h]  
CF>0000000076E559F1  call        qword ptr [__imp_RtlImageNtHeader (076EDC7C0h)]  
CF>0000000076E559F7  test        rax,rax  
CF>0000000076E559FA  je          TlsGetValue+178FBh (076E78E9Bh)  
CF>0000000076E55A00  mov         ecx,8000h  
CF>0000000076E55A05  test        word ptr [rax+5Eh],cx  
CF>0000000076E55A09  je          TlsGetValue+178FBh (076E78E9Bh)  
CF>0000000076E55A0F  xor         eax,eax  
CF>0000000076E55A11  add         rsp,28h  
CF>0000000076E55A15  ret  
CF>


Тогда понятно. Но это может не причина, а уже далекое следствие

По-моему эта функция делает две вещи, в зависимости от 1-ого параметра 0/1. Она или собственно запускает программу или проверяет можно ли ее запустить (т.е. у нее правильный ли заголовок).

Тогда call rdx — это и есть сам запуск программы. Т.е. это всего лишь вызов входной точки в заголовке EXE. А вот почему такой адрес при вызове — это вопрос.
Кстати, Entry Point в заголовке EXE, наверное, не такой?
Может запретить загружать EXE по любым адресам?
Re[5]: Программа крэшится до точки входа, на стадии загрузки
От: CaptainFlint Россия http://flint-inc.ru/
Дата: 28.02.18 14:23
Оценка:
Здравствуйте, кт, Вы писали:

кт>Тогда понятно. Но это может не причина, а уже далекое следствие


На момент создания темы я этого не знал, отписал то, до чего смог сам докопаться.

кт>По-моему эта функция делает две вещи, в зависимости от 1-ого параметра 0/1. Она или собственно запускает программу или проверяет можно ли ее запустить (т.е. у нее правильный ли заголовок).


кт>Тогда call rdx — это и есть сам запуск программы. Т.е. это всего лишь вызов входной точки в заголовке EXE. А вот почему такой адрес при вызове — это вопрос.

кт>Кстати, Entry Point в заголовке EXE, наверное, не такой?

Тут в параллельной ветке уже добрались до того, что ещё до процитированной функции адрес точки входа должен лежать в RCX (в RDX он копируется уже потом), а по факту там лежит что-то другое (хотя и близкорасположенное), указывающее на несуществующую страницу. Причины пока неясны.

кт>Может запретить загружать EXE по любым адресам?


Да, у меня тоже такая мысль возникла. Я уже перекомпилял с соответствующей опцией и вставил этот вариант для постоянного использования, но надо ждать, пока воспроизведётся (если воспроизведётся). Но даже если это починит проблему, хочется понять, что происходит. Починить-то я смог и банальным возвратом CRT.
Почему же, ё-моё, ты нигде не пишешь «ё»?
Re[6]: Программа крэшится до точки входа, на стадии загрузки
От: кт  
Дата: 01.03.18 02:48
Оценка:
Здравствуйте, CaptainFlint, Вы писали:

кт>>Тогда понятно. Но это может не причина, а уже далекое следствие


CF>На момент создания темы я этого не знал, отписал то, до чего смог сам докопаться.


кт>>По-моему эта функция делает две вещи, в зависимости от 1-ого параметра 0/1. Она или собственно запускает программу или проверяет можно ли ее запустить (т.е. у нее правильный ли заголовок).


кт>>Тогда call rdx — это и есть сам запуск программы. Т.е. это всего лишь вызов входной точки в заголовке EXE. А вот почему такой адрес при вызове — это вопрос.

кт>>Кстати, Entry Point в заголовке EXE, наверное, не такой?

CF>Тут в параллельной ветке уже добрались до того, что ещё до процитированной функции адрес точки входа должен лежать в RCX (в RDX он копируется уже потом), а по факту там лежит что-то другое (хотя и близкорасположенное), указывающее на несуществующую страницу. Причины пока неясны.


кт>>Может запретить загружать EXE по любым адресам?


CF>Да, у меня тоже такая мысль возникла. Я уже перекомпилял с соответствующей опцией и вставил этот вариант для постоянного использования, но надо ждать, пока воспроизведётся (если воспроизведётся). Но даже если это починит проблему, хочется понять, что происходит. Починить-то я смог и банальным возвратом CRT.


Не считаю себя параноиком. Но здесь почему-то мерещится что-то вирусообразное.
Уж больно место нехорошее. Типа подмена вызова программы своим вызовом, но потом что-то идет не так.
Если бы я писал вирус понезаметнее, постарался бы исправить код как раз в этой точке.
Re[7]: Программа крэшится до точки входа, на стадии загрузки
От: okman Беларусь https://searchinform.ru/
Дата: 01.03.18 08:04
Оценка: 8 (3)
Здравствуйте, CaptainFlint, Вы писали:

CF>...

CF>Эх, как бы эти "третьи силы" теперь ущучить… желательно без ядерного отладчика и без "раздевания" системы от всех установленных программ…

Кажется, я начинаю догадываться, в чем может быть дело.
У приложения нет секции .reloc (релоков), т.е. исполняемый модуль не поддерживает загрузку по произвольному адресу:

(все лишнее поскипано)

> !dh hideconsole_hdls
       
SECTION HEADER #1
   .text name

       0 file pointer to relocation table
       0 number of relocations

SECTION HEADER #2
  .rdata name

SECTION HEADER #3
  .pdata name

SECTION HEADER #4
   .rsrc name


Но при этом указаны флаги 'Dynamic base' и 'High entropy VA supported', работа которых основывается как раз
на релокациях исполняемого модуля в памяти по рандомным адресам:

OPTIONAL HEADER VALUES

    8160  DLL characteristics
            High entropy VA supported
            Dynamic base
            NX compatible
            Terminal server aware


Также важно, что в заголовке не указан флаг 'Relocations stripped' (см. опцию /FIXED компоновщика), по которому
система могла бы точно понять, что приложение должно загружаться по строго фиксированному адресу:

FILE HEADER VALUES

      22 characteristics
            Executable
            App can handle >2gb addresses
         -> нету здесь больше ничего :)


Косвенно на проблему указывает это: "когда я ради эксперимента переделал проект на CRT-шный, проблемы прекратились".
Как я понимаю, CRT добавляет секцию .reloc.

И еще одно наблюдение (подсмотрено в дампе).

Команда !dh выдает 13f310000 image base, т.е. 13f310000 — предпочтительный адрес загрузки модуля в память.
Сам модуль был загружен (и релоцирован) по адресу 13f720000 (команда lmv m hideconsole_hdls).
А исключение возникло при попытке доступа к адресу 13fb31000 (см. !analyze -v).

Так вот, 13f720000 — 13f310000 = 410000.
Но что интересно, 13fb31000 — 13f720000 = 411000.
Т.е. разница между предпочтительным и реальным адресом загрузки модуля такая же, как между реальным адресом
загрузки и адресом, где произошло исключение. 1000 не в счет, это оффсет от начала загрузки модуля до точки входа.

Вот только я уж и не знаю, баг ли это в системе или в Visual Studio, которая позволяет
задавать "противоречивые" настройки компоновки...
Re[8]: Программа крэшится до точки входа, на стадии загрузки
От: CaptainFlint Россия http://flint-inc.ru/
Дата: 01.03.18 22:10
Оценка:
Здравствуйте, okman, Вы писали:

O>Кажется, я начинаю догадываться, в чем может быть дело.

O>У приложения нет секции .reloc (релоков), т.е. исполняемый модуль не поддерживает загрузку по произвольному адресу:

Вот так находка!
Большущее спасибо, буду разбираться с опциями. Пока что только успел попробовать /FIXED:NO, но он релокаций не добавил (что ожидаемо, ибо это и так умолчальное значение для программ), а на большее времени пока не удалось выкроить. Плюс возникли непонятки, чем вообще отличаются опции /FIXED:NO и /DYNAMICBASE…
Почему же, ё-моё, ты нигде не пишешь «ё»?
Re[9]: Программа крэшится до точки входа, на стадии загрузки
От: okman Беларусь https://searchinform.ru/
Дата: 02.03.18 05:57
Оценка: 3 (1)
Здравствуйте, CaptainFlint, Вы писали:

CF>Пока что только успел попробовать /FIXED:NO, но он релокаций не добавил (что ожидаемо, ибо это и

CF>так умолчальное значение для программ), а на большее времени пока не удалось выкроить.

Релокаций здесь не добавлено, потому что код очень компактный и без CRT.
Видимо, он получился полностью базонезависимым и секция релоков ему просто не нужна.

CF>...чем вообще отличаются опции /FIXED:NO и /DYNAMICBASE…


Когда указан флаг 'FIXED:NO', генерируется секция релоков, но система все равно в
первую очередь будет пытаться загружать модуль по предпочтительному адресу
, и
только если это невозможно, например адрес уже занят другим модулем, будет
перемещать его.

Когда указан флаг 'DYNAMICBASE', система сразу пытается загружать модуль по
произвольному адресу
(рандомному, см. технологию ASLR). HIGHENTROPYVA добавляет
еще больше рандомности в этот процесс.

Разница, насколько я понимаю, лишь в этом.

Кстати, на последних Виндах можно программно запретить запуск приложений, скомпиленных
без поддержки релоков + ASLR, см. SetProcessMitigationPolicy + ProcessASLRPolicy.
Re[10]: Программа крэшится до точки входа, на стадии загрузки
От: CaptainFlint Россия http://flint-inc.ru/
Дата: 02.03.18 07:36
Оценка:
Здравствуйте, okman, Вы писали:

CF>>Пока что только успел попробовать /FIXED:NO, но он релокаций не добавил (что ожидаемо, ибо это и

CF>>так умолчальное значение для программ), а на большее времени пока не удалось выкроить.

O>Релокаций здесь не добавлено, потому что код очень компактный и без CRT.

O>Видимо, он получился полностью базонезависимым и секция релоков ему просто не нужна.

Но ведь если бы он получился базонезависимым, то проблема бы не возникла? Раньше же говорилось:
>У приложения нет секции .reloc (релоков), т.е. исполняемый модуль не поддерживает загрузку по произвольному адресу:


O>Когда указан флаг 'FIXED:NO', генерируется секция релоков, но система все равно в

O>первую очередь будет пытаться загружать модуль по предпочтительному адресу
, и
O>только если это невозможно, например адрес уже занят другим модулем, будет
O>перемещать его.

O>Когда указан флаг 'DYNAMICBASE', система сразу пытается загружать модуль по

O>произвольному адресу (рандомному, см. технологию ASLR). HIGHENTROPYVA добавляет
O>еще больше рандомности в этот процесс.

O>Разница, насколько я понимаю, лишь в этом.


Примерно так я и подумал, но потом задумался: а с точки зрения исполняемого файла-то какая разница? Либо он поддерживает загрузку по произвольному адресу, либо не поддерживает. А уж всегда система будет его пытаться перемещать или только иногда — это уже её, системы, дело.
Почему же, ё-моё, ты нигде не пишешь «ё»?
Re[11]: Программа крэшится до точки входа, на стадии загрузк
От: okman Беларусь https://searchinform.ru/
Дата: 02.03.18 09:39
Оценка:
Здравствуйте, CaptainFlint, Вы писали:

O>>Релокаций здесь не добавлено, потому что код очень компактный и без CRT.

O>>Видимо, он получился полностью базонезависимым и секция релоков ему просто не нужна.

CF>Но ведь если бы он получился базонезависимым, то проблема бы не возникла? Раньше же говорилось:

>>У приложения нет секции .reloc (релоков), т.е. исполняемый модуль не поддерживает загрузку по произвольному адресу:

Мне кажется, проблема возникает из-за того, что DYNAMICBASE и/или HIGHENTROPYVA не могут работать правильно,
если у модуля нет релоков. Даже если там полностью базонезависимый код и ему эти релоки не нужны.

Создание модуля без CRT — это сам по себе достаточно редкий сценарий и вряд ли Microsoft тестирует его
так тщательно, как требуется.

Возможно, это какой-то баг в системном загрузчике модулей. Больше пока добавить нечего

Возможно, я вообще заблуждаюсь и на самом деле проблема 0xC0000005 кроется где-то в совершенно другом месте.
Отредактировано 02.03.2018 9:40 okman . Предыдущая версия .
Re[11]: Программа крэшится до точки входа, на стадии загрузки
От: EreTIk EreTIk's Box
Дата: 02.03.18 10:52
Оценка:
Здравствуйте, CaptainFlint, Вы писали:

CF>Но ведь если бы он получился базонезависимым, то проблема бы не возникла? Раньше же говорилось:


Проблема возникает у запускающего процесса: родительскому процессу надо указать точку входа в первую нить процесса. У проблемного файла какой image base указан в заголовке файла на диске? Случайно не 000000013fb30000 == 000000013fb31000 (точка падения) — 1000 (entry point) ?
Re[8]: Программа крэшится до точки входа, на стадии загрузки
От: drVanо Россия https://vmpsoft.com
Дата: 05.03.18 14:13
Оценка:
Здравствуйте, okman, Вы писали:

CF>>Эх, как бы эти "третьи силы" теперь ущучить… желательно без ядерного отладчика и без "раздевания" системы от всех установленных программ…


O>Кажется, я начинаю догадываться, в чем может быть дело.

O>У приложения нет секции .reloc (релоков), т.е. исполняемый модуль не поддерживает загрузку по произвольному адресу:

Релоки для вызова EntryPoint НЕ НУЖНЫ!

P.S. Дя и судя по всему процесс 64-х битный где с вероятностью 99.9% релоки не нужны и всему остальному (курить мануалы про RIP адресацию).
Отредактировано 05.03.2018 14:17 drVanо . Предыдущая версия .
Re[9]: Программа крэшится до точки входа, на стадии загрузки
От: CaptainFlint Россия http://flint-inc.ru/
Дата: 05.03.18 14:32
Оценка:
Здравствуйте, drVanо, Вы писали:

V>Релоки для вызова EntryPoint НЕ НУЖНЫ!


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

V>P.S. Дя и судя по всему процесс 64-х битный где с вероятностью 99.9% релоки не нужны и всему остальному (курить мануалы про RIP адресацию).


Тем не менее, когда собираю с CRT, таблица релоков появляется.
Почему же, ё-моё, ты нигде не пишешь «ё»?
Re[12]: Программа крэшится до точки входа, на стадии загрузки
От: CaptainFlint Россия http://flint-inc.ru/
Дата: 05.03.18 14:33
Оценка:
Здравствуйте, EreTIk, Вы писали:

CF>>Но ведь если бы он получился базонезависимым, то проблема бы не возникла? Раньше же говорилось:


ETI>Проблема возникает у запускающего процесса: родительскому процессу надо указать точку входа в первую нить процесса. У проблемного файла какой image base указан в заголовке файла на диске? Случайно не 000000013fb30000 == 000000013fb31000 (точка падения) — 1000 (entry point) ?


Image base: 0000000140000000
Почему же, ё-моё, ты нигде не пишешь «ё»?
Re[10]: Программа крэшится до точки входа, на стадии загрузки
От: drVanо Россия https://vmpsoft.com
Дата: 05.03.18 14:40
Оценка:
Здравствуйте, CaptainFlint, Вы писали:

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


Больше похоже на баг в каком-нить гавноантивирусе.

CF>Тем не менее, когда собираю с CRT, таблица релоков появляется.


Вы бы хоть скинули ссылку на сам бинарник без CRT.
Re[8]: Программа крэшится до точки входа, на стадии загрузки
От: drVanо Россия https://vmpsoft.com
Дата: 05.03.18 14:46
Оценка:
Здравствуйте, okman, Вы писали:

O>
O>OPTIONAL HEADER VALUES

O>    8160  DLL characteristics
O>            High entropy VA supported
O>            Dynamic base
O>            NX compatible
O>            Terminal server aware
O>


O>Также важно, что в заголовке не указан флаг 'Relocations stripped' (см. опцию /FIXED компоновщика), по которому

O>система могла бы точно понять, что приложение должно загружаться по строго фиксированному адресу:

Насколько я знаю 'Relocations stripped' вообще никак не влияет на загрузку имейджа по разным адресам. Влияет только 'Dynamic base'
Re[11]: Программа крэшится до точки входа, на стадии загрузки
От: CaptainFlint Россия http://flint-inc.ru/
Дата: 05.03.18 15:34
Оценка:
Здравствуйте, drVanо, Вы писали:

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


V>Больше похоже на баг в каком-нить гавноантивирусе.


Проявляется одинаково на двух машинах. На одной KAV, на другой только предустановленный Defender. Оба пробовал отключать, безрезультатно (хотя понимаю, что без деинсталляции это неполная проверка).

CF>>Тем не менее, когда собираю с CRT, таблица релоков появляется.


V>Вы бы хоть скинули ссылку на сам бинарник без CRT.


Вот проблематичный вариант (/DINAMICBASE, без CRT): https://yadi.sk/d/XTeelPX33T3g5K

На всякий случай, выкладываю прочие тестовые варианты:
с CRT: https://yadi.sk/d/g-PEPVaO3T3g55
без CRT, /DYNAMICBASE:NO /FIXED:NO : https://yadi.sk/d/4rDSscRR3T3g5B
без CRT, /DYNAMICBASE:NO /FIXED : https://yadi.sk/d/ZGUM0H-f3T3g5D

По заголовкам видно, что хоть релоков нет ни у одного из бес-CRT-шных вариантов, флаг IMAGE_FILE_RELOCS_STRIPPED имеется только у /FIXED. Именно этот вариант я сейчас использую как основной, и он пока ни разу не падал.
Почему же, ё-моё, ты нигде не пишешь «ё»?
Re[12]: Программа крэшится до точки входа, на стадии загрузки
От: drVanо Россия https://vmpsoft.com
Дата: 05.03.18 16:06
Оценка:
Здравствуйте, CaptainFlint, Вы писали:

CF>На всякий случай, выкладываю прочие тестовые варианты:

CF>с CRT: https://yadi.sk/d/g-PEPVaO3T3g55
CF>без CRT, /DYNAMICBASE:NO /FIXED:NO : https://yadi.sk/d/4rDSscRR3T3g5B
CF>без CRT, /DYNAMICBASE:NO /FIXED : https://yadi.sk/d/ZGUM0H-f3T3g5D

CF>По заголовкам видно, что хоть релоков нет ни у одного из бес-CRT-шных вариантов, флаг IMAGE_FILE_RELOCS_STRIPPED имеется только у /FIXED. Именно этот вариант я сейчас использую как основной, и он пока ни разу не падал.


Конечно их нет при "/DYNAMICBASE:NO"
Re: Программа крэшится до точки входа, на стадии загрузки
От: кт  
Дата: 08.03.18 10:08
Оценка:
Кажется, мелочь одну забыли глянуть. Когда падает — по указанному адресу память не выделена (в отладчике вопросительные знаки). Но в этом случае по заданному ENTRY POINT адресу все нормально?
Там действительно адрес первой команды?
Re[2]: Программа крэшится до точки входа, на стадии загрузки
От: CaptainFlint Россия http://flint-inc.ru/
Дата: 08.03.18 10:25
Оценка:
Здравствуйте, кт, Вы писали:

кт>Кажется, мелочь одну забыли глянуть. Когда падает — по указанному адресу память не выделена (в отладчике вопросительные знаки). Но в этом случае по заданному ENTRY POINT адресу все нормально?

кт>Там действительно адрес первой команды?

Если взять адрес, по которому загружен модуль (с точки зрения отладчика), и перейти по этому адресу +1000, то да, там мой код.
Почему же, ё-моё, ты нигде не пишешь «ё»?
Re[3]: Программа крэшится до точки входа, на стадии загрузки
От: кт  
Дата: 08.03.18 11:23
Оценка:
Здравствуйте, CaptainFlint, Вы писали:

CF>Если взять адрес, по которому загружен модуль (с точки зрения отладчика), и перейти по этому адресу +1000, то да, там мой код.


Ожидаемо, но и непонятно. Отладчик ведь не сам загружает файл, а выполняет стандартные действия операционной системы. При этом все нормально, файл загрузился на "свое" место. И вдруг вместо Entry Point только что загруженного файла вызов по непонятному адресу. Разгадка должна находиться где-то в предыдущей сотне выполненных команд.
Re: Программа крэшится до точки входа, на стадии загрузки
От: ononim  
Дата: 09.03.18 14:52
Оценка:
Когда не крэшится, запуститесь по windbg и выполните в нем команду:
sxe ld
..и проследите какие модули будут подгружаться в ваш процесс. Все очень похоже на крэш изза когото кто извне заинжектить чета пытается. Первое подозрение — на security сьюты
Как много веселых ребят, и все делают велосипед...
Re: Программа крэшится до точки входа, на стадии загрузки
От: CaptainFlint Россия http://flint-inc.ru/
Дата: 25.05.18 14:33
Оценка: 8 (1)
Что-то вылетела у меня из головы эта темка… Поковырялся и забыл. Чтобы не висела совсем уж в воздухе, отпишусь тут о результатах.

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

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

Спасибо всем за помощь и участие!
Почему же, ё-моё, ты нигде не пишешь «ё»?
Re[2]: Программа крэшится до точки входа, на стадии загрузки
От: reversecode google
Дата: 25.05.18 17:18
Оценка:
CF>В итоге я попробовал взять исходный проблемный файл, в котором и динамическая база, и релоков нет, и флага об отсутствии релоков нет, и просто воткнуть прямо в заголовок скомпилированного файла этот флаг (IMAGE_FILE_RELOCS_STRIPPED). Сделал это уже давно (не меньше месяца назад)

это отключает ASLR
а падало потому что винда в процессе работы может образ файла двигать в памяти
Re[3]: Программа крэшится до точки входа, на стадии загрузки
От: flаt  
Дата: 25.05.18 17:52
Оценка:
Здравствуйте, reversecode, Вы писали:


R>а падало потому что винда в процессе работы может образ файла двигать в памяти


Правда может?
Re[4]: Программа крэшится до точки входа, на стадии загрузки
От: reversecode google
Дата: 25.05.18 18:19
Оценка:
F>Правда может?

вы дебагером когда нибудь пользовались ?
в нём это хорошо видно
Re[5]: Программа крэшится до точки входа, на стадии загрузки
От: flаt  
Дата: 25.05.18 18:27
Оценка:
Здравствуйте, reversecode, Вы писали:


R>вы дебагером когда нибудь пользовались ?

R>в нём это хорошо видно

Как-то не догадывался запоминать и сравнивать адреса модулей в процессе отладки. А пруфа в печатном виде нет, случаем?

Но всё равно не верится, что это возможно. К примеру, возьмём среднестатический бинарик со статическим, опять же, объектом. И ссылку на него (ака адрес).
Если система вдруг вздумает переместить модуль по другому адресу в памяти, то адрес объекта станет недействительным.
Re[3]: Программа крэшится до точки входа, на стадии загрузки
От: CaptainFlint Россия http://flint-inc.ru/
Дата: 25.05.18 18:56
Оценка:
Здравствуйте, reversecode, Вы писали:

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


R>это отключает ASLR

R>а падало потому что винда в процессе работы может образ файла двигать в памяти

А каким макаром ASLR к отсутствию релоков? Казалось бы, наоборот, ничего релоцировать не надо, хочешь — двигай. Собственно, оно и двигало, только забывало известить вторую свою же половину о собственных движениях.
Почему же, ё-моё, ты нигде не пишешь «ё»?
Re[6]: Программа крэшится до точки входа, на стадии загрузки
От: reversecode google
Дата: 25.05.18 19:34
Оценка:
F>Как-то не догадывался запоминать и сравнивать адреса модулей в процессе отладки. А пруфа в печатном виде нет, случаем?

какой пруф ? те кто пользуются к примеру IDA, могут видеть это как частый rebase модулей или самого приложения

на форуме новички которые любят чего то подламать в приложениях, приходят и плачут как у них ничего не выходит
и им часто раньше советовали отключать ASLR

F>Но всё равно не верится, что это возможно. К примеру, возьмём среднестатический бинарик со статическим, опять же, объектом. И ссылку на него (ака адрес).

F>Если система вдруг вздумает переместить модуль по другому адресу в памяти, то адрес объекта станет недействительным.

я здесь не для того что бы тратить время на доказательства
Re[4]: Программа крэшится до точки входа, на стадии загрузки
От: reversecode google
Дата: 25.05.18 19:38
Оценка:
CF>А каким макаром ASLR к отсутствию релоков? Казалось бы, наоборот, ничего релоцировать не надо, хочешь — двигай. Собственно, оно и двигало, только забывало известить вторую свою же половину о собственных движениях.

изучите вопрос
https://stackoverflow.com/questions/39189477/how-do-i-determine-if-an-exe-or-dll-participate-in-aslr-i-e-is-relocatable
Re[5]: Программа крэшится до точки входа, на стадии загрузки
От: CaptainFlint Россия http://flint-inc.ru/
Дата: 28.05.18 13:33
Оценка:
Здравствуйте, reversecode, Вы писали:

CF>>А каким макаром ASLR к отсутствию релоков? Казалось бы, наоборот, ничего релоцировать не надо, хочешь — двигай. Собственно, оно и двигало, только забывало известить вторую свою же половину о собственных движениях.


R>изучите вопрос

R>https://stackoverflow.com/questions/39189477/how-do-i-determine-if-an-exe-or-dll-participate-in-aslr-i-e-is-relocatable

Изучил, ответа на вопрос не нашёл. Просто повторяется то же самое: нет ножек релоков — нет ASLR.
В моём представлении релокации в файле отсутствуют в двух случаях:
а) fixed base, код завязан на конкретный адрес и не умеет релоцироваться в принципе;
б) PIC (position-independent code), релоки не нужны, потому что везде используется только относительная адресация.
Я полагал, что флаг IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE как раз и служит для различения этих ситуаций. А получается, он тупо дублирует IMAGE_FILE_RELOCS_STRIPPED. Как вообще тогда объяснить системе, что вот в этом конкретном файле релоков нет, потому что они просто не нужны, и код можно спокойно перемещать?
Или винда в принципе не признаёт понятия PIC?
Почему же, ё-моё, ты нигде не пишешь «ё»?
Re[3]: Программа крэшится до точки входа, на стадии загрузки
От: okman Беларусь https://searchinform.ru/
Дата: 28.05.18 19:37
Оценка:
Здравствуйте, reversecode, Вы писали:

R>а падало потому что винда в процессе работы может образ файла двигать в памяти


R>частый rebase модулей или самого приложения


Звучит как ересь
Отредактировано 28.05.2018 19:38 okman . Предыдущая версия .
Re[4]: Программа крэшится до точки входа, на стадии загрузки
От: reversecode google
Дата: 28.05.18 19:44
Оценка:
O>Звучит как ересь
O>

или вам пора на переквалификацию
Re[5]: Программа крэшится до точки входа, на стадии загрузки
От: okman Беларусь https://searchinform.ru/
Дата: 28.05.18 20:36
Оценка:
Здравствуйте, reversecode, Вы писали:


O>>Звучит как ересь

O>>

R>или вам пора на переквалификацию


Может быть.

Но перемещение исполняемого модуля в а.п. пространстве процесса прямо во время его выполнения у меня не укладывается в голове и
за несколько лет я такого ни разу не видел. А что происходит тогда с указателями на функции, которые уже кто-нибудь успел вычислить
(GetProcAddress/static import)? А с базой модуля (HMODULE/HINSTANCE)? А с секцией (дисковая проекция исполняемого файла)? Она тоже
вдруг отмапливается и замапливается обратно по другому адресу? А потоки, которые выполняют код внутри exe/dll — они останавливаются и
их Rip/Eip двигаются на другие адреса? И в какой версии Windows это появилось? Ну дайте больше деталей (или ссылку на достаточно
авторитетный источник), где это было бы описано. А еще лучше — код, который подтверждает эту м-м... гипотезу. В источниках, которым я
доверяю (MSDN/TechNet, Windows Internals и т.д.) сказано, что ASLR для модулей работает во время загрузки, после этого адрес не меняется.
А для системных dll адрес сохраняется постоянным до следующей загрузки компьютера. Что я и наблюдаю в отладчике еще со времен Windows Vista.

Пока могу представить только один кейс: FreeLibrary/LoadLibrary модуля, скомпиленного с поддержкой reloc/ASLR.
Но это совсем другая ситуация, чем "двигание" модуля в памяти уже после его загрузки.

А то сначала порвать шаблон, а затем сразу давать задний ход в стиле "я здесь не для того что бы тратить время на
доказательства" — это как-то не очень...
Re[7]: Программа крэшится до точки входа, на стадии загрузки
От: flаt  
Дата: 03.06.18 18:27
Оценка:
Здравствуйте, reversecode, Вы писали:

R>на форуме новички которые любят чего то подламать в приложениях, приходят и плачут как у них ничего не выходит

R>и им часто раньше советовали отключать ASLR

ASLR — это перемещение модулей в процессе их загрузки в АП процесса, но не в процессе работы. Видимо, речь об этом, всё же.
Re[8]: Программа крэшится до точки входа, на стадии загрузки
От: reversecode google
Дата: 03.06.18 18:38
Оценка:
Здравствуйте, flаt, Вы писали:

F>Здравствуйте, reversecode, Вы писали:


R>>на форуме новички которые любят чего то подламать в приложениях, приходят и плачут как у них ничего не выходит

R>>и им часто раньше советовали отключать ASLR

F>ASLR — это перемещение модулей в процессе их загрузки в АП процесса, но не в процессе работы. Видимо, речь об этом, всё же.


советую по чаще пользоваться дебагером что бы знать не только теорию но и практику
в процессе работы винда может двигать модули
до введения ASLR этих движений не было по моим наблюдениям
Re[9]: Программа крэшится до точки входа, на стадии загрузки
От: ononim  
Дата: 06.06.18 18:25
Оценка:
R>советую по чаще пользоваться дебагером что бы знать не только теорию но и практику
R>в процессе работы винда может двигать модули
R>до введения ASLR этих движений не было по моим наблюдениям
Винда не может двигать уже загруженный модуль. ASLR влияет на базу загрузки модуля, после загрузки — все остается где было до выгрузки. Если у вас изза включения ASLR для дллки чтото начинает глючить, значит или у вас гдето есть чтото типа:
DLL = LoadLibrary("foo.dll");
SomeFunction = GetProcAddress(DLL, "SomeFunction");
..blablabla...
FreeLibrary(DLL)
DLL = LoadLibrary("foo.dll");
..blablabla...
SomeFunction()

В этом случае на последней строчке с включенным ASLR вероятность крэша на много порядков выше чем с выключенным. Но, всеже, с выключенным она тоже будет ненулевая.

Или же у вас код который не умеет толком работать с void *, например
DLL = LoadLibrary("foo.dll");
int CastedPointer = (int)GetProcAddress(DLL, "SomeFunction");
...
SomeFunctionT SomeFunction = (SomeFunctionT)CastedPointer;
SomeFunction();

в этом случае тоже вероятность свалиься с ASLR сильно выше чем без оного. Потому что с ASLR вероятность того что модуль загрузится выше первых 4 гиг очень высока (оно вроде вообще только туда и грузит ASLR'ед дллки), а без оного — система попытается промапить модуль по его preferred base. Что обычно находится в нижних адресах.
А тайпкаст в 32х битную переменную (int) ломает поинтеры указываюшие выше 4 гиг.


Но в данном случае имеем дело не с длл, а с апликухой, в которой даже релоков нет. И вероятно это в самом деле баг загрузчика, т.к. такие минималистичные апликухи нынче редкость, а микрософт индусами полнится. Или же у ТС троянчик сидит, или антивирь. С глючным инжектором. Потому хотелось бы увидеть лог windbg о том какие длл в процесс и в каком порядке загружаются.
Как много веселых ребят, и все делают велосипед...
Отредактировано 06.06.2018 18:49 ononim . Предыдущая версия . Еще …
Отредактировано 06.06.2018 18:48 ononim . Предыдущая версия .
Re[10]: Программа крэшится до точки входа, на стадии загрузки
От: CaptainFlint Россия http://flint-inc.ru/
Дата: 06.06.18 19:46
Оценка:
Здравствуйте, ononim, Вы писали:

O> Или же у ТС троянчик сидит, или антивирь. С глючным инжектором. Потому хотелось бы увидеть лог windbg о том какие длл в процесс и в каком порядке загружаются.


К сожалению, у меня сейчас пошёл основательный загруз сразу по нескольким направлениям, так что времени на академические исследования в ближайшем будущем точно не найдётся. Если достаточно просто загрузить и выдать лог, это ещё могу сделать (только желательно с инструкциями, а то я в windbg не очень, а тратить время ещё и на поиск инфы не хочется). Если же надо конкретно в сценарии с воспроизведением падения — тогда вряд ли получится.

Но всё же, что касается трояна или антивиря, вероятность с моей точки зрения крайне невелика. Две разных машины, с разными антивирями от разных производителей, у обоих воспроизводится в отключённом без перезагрузки виде. То есть они оба должны одинаково ломать загрузчик, причём делая это именно теми компонентами, которые остаются загруженными в память при выключении проверочной функциональности. Не исключено, но всё же сомнительно.
Троян… Опять же, одинаковый на обеих системах, живущий на них незамеченным не менее двух лет, и ни разу не пойманный ни мной (а я несколько раз основательно шуршал по системе, заметив что-то, показавшееся подозрительным), ни теми же антивирями? Точно так же, не исключено, но как-то не верится.
Почему же, ё-моё, ты нигде не пишешь «ё»?
Re[11]: Программа крэшится до точки входа, на стадии загрузк
От: ononim  
Дата: 06.06.18 20:39
Оценка:
Как вариант кстати баг возможно даже не лоадера, а линкера. Лоадер, к примеру, может ожидать, что раз нету флага IMAGE_FILE_RELOCS_STRIPPED — значит релоки есть. А линкер этот флаг не выставляет, несмотря на отсутствие релоков в имаже. Все зависит от того растусована ли както такая ситуация в спецификации.

А про глючные инжекторы секуритисьютов я неспроста писал. Я сам писал такие инжекторы, которые, бывало, глючили
Как много веселых ребят, и все делают велосипед...
Отредактировано 06.06.2018 20:41 ononim . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.