Files
ppsspp/headless/Headless.vcxproj.filters
T
Henrik RydgårdandClaude Opus 5 386ff2fc3d headless: add --re-module, a static reverse-engineering dump for one PRX
Loads a single module standalone - no game, no boot - and writes a report:
module header and segments, the export and import tables with NIDs resolved to
names through the HLE tables, one annotated disassembly file per function, and
a call graph as JSON.

Reuses the emulator's own loader rather than parsing PRXes a second time, so
decryption, decompression, relocation and import resolution can't drift from
what actually runs. Only enough of the system is brought up to load a module:
memory map, timing, HLE tables and the kernel allocators. Nothing executes.

Two things beyond a plain disassembly, both aimed at the questions that come up
when reading unfamiliar MIPS:

- lui/addiu (and lui/load) pairs are folded and reported as the address they
  form, which is how every global and constant table gets reached.
- Per function, a register evidence block instead of a guessed signature. A
  MIPS function that takes two arguments and passes the second one down often
  never reads it, so 'never read but live across a call' is reported as
  forwarded rather than quietly dropped from the signature.

SetForceRealModuleLoads() is needed because modules like sceAudiocodec_Driver
have no DisableHLEFlags bit and so can't be turned off the normal way - they'd
fake-load and there would be nothing to look at.

Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
2026-09-08 15:32:14 -06:00

61 lines
2.1 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<ClCompile Include="Headless.cpp" />
<ClCompile Include="Compare.cpp" />
<ClCompile Include="ReverseEngineer.cpp" />
<ClCompile Include="..\ext\glew\glew.c" />
<ClCompile Include="..\Windows\GPU\WindowsGLContext.cpp">
<Filter>Windows</Filter>
</ClCompile>
<ClCompile Include="WindowsHeadlessHost.cpp">
<Filter>Windows</Filter>
</ClCompile>
<ClCompile Include="..\Windows\W32Util\Misc.cpp">
<Filter>Windows</Filter>
</ClCompile>
<ClCompile Include="..\Windows\GPU\D3D11Context.cpp">
<Filter>Windows</Filter>
</ClCompile>
<ClCompile Include="SDLHeadlessGLGraphicsContext.cpp">
<Filter>Other Platforms</Filter>
</ClCompile>
<ClCompile Include="..\Windows\CaptureDevice.cpp">
<Filter>Windows</Filter>
</ClCompile>
<ClCompile Include="..\Common\GPU\Vulkan\VulkanGraphicsContext.cpp">
<Filter>Windows</Filter>
</ClCompile>
<ClCompile Include="..\SDL\SDLUtil.cpp">
<Filter>Other Platforms</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<None Include="..\test.py" />
<None Include="README.md" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="Compare.h" />
<ClInclude Include="ReverseEngineer.h" />
<ClInclude Include="WindowsHeadlessHost.h">
<Filter>Windows</Filter>
</ClInclude>
<ClInclude Include="SDLHeadlessGLGraphicsContext.h">
<Filter>Other Platforms</Filter>
</ClInclude>
<ClInclude Include="..\Common\GPU\Vulkan\VulkanGraphicsContext.h">
<Filter>Windows</Filter>
</ClInclude>
<ClInclude Include="..\SDL\SDLUtil.h">
<Filter>Other Platforms</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<Filter Include="Windows">
<UniqueIdentifier>{28215e85-3e11-4a8a-8b4d-3e355b85a542}</UniqueIdentifier>
</Filter>
<Filter Include="Other Platforms">
<UniqueIdentifier>{d34ba935-dcca-4f21-a869-5d0b3bba7478}</UniqueIdentifier>
</Filter>
</ItemGroup>
</Project>