Нужно было написать простенький аналог DbgView. Написал. НО, как выяснилось, использованный алгоритм работает только в NT+. Значит ли это, что я где-то ошибся или в 9х OutputDebugString реализован как-то иначе?
format PE console
include '%inc%\win32a.inc'
entry start
start:
invoke CreateFileMapping, -1, 0, PAGE_READWRITE, 0, 4096, sname
test eax, eax
jz .exit
mov [fsect], eax
invoke MapViewOfFile, [fsect], FILE_MAP_ALL_ACCESS, 0, 0, 4096
test eax, eax
jz .exit
mov [sect], eax
invoke CreateEvent, 0, 0, 0, bname
test eax, eax
jz .exit
mov [bev], eax
invoke CreateEvent, 0, 0, 0, dname
test eax, eax
jz .exit
mov [dev], eax
.work:
invoke SetEvent, [bev]
invoke WaitForSingleObject, [dev], -1
invoke ResetEvent, [bev]
mov esi, [sect]
xor eax, eax
lodsd
invoke printf, fmt, eax, esi
jmp .work
.exit:
ret
fmt db 'Process', 9h, '%X', 9h, 'send', 9h, '%s', 10, 13, 0
sname db 'DBWIN_BUFFER', 0
dname db 'DBWIN_DATA_READY', 0
bname db 'DBWIN_BUFFER_READY', 0
fsect dd 0
sect dd 0
dev dd 0
bev dd 0