Показать сообщение отдельно

  #3  
Старый 09.05.2008, 22:51
Jes
Постоянный
Регистрация: 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
 
Ответить с цитированием