아래의 콜 스택을 이해하는 데 어려움을 겪고 있습니다.CreateRemoteThread에 이르는 이상한 콜 스택
ntdll!NtCreateThreadEx+0xc
KERNELBASE!CreateRemoteThreadEx+0x1f0
kernel32!CreateThreadStub+0x27
MyModule!_beginthreadex+0x87
죄송합니다 나는 때문에 proprietory 문제의 그것의 더 이상 공개 할 수는 없지만 나는 우리가 그냥이 함께 적어도 부분적인 이해 할 수 있어야한다 생각합니다. 그것은 제가보고있는 크래시 덤프 내부의 제 3 자 라이브러리에 의해 생성 된 스레드의 상태였습니다. (스레드 자체는 내가 조사한 문제와 아무런 관련이 없습니다.) _beginthreadex
을 호출 할 때 어떤 조건으로 인해 생성이 완료 될 수 있습니까? 원격 스레드? API에 대한 MSDN 문서가 나에게 단서를 제공하지 않습니다. '원격'이라는 단어가 해당 페이지에도 나타나지 않습니다.
제 3 자 라이브러리에 대한 기호가 있으며 콜 스택이 확실히 합법입니다.
업데이트 :
흥미 롭. 나는 그 자리 CreateThreadStub
에서 뒤쪽으로 분해하면 나는 다음과 같은 지침을 참조로 복귀하도록되어 :
call dword ptr [MyModule!_imp__CreateThread (573701a0)]
cmp eax,ebx
내가 할 경우 :
0:048> dds MyModule!_imp__CreateThread l1
573701a0 75b5cf30 kernel32!CreateThreadStub
을 내가 CreateThreadStub
를 분해 할 때, 나는 그것이 CreateRemoteThread
를 호출 보는가 . 이것은 모두 매우 혼란 스럽습니다!
이것은 작성 스레드의 절대적인 일반적인 스택입니다. * CreateRemoteThread [Ex] *는 ** 스레드를 만들 때 ** 항상 ** 호출됩니다. – RbMm
@ RBM 정말요? 나는 항상 CreateRemoteThread가 * 다른 * 프로세스의 주소 공간에 스레드를 생성한다고 생각 했습니까? – ForeverLearning
예, 정말로. * CreateRemoteThread [Ex] *는 * CreateThread * 또는 * _beginthreadex *를 호출 할 때 항상 사용됩니다. 당신은'어떤 상태가 발생할 수 있는지'를 묻습니다 - 이것은 무조건적입니다. ** 항상 ** – RbMm