Была замечена небольшая ошибка, которая не влияет на результат теста.
программа для теста:
#include <windows.h>
#include <stdio.h>
void main()
{
HDC hdc;
HBITMAP hdib, hdib1;
char bmibuf[sizeof(BITMAPINFO)+sizeof(RGBQUAD)*16];
BITMAPINFO *pbmi = (BITMAPINFO *)bmibuf;
hdc =
Get DC?(0);
memset(pbmi, 0, sizeof(bmibuf));
pbmi->bmiHeader.biSize = sizeof(pbmi->bmiHeader);
pbmi->bmiHeader.biHeight = 9;
pbmi->bmiHeader.biWidth = 319;
pbmi->bmiHeader.biBitCount = 4;
pbmi->bmiHeader.biPlanes = 1;
pbmi->bmiHeader.biCompression = BI_RGB;
pbmi->bmiHeader.biSizeImage = ((pbmi->bmiHeader.biWidth * pbmi->bmiHeader.biBitCount * pbmi->bmiHeader.biPlanes +31) & 31) /8 * pbmi->bmiHeader.biHeight;
hdib =
Create DIB Section?(hdc, pbmi, DIB_RGB_COLORS, NULL, NULL, 0);
if(hdib == NULL)
{
fprintf(stderr,"
Create DIB Section? failed\n");
return;
}
hdib1 = Copy Image?(hdib,IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION);
if(hdib == NULL)
{
fprintf(stderr,"
Copy Image? 1 failed\n");
return;
}
Delete Object?(hdib1);
Delete Object?(hdib);
Release DC?(0,hdc);
}
Результат падения:
First chance exception: page fault on write access to 0x6a6aeef2 in 32-bit code (0x4018fb3c).
Register dump:
CS:0073 SS:007b DS:007b ES:007b FS:0033 GS:005f
EIP:4018fb3c ESP:4067fd94 EBP:4067fdb0 EFLAGS:00210202( – 00 – -RI1)
EAX:ababab6a EBX:401c371c ECX:4036b9e8 EDX:6a6aeeee
ESI:4036b9e0 EDI:000005a0
Stack dump:
0x4067fd94: 4036b9e8 00000000 40320000 40320000
0x4067fda4: 406e8ba8 4036b3f8 40320000 4067fdd4
0x4067fdb4: 406a6c4c 40320000 00000002 000005a0
0x4067fdc4: 000000a0 407fe620 4036b440 000001d0
0x4067fdd4: 4067fe38 4077f51c 000001d0 000005a0
0x4067fde4: 4036b440 40abdd20 40abdd60 00000000
Backtrace:
=>1 0x4018fb3c Rtl Allocate Heap?+0x8c(heap=0x40320000, flags=0x2, size=0x5a0) [/home/cyril/prj/wine/dlls/ntdll/../../include/wine/list.h:98] in ntdll (0x4018fb3c)
2 0x406a6c4c
Set Bitmap Bits?+0xec(hbitmap=0x1d0, count=0x5a0, bits=0x4036b440) [/home/cyril/prj/wine/dlls/gdi/bitmap.c:401] in gdi32 (0x406a6c4c)
3 0x4077f51c
Copy Image?(hnd=0x1cc, type=0x0, desiredx=0x0, desiredy=0x0, flags=0x2000) [/home/cyril/prj/wine/dlls/user/../../include/winbase.h:2252] in user32 (0x4077f51c)
4 0x405741dd main in wine-tst (0x405741dd)
5 0x405742ca __wine_spec_exe_entry(peb=0x401d16e0) [/home/cyril/prj/wine/dlls/winecrt0/exe_entry.c:37] in wine-tst (0x405742ca)
6 0x40495306 start_process(arg=0x0) [/home/cyril/prj/wine/dlls/kernel/process.c:992] in kernel32 (0x40495306)
7 0x4002d9a1 wine_switch_to_stack+0x11 in libwine.so.1 (0x4002d9a1)
0x4018fb3c Rtl Allocate Heap?+0x8c [/home/cyril/prj/wine/dlls/ntdll/../../include/wine/list.h:98] in ntdll: movl %eax,0x4(%edx)
98 elem->next->prev = elem->prev;