Тема: RA 1.40 Crash
Показать сообщение отдельно
Старый 29-11-2016, 23:18   #8
CubanFoxtrot
Aircraftsman
 
Регистрация: Nov 2016
Сообщений: 12
The crash on 2256.dmp seems caused by the "happy" coincidence of the 3D engine picking a 32-bit backbuffer (side effect of the D3D8 emulation wrapper, I believe?) and the non-power of 2 size of gen_dlg_MIDLFT.bmp of shared graphics package.

My notes about it:

Цитата:
0:000> .ecxr
eax=103aa16e ebx=00000000 ecx=00000000 edx=00000000 esi=00000000 edi=00000000
eip=004bbf78 esp=0019f3e0 ebp=102bd5b8 iopl=0 nv up ei pl zr na pe nc
cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00010246
Unable to load image D:\Program Files (x86)\Steam\steamapps\common\Dangerous Waters\dangerouswaters.exe, Win32 error 0n2
*** WARNING: Unable to verify timestamp for dangerouswaters.exe
*** ERROR: Module load completed but symbols could not be loaded for dangerouswaters.exe
dangerouswaters+0xbbf78:
004bbf78 8a5001 mov dl,byte ptr [eax+1] ds:002b:103aa16f=??

// Function: SCS::Naval3DEngine::CSurface *SCS::Naval3DEngine::CEngine::loadSurfaceFromFile( SCS::Naval3DEngine::CEngine *this, const char *fileName, int type, SCS::Naval3DEngine::CSurface *surface = nullptr) @ 0x004BB9C0
// fileName = "gen_dlg_MIDLFT.bmp" (25 x 25 @ RGB888 format)
// type = 1 -> SCS::Naval3DEngine::CSurface::Type::BITMAP

scanline_size = 0x64 = 100 bytes -> BAD!!!
((25 * 4) + (4 - 1)) & ~(4 - 1) = 100 bytes // this can happen only if SCS::Naval3DEngine::CEngine::backBufferType == ENGINE_BACKBUFFERTYPE_X8R8G8B8 at 0x004BBED8
((25 * 3) + (4 - 1)) & ~(4 - 1) = 76 bytes // at 0x004BBDB3, SCS::Naval3DEngine::CEngine::backBufferType != ENGINE_BACKBUFFERTYPE_X8R8G8B8

dib->bits = 0x103a980e
memory reading fails at 0x103aa16e+1
means an offset of +0x960 from dib->bits + .g component
this is out of bounds in case of 25x25x3=0x753=1875 bytes

Последний раз редактировалось CubanFoxtrot; 29-11-2016 в 23:35.
CubanFoxtrot вне форума   Ответить с цитированием