STATUS_BAD_STACK on continue
От: Iskarov.And  
Дата: 11.01.13 16:41
Оценка:
Создаю поток в драйвере x64 и при использовании continue из __try/__finally получаю эксепшн STATUS_BAD_STACK,
под х86 все работает нормально. Самое интересное что драйвер состоящий только из этого кода вполне нормально работает,
проблема возникает только когда я такую конструкцию использую в составе здорового драйвера и только под х64.

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

каллстэк:
nt!RtlRaiseStatus
nt!RtlUnwindEx
nt!local_unwind
core!CoreThread
nt!SysThreadStartup

код:


InitializeObjectAttributes (&oa, NULL, OBJ_KERNEL_HANDLE, NULL, NULL);
PsCreateSystemThread (&hCore, GENERIC_ALL, &oa, NULL, NULL, CoreThread, NULL);

VOID CoreThread (PVOID pContext)
{
  ULONG    i, r;

  for (i = 0;; i++)
  {
    __try
    {
      if (i < 2)
        continue;
      break;
    }
    __finally
    {
      r = 0;
    }
  }
}
Re: STATUS_BAD_STACK on continue
От: Аноним  
Дата: 12.01.13 08:39
Оценка: -2
Здравствуйте, Iskarov.And, Вы писали:

IA>Создаю поток в драйвере x64 и при использовании continue из __try/__finally получаю эксепшн STATUS_BAD_STACK,

IA>под х86 все работает нормально. Самое интересное что драйвер состоящий только из этого кода вполне нормально работает,
IA>проблема возникает только когда я такую конструкцию использую в составе здорового драйвера и только под х64.

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

IA>Может кто подсказать в чем прикол?

IA>каллстэк:

IA>nt!RtlRaiseStatus
IA>nt!RtlUnwindEx
IA>nt!local_unwind
IA>core!CoreThread
IA>nt!SysThreadStartup

IA>код:



IA>
IA>InitializeObjectAttributes (&oa, NULL, OBJ_KERNEL_HANDLE, NULL, NULL);
IA>PsCreateSystemThread (&hCore, GENERIC_ALL, &oa, NULL, NULL, CoreThread, NULL);

IA>VOID CoreThread (PVOID pContext)
IA>{
IA>  ULONG    i, r;

IA>  for (i = 0;; i++)
IA>  {
IA>    __try
IA>    {
IA>      if (i < 2)
IA>        continue;
IA>      break;
IA>    }
IA>    __finally
IA>    {
IA>      r = 0;
IA>    }
IA>  }
IA>}
IA>


Что за говнокод?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.