今天我写的一个程序莫名出现问题,
然后就用OD 为调试器进行调试,堆栈中找到,
7C80B6EC |. 64:A1 1800000>MOV EAX,DWORD PTR FS:[18]
7C80B6F2 |. 8945 E0 MOV DWORD PTR SS:[EBP-20],EAX
7C80B6F5 |. 8178 10 001E0>CMP DWORD PTR DS:[EAX+10],1E00
7C80B6FC |. 75 0F JNZ SHORT kernel32.7C80B70D
7C80B6FE |. 803D 0850887C>CMP BYTE PTR DS:[7C885008],0
7C80B705 |. 75 06 JNZ SHORT kernel32.7C80B70D
7C80B707 |. FF15 F412807C CALL DWORD PTR DS:[<&ntdll.CsrNewThread>] ; ntdll.CsrNewThread
7C80B70D |> FF75 0C PUSH DWORD PTR SS:[EBP+C]
7C80B710 |. FF55 08 CALL DWORD PTR SS:[EBP+8]
7C80B713 |. 50 PUSH EAX ; /ExitCode
7C80B714 \> E8 CF090000 CALL kernel32.ExitThread ; \ExitThread
跟进 CsrNewThread
7C93B08A >/$ FF35 D4B1997C PUSH DWORD PTR DS:[7C99B1D4] //0x18
7C93B090 |. E8 5B29FFFF CALL ntdll.ZwRegisterThreadTerminatePort
7C93B095 \. C3 RETN
7C92D9F0 >/$ B8 BB000000 MOV EAX,0BB
7C92D9F5 |. BA 0003FE7F MOV EDX,7FFE0300
7C92D9FA |. FF12 CALL DWORD PTR DS:[EDX] //这里应该是call SSDT 吧?
7C92D9FC \. C2 0400 RETN 4 //0XBB RegisterThreadTerminatePort
我的感觉是运行到,在调用 ntdll.CsrNewThread 后出现了问题,于是搜索这个函数,结果搜索到
论坛:
原贴见:
http://bbs.pediy.com/showthread.php?t=51441
(由于很久没有回复,所以已经关闭了)
然后又找了半天资源,还是没有什么眉目, 程序中没有调用 CreateRemoteThread
搜索一下,好像迅雷也经常因为这个 API 崩溃,(难道我中毒了??)
高手们,告诉一下,这里调用的几个 API 是什么意思
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)