
09.05.2008, 22:51
|
|
Постоянный
Регистрация: 16.04.2007
Сообщений: 398
С нами:
10037186
Репутация:
1462
|
|
в статье 'От зеленого к Красному' в примере сплайсинга на масме дан код остановки потоков , перевел в фасм , при call из DllMain функция запуска потоков вылетает с ошибкой ( 0xcКучанулей142) , а при вызова из вне (тестового приложения) всё работает отлично (хотя приложение однопоточное и перехват устанавливается даже без остановки потоков ... но всетаки хотелось бы чтоб правильно работало :/ )...
call dword [GetCurrentThreadId]
mov [CurrTh],eax
call dword [GetCurrentProcessId]
mov [CurrPr],eax
push 0
push 0x00000004
call dword [CreateToolhelp32Snapshot]
cmp eax,INVALID_HANDLE_VALUE
je errHandler
mov [Thread.dwSize],28d ;( 28 = 7(Аргументов) * 4(dword))
push Thread
push h
call dword [Thread32First]
@nextThreadToStart:
mov eax,[CurrTh]
mov edx,[CurrPr]
.if [Thread.th32ThreadID] <> eax
.if [Thread.th32OwnerProcessID] = edx
;{
push Thread.th32ThreadID
push 0 ; FALSE
push 0x0002 ;THREAD_SUSPEND_RESUME
call dword [OpenThread]
mov [ThrHandle],eax
.if eax > 0
push ThrHandle
call dword [ResumeThread]
push ThrHandle
call dword [CloseHandle]
.endif
;}
.endif
.endif
push Thread
push h
call dword [Thread32Next]
cmp eax,0
jne @nextThreadToStart
push h
call dword [CloseHandle]
ret
|
|
|