Сообщение Re[4]: Программа крэшится до точки входа, на стадии загрузки от 27.02.2018 12:34
Изменено 27.02.2018 12:43 CaptainFlint
Re[4]: Программа крэшится до точки входа, на стадии загрузки
Здравствуйте, okman, Вы писали:
O>Можно попробовать копнуть глубже, если есть желание...
Желание есть, но пока не хватает понимания…
O>Случись у меня такая проблема, я бы попробовал запустить "сбойную" версию приложения из WinDBG и
O>поставить точку останова на ntdll!NtTestAlert. А затем, когда она сработает, поискал бы в стеке структуру
O>CONTEXT — она лежит обычно на самом дне стека и в ней хранятся значения регистров для прыжка на
O>точку входа, т.е. для RtlUserThreadStart и main/WinMain. <…>
Не могу сообразить, как найти начало структуры CONTEXT. "На самом дне стека" — это где? Прямо от Stack Base? На момент ntdll!NtTestAlert стек выглядит так:
Если верить winnt.h и команде "dt _CONTEXT", структура зело жирная из-за всяких XMM-регистров и занимает 0x4d0 байт. Такой шматок во всём стеке может поместиться лишь где-то в промежутке от StackBase (1b0000) до вызова ntdll!RtlUserThreadStart, но как видно из дампа, там практически одни только нули, лишь перед самым вызовом сидят два ненулевых значения, ни одно из которых на адрес точки входа и близко не походит (а в моём случае RCX всё-таки указывает куда-то поблизости от реальной точки, а не в открытый космос).
O>Можно попробовать копнуть глубже, если есть желание...
Желание есть, но пока не хватает понимания…
O>Случись у меня такая проблема, я бы попробовал запустить "сбойную" версию приложения из WinDBG и
O>поставить точку останова на ntdll!NtTestAlert. А затем, когда она сработает, поискал бы в стеке структуру
O>CONTEXT — она лежит обычно на самом дне стека и в ней хранятся значения регистров для прыжка на
O>точку входа, т.е. для RtlUserThreadStart и main/WinMain. <…>
Не могу сообразить, как найти начало структуры CONTEXT. "На самом дне стека" — это где? Прямо от Stack Base? На момент ntdll!NtTestAlert стек выглядит так:
Скрытый текст | |
| |
Если верить winnt.h и команде "dt _CONTEXT", структура зело жирная из-за всяких XMM-регистров и занимает 0x4d0 байт. Такой шматок во всём стеке может поместиться лишь где-то в промежутке от StackBase (1b0000) до вызова ntdll!RtlUserThreadStart, но как видно из дампа, там практически одни только нули, лишь перед самым вызовом сидят два ненулевых значения, ни одно из которых на адрес точки входа и близко не походит (а в моём случае RCX всё-таки указывает куда-то поблизости от реальной точки, а не в открытый космос).
Re[4]: Программа крэшится до точки входа, на стадии загрузки
Здравствуйте, okman, Вы писали:
O>Можно попробовать копнуть глубже, если есть желание...
Желание есть, но пока не хватает понимания…
O>Случись у меня такая проблема, я бы попробовал запустить "сбойную" версию приложения из WinDBG и
O>поставить точку останова на ntdll!NtTestAlert. А затем, когда она сработает, поискал бы в стеке структуру
O>CONTEXT — она лежит обычно на самом дне стека и в ней хранятся значения регистров для прыжка на
O>точку входа, т.е. для RtlUserThreadStart и main/WinMain. <…>
Не могу сообразить, как найти начало структуры CONTEXT. "На самом дне стека" — это где? Прямо от Stack Base? На момент ntdll!NtTestAlert стек выглядит так:
Если верить winnt.h и команде "dt _CONTEXT", структура зело жирная из-за всяких XMM-регистров и занимает 0x4d0 байт. Такой шматок во всём стеке может поместиться лишь где-то в промежутке от StackBase (1b0000) до вызова ntdll!RtlUserThreadStart, но как видно из дампа, там практически одни только нули, лишь перед самым вызовом сидят два ненулевых значения, ни одно из которых на адрес точки входа и близко не походит (а в моём случае RCX всё-таки указывает куда-то поблизости от реальной точки, а не в открытый космос, не говоря уж о том, что RCX находится не у самого края структуры, а в серёдке).
O>Можно попробовать копнуть глубже, если есть желание...
Желание есть, но пока не хватает понимания…
O>Случись у меня такая проблема, я бы попробовал запустить "сбойную" версию приложения из WinDBG и
O>поставить точку останова на ntdll!NtTestAlert. А затем, когда она сработает, поискал бы в стеке структуру
O>CONTEXT — она лежит обычно на самом дне стека и в ней хранятся значения регистров для прыжка на
O>точку входа, т.е. для RtlUserThreadStart и main/WinMain. <…>
Не могу сообразить, как найти начало структуры CONTEXT. "На самом дне стека" — это где? Прямо от Stack Base? На момент ntdll!NtTestAlert стек выглядит так:
Скрытый текст | |
| |
Если верить winnt.h и команде "dt _CONTEXT", структура зело жирная из-за всяких XMM-регистров и занимает 0x4d0 байт. Такой шматок во всём стеке может поместиться лишь где-то в промежутке от StackBase (1b0000) до вызова ntdll!RtlUserThreadStart, но как видно из дампа, там практически одни только нули, лишь перед самым вызовом сидят два ненулевых значения, ни одно из которых на адрес точки входа и близко не походит (а в моём случае RCX всё-таки указывает куда-то поблизости от реальной точки, а не в открытый космос, не говоря уж о том, что RCX находится не у самого края структуры, а в серёдке).