diff options
| author | Valentin Popov <valentin@popov.link> | 2026-07-18 07:52:18 +0300 |
|---|---|---|
| committer | Valentin Popov <valentin@popov.link> | 2026-07-18 07:52:18 +0300 |
| commit | e7d869d8d04e8137ad68c0c82ab1908568c80f72 (patch) | |
| tree | 40ebb7332c65e00f6221b35112c4f9472834227f /docs/tomes | |
| parent | b1408b0907db19033771bd03cdf1b9184250e9d6 (diff) | |
| download | fparkan-e7d869d8d04e8137ad68c0c82ab1908568c80f72.tar.xz fparkan-e7d869d8d04e8137ad68c0c82ab1908568c80f72.zip | |
docs(evidence): correct World3D render RVAs
Diffstat (limited to 'docs/tomes')
| -rw-r--r-- | docs/tomes/08-evidence.md | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/docs/tomes/08-evidence.md b/docs/tomes/08-evidence.md index 3eabd71..fb7c363 100644 --- a/docs/tomes/08-evidence.md +++ b/docs/tomes/08-evidence.md @@ -198,9 +198,9 @@ legacy ABI: n3d*, vrt*, bsp* compatibility entries Адреса указаны как RVA конкретной исследованной сборки: ```text -World3D stdCalculateGame 0x13910 -World3D stdRenderGame 0x13B60 -World3D sendEndOfRender 0x13D20 +World3D stdCalculateGame 0x139A0 +World3D stdRenderGame 0x13BD0 +World3D sendEndOfRender 0x13D90 World3D UpdateManualEvents 0x10E10 World3D ClearManualEvents 0x11180 World3D DeleteGameObject 0x087B0 @@ -229,6 +229,21 @@ World3D.dll 17e4a3089b2583a8cf2356c9db0390b1aba138356a09130d79b4e7e4791da61e Ngi32.dll bab9840d94f4e4e74ffc26677724fa896cf4823845504d09a9e025f80016edf5 ``` +Повторный headless IDA/Hex-Rays review GOG `World3D.dll` с этим hash уточнил +RVA export-ов: `stdCalculateGame=0x139A0`, `stdRenderGame=0x13BD0`, +`sendEndOfRender=0x13D90`, `stdSetCurrentCamera=0x13E60` и +`stdGetCurrentCamera=0x13E80`. Предыдущая таблица была сдвинута и не должна +использоваться для hooks или differential capture. + +`stdRenderGame(camera)` сначала вызывает экспорт Terrain +`stdSetCurrentCamera2(camera)`, затем сохраняет текущий camera pointer в +глобальном состоянии World3D. После этого виден запрос camera interface через +selector `6`, запрос связанного service через selector `264`, renderer/world +boundary slots и traversal render queues. В конце pointer очищается; dispatch +end-of-render callbacks вынесен также в отдельный `sendEndOfRender`. +Это доказывает порядок передачи camera и границы frame lifecycle, но не layout +camera object, не матрицы projection/view и не значения viewport selectors. + ### Vtable и interface negotiation Вызовы вида `object->vfunc(offset)` доказывают порядок slots, даже когда имя |
