Compare commits

..

No commits in common. "d81bd646faccafc6ac999488cdc9fd8c0be3c3f2" and "c38d9b56283bef1d9b3dd5d8dd62d016d21c8013" have entirely different histories.

7 changed files with 17 additions and 489 deletions

8
.gitignore vendored
View file

@ -1,10 +1,2 @@
# The actual built game, optimistically
*.exe
*.xbe
# Can't distribute objects pulled from the JSRF executable
*.obj
# Other build artifacts
*.lib
*.exp

View file

@ -5,32 +5,19 @@
OBJ = src/JSRF/Jet2.obj src/JSRF/Core.obj src/JSRF/GameData.obj\
src/XDK/CRT/CRT0.obj
# Import library for the only thing we don't compile ourselves, the Xbox kernel
LIB = lib/xboxkrnl.lib
#all: src/JSRF/Jet2.xbe
all: $(OBJ) # For now, just compile all the object files
## Build commands
.SUFFIXES: .cpp .obj .def .lib .exe.xbe
# Convert compiled executable into a working Xbox executable
# (TODO: we may want to fork cxbe to add section checksums and the game ID)
.exe.xbe:
cxbe.exe -OUT:$@ -TITLE:'Jet Set Radio Future' -MODE:retail $<
# Linking into an executable; expect this to fail with undefined references
# until we've made at least stubs for everything in the game
src/JSRF/Jet2.exe: $(OBJ) $(LIB)
LINK.EXE /NOLOGO /NODEFAULTLIB /MERGE:.CRT=.data /OUT:$@ $**
#all: src/JSRF/Jet2.exe
#src/JSRF/Jet2.exe: $(OBJ)
# LINK.EXE /NOLOGO /NODEFAULTLIB /MERGE:.CRT=.data /OUT:$@ $**
# Create import library for Xbox kernel
.def.lib:
LIB.EXE /NOLOGO /MACHINE:X86 /DEF:$< /OUT:$@
# For now, just compile all the object files
all: $(OBJ)
# Compile object files from source
# Simple inference rule for producing object files
.SUFFIXES: .cpp .obj
.cpp.obj:
CL.EXE /nologo /Wall /W4 /Ogityb0 /GfX /Fo$@ /c $<

View file

@ -1,386 +0,0 @@
; JSRF Decompilation: xboxkrnl.exe.def
; The import library for the Xbox kernel, which allows dynamic linking against
; its provided functions, is produced from this file.
;
; This file was included in the nxdk project and graciously dedicated to the
; public domain under the CC0 licence. The remainder of this file is its
; original form in the nxdk repository in early 2026.
; SPDX-License-Identifier: CC0-1.0
; SPDX-FileCopyrightText: 2017 Stefan Schmidt
LIBRARY xboxkrnl.exe
EXPORTS
AvGetSavedDataAddress@0 @ 1 NONAME
AvSendTVEncoderOption@16 @ 2 NONAME
AvSetDisplayMode@24 @ 3 NONAME
AvSetSavedDataAddress@4 @ 4 NONAME
DbgBreakPoint@0 @ 5 NONAME
DbgBreakPointWithStatus@4 @ 6 NONAME
DbgLoadImageSymbols@12 @ 7 NONAME
DbgPrint @ 8 NONAME
HalReadSMCTrayState@8 @ 9 NONAME
DbgPrompt@12 @ 10 NONAME
DbgUnLoadImageSymbols@12 @ 11 NONAME
ExAcquireReadWriteLockExclusive@4 @ 12 NONAME
ExAcquireReadWriteLockShared@4 @ 13 NONAME
ExAllocatePool@4 @ 14 NONAME
ExAllocatePoolWithTag@8 @ 15 NONAME
ExEventObjectType @ 16 NONAME DATA
ExFreePool@4 @ 17 NONAME
ExInitializeReadWriteLock@4 @ 18 NONAME
ExInterlockedAddLargeInteger@16 @ 19 NONAME
@ExInterlockedAddLargeStatistic@8 @ 20 NONAME
@ExInterlockedCompareExchange64@12 @ 21 NONAME
ExMutantObjectType @ 22 NONAME DATA
ExQueryPoolBlockSize@4 @ 23 NONAME
ExQueryNonVolatileSetting@20 @ 24 NONAME
ExReadWriteRefurbInfo@12 @ 25 NONAME
ExRaiseException@4 @ 26 NONAME
ExRaiseStatus@4 @ 27 NONAME
ExReleaseReadWriteLock@4 @ 28 NONAME
ExSaveNonVolatileSetting@16 @ 29 NONAME
ExSemaphoreObjectType @ 30 NONAME DATA
ExTimerObjectType @ 31 NONAME DATA
@ExfInterlockedInsertHeadList@8 @ 32 NONAME
@ExfInterlockedInsertTailList@8 @ 33 NONAME
@ExfInterlockedRemoveHeadList@4 @ 34 NONAME
FscGetCacheSize@0 @ 35 NONAME
FscInvalidateIdleBlocks@0 @ 36 NONAME
FscSetCacheSize@4 @ 37 NONAME
@HalClearSoftwareInterrupt@4 @ 38 NONAME
HalDisableSystemInterrupt@4 @ 39 NONAME
HalDiskCachePartitionCount @ 40 NONAME DATA
HalDiskModelNumber @ 41 NONAME DATA
HalDiskSerialNumber @ 42 NONAME DATA
HalEnableSystemInterrupt@8 @ 43 NONAME
HalGetInterruptVector@8 @ 44 NONAME
HalReadSMBusValue@16 @ 45 NONAME
HalReadWritePCISpace@24 @ 46 NONAME
HalRegisterShutdownNotification@8 @ 47 NONAME
@HalRequestSoftwareInterrupt@4 @ 48 NONAME
HalReturnToFirmware@4 @ 49 NONAME
HalWriteSMBusValue@16 @ 50 NONAME
@InterlockedCompareExchange@12 @ 51 NONAME
@InterlockedDecrement@4 @ 52 NONAME
@InterlockedIncrement@4 @ 53 NONAME
@InterlockedExchange@8 @ 54 NONAME
@InterlockedExchangeAdd@8 @ 55 NONAME
@InterlockedFlushSList@4 @ 56 NONAME
@InterlockedPopEntrySList@4 @ 57 NONAME
@InterlockedPushEntrySList@8 @ 58 NONAME
IoAllocateIrp@4 @ 59 NONAME
IoBuildAsynchronousFsdRequest@24 @ 60 NONAME
IoBuildDeviceIoControlRequest@36 @ 61 NONAME
IoBuildSynchronousFsdRequest@28 @ 62 NONAME
IoCheckShareAccess@20 @ 63 NONAME
IoCompletionObjectType @ 64 NONAME DATA
IoCreateDevice@24 @ 65 NONAME
IoCreateFile@40 @ 66 NONAME
IoCreateSymbolicLink@8 @ 67 NONAME
IoDeleteDevice@4 @ 68 NONAME
IoDeleteSymbolicLink@4 @ 69 NONAME
IoDeviceObjectType @ 70 NONAME DATA
IoFileObjectType @ 71 NONAME DATA
IoFreeIrp@4 @ 72 NONAME
IoInitializeIrp@12 @ 73 NONAME
IoInvalidDeviceRequest@8 @ 74 NONAME
IoQueryFileInformation@20 @ 75 NONAME
IoQueryVolumeInformation@20 @ 76 NONAME
IoQueueThreadIrp@4 @ 77 NONAME
IoRemoveShareAccess@8 @ 78 NONAME
IoSetIoCompletion@20 @ 79 NONAME
IoSetShareAccess@16 @ 80 NONAME
IoStartNextPacket@4 @ 81 NONAME
IoStartNextPacketByKey@8 @ 82 NONAME
IoStartPacket@12 @ 83 NONAME
IoSynchronousDeviceIoControlRequest@32 @ 84 NONAME
IoSynchronousFsdRequest@20 @ 85 NONAME
@IofCallDriver@8 @ 86 NONAME
@IofCompleteRequest@8 @ 87 NONAME
KdDebuggerEnabled @ 88 NONAME DATA
KdDebuggerNotPresent @ 89 NONAME DATA
IoDismountVolume@4 @ 90 NONAME
IoDismountVolumeByName@4 @ 91 NONAME
KeAlertResumeThread@4 @ 92 NONAME
KeAlertThread@8 @ 93 NONAME
KeBoostPriorityThread@8 @ 94 NONAME
KeBugCheck@4 @ 95 NONAME
KeBugCheckEx@20 @ 96 NONAME
KeCancelTimer@4 @ 97 NONAME
KeConnectInterrupt@4 @ 98 NONAME
KeDelayExecutionThread@12 @ 99 NONAME
KeDisconnectInterrupt@4 @ 100 NONAME
KeEnterCriticalRegion@0 @ 101 NONAME
MmGlobalData @ 102 NONAME DATA
KeGetCurrentIrql@0 @ 103 NONAME
KeGetCurrentThread@0 @ 104 NONAME
KeInitializeApc@28 @ 105 NONAME
KeInitializeDeviceQueue@4 @ 106 NONAME
KeInitializeDpc@12 @ 107 NONAME
KeInitializeEvent@12 @ 108 NONAME
KeInitializeInterrupt@28 @ 109 NONAME
KeInitializeMutant@8 @ 110 NONAME
KeInitializeQueue@8 @ 111 NONAME
KeInitializeSemaphore@12 @ 112 NONAME
KeInitializeTimerEx@8 @ 113 NONAME
KeInsertByKeyDeviceQueue@12 @ 114 NONAME
KeInsertDeviceQueue@8 @ 115 NONAME
KeInsertHeadQueue@8 @ 116 NONAME
KeInsertQueue@8 @ 117 NONAME
KeInsertQueueApc@16 @ 118 NONAME
KeInsertQueueDpc@12 @ 119 NONAME
KeInterruptTime @ 120 NONAME DATA
KeIsExecutingDpc@0 @ 121 NONAME
KeLeaveCriticalRegion@0 @ 122 NONAME
KePulseEvent@12 @ 123 NONAME
KeQueryBasePriorityThread@4 @ 124 NONAME
KeQueryInterruptTime@0 @ 125 NONAME
KeQueryPerformanceCounter@0 @ 126 NONAME
KeQueryPerformanceFrequency@0 @ 127 NONAME
KeQuerySystemTime@4 @ 128 NONAME
KeRaiseIrqlToDpcLevel@0 @ 129 NONAME
KeRaiseIrqlToSynchLevel@0 @ 130 NONAME
KeReleaseMutant@16 @ 131 NONAME
KeReleaseSemaphore@16 @ 132 NONAME
KeRemoveByKeyDeviceQueue@8 @ 133 NONAME
KeRemoveDeviceQueue@4 @ 134 NONAME
KeRemoveEntryDeviceQueue@8 @ 135 NONAME
KeRemoveQueue@12 @ 136 NONAME
KeRemoveQueueDpc@4 @ 137 NONAME
KeResetEvent@4 @ 138 NONAME
KeRestoreFloatingPointState@4 @ 139 NONAME
KeResumeThread@4 @ 140 NONAME
KeRundownQueue@4 @ 141 NONAME
KeSaveFloatingPointState@4 @ 142 NONAME
KeSetBasePriorityThread@8 @ 143 NONAME
KeSetDisableBoostThread@8 @ 144 NONAME
KeSetEvent@12 @ 145 NONAME
KeSetEventBoostPriority@8 @ 146 NONAME
KeSetPriorityProcess@8 @ 147 NONAME
KeSetPriorityThread@8 @ 148 NONAME
KeSetTimer@16 @ 149 NONAME
KeSetTimerEx@20 @ 150 NONAME
KeStallExecutionProcessor@4 @ 151 NONAME
KeSuspendThread@4 @ 152 NONAME
KeSynchronizeExecution@12 @ 153 NONAME
KeSystemTime @ 154 NONAME DATA
KeTestAlertThread@4 @ 155 NONAME
KeTickCount @ 156 NONAME DATA
KeTimeIncrement @ 157 NONAME DATA
KeWaitForMultipleObjects@32 @ 158 NONAME
KeWaitForSingleObject@20 @ 159 NONAME
@KfRaiseIrql@4 @ 160 NONAME
@KfLowerIrql@4 @ 161 NONAME
KiBugCheckData @ 162 NONAME DATA
@KiUnlockDispatcherDatabase@4 @ 163 NONAME
LaunchDataPage @ 164 NONAME DATA
MmAllocateContiguousMemory@4 @ 165 NONAME
MmAllocateContiguousMemoryEx@20 @ 166 NONAME
MmAllocateSystemMemory@8 @ 167 NONAME
MmClaimGpuInstanceMemory@8 @ 168 NONAME
MmCreateKernelStack@8 @ 169 NONAME
MmDeleteKernelStack@8 @ 170 NONAME
MmFreeContiguousMemory@4 @ 171 NONAME
MmFreeSystemMemory@8 @ 172 NONAME
MmGetPhysicalAddress@4 @ 173 NONAME
MmIsAddressValid@4 @ 174 NONAME
MmLockUnlockBufferPages@12 @ 175 NONAME
MmLockUnlockPhysicalPage@8 @ 176 NONAME
MmMapIoSpace@12 @ 177 NONAME
MmPersistContiguousMemory@12 @ 178 NONAME
MmQueryAddressProtect@4 @ 179 NONAME
MmQueryAllocationSize@4 @ 180 NONAME
MmQueryStatistics@4 @ 181 NONAME
MmSetAddressProtect@12 @ 182 NONAME
MmUnmapIoSpace@8 @ 183 NONAME
NtAllocateVirtualMemory@20 @ 184 NONAME
NtCancelTimer@8 @ 185 NONAME
NtClearEvent@4 @ 186 NONAME
NtClose@4 @ 187 NONAME
NtCreateDirectoryObject@8 @ 188 NONAME
NtCreateEvent@16 @ 189 NONAME
NtCreateFile@36 @ 190 NONAME
NtCreateIoCompletion@16 @ 191 NONAME
NtCreateMutant@12 @ 192 NONAME
NtCreateSemaphore@16 @ 193 NONAME
NtCreateTimer@12 @ 194 NONAME
NtDeleteFile@4 @ 195 NONAME
NtDeviceIoControlFile@40 @ 196 NONAME
NtDuplicateObject@12 @ 197 NONAME
NtFlushBuffersFile@8 @ 198 NONAME
NtFreeVirtualMemory@12 @ 199 NONAME
NtFsControlFile@40 @ 200 NONAME
NtOpenDirectoryObject@8 @ 201 NONAME
NtOpenFile@24 @ 202 NONAME
NtOpenSymbolicLinkObject@8 @ 203 NONAME
NtProtectVirtualMemory@16 @ 204 NONAME
NtPulseEvent@8 @ 205 NONAME
NtQueueApcThread@20 @ 206 NONAME
NtQueryDirectoryFile@40 @ 207 NONAME
NtQueryDirectoryObject@24 @ 208 NONAME
NtQueryEvent@8 @ 209 NONAME
NtQueryFullAttributesFile@8 @ 210 NONAME
NtQueryInformationFile@20 @ 211 NONAME
NtQueryIoCompletion@8 @ 212 NONAME
NtQueryMutant@8 @ 213 NONAME
NtQuerySemaphore@8 @ 214 NONAME
NtQuerySymbolicLinkObject@12 @ 215 NONAME
NtQueryTimer@8 @ 216 NONAME
NtQueryVirtualMemory@8 @ 217 NONAME
NtQueryVolumeInformationFile@20 @ 218 NONAME
NtReadFile@32 @ 219 NONAME
NtReadFileScatter@32 @ 220 NONAME
NtReleaseMutant@8 @ 221 NONAME
NtReleaseSemaphore@12 @ 222 NONAME
NtRemoveIoCompletion@20 @ 223 NONAME
NtResumeThread@8 @ 224 NONAME
NtSetEvent@8 @ 225 NONAME
NtSetInformationFile@20 @ 226 NONAME
NtSetIoCompletion@20 @ 227 NONAME
NtSetSystemTime@8 @ 228 NONAME
NtSetTimerEx@32 @ 229 NONAME
NtSignalAndWaitForSingleObjectEx@20 @ 230 NONAME
NtSuspendThread@8 @ 231 NONAME
NtUserIoApcDispatcher@12 @ 232 NONAME
NtWaitForSingleObject@12 @ 233 NONAME
NtWaitForSingleObjectEx@16 @ 234 NONAME
NtWaitForMultipleObjectsEx@24 @ 235 NONAME
NtWriteFile@32 @ 236 NONAME
NtWriteFileGather@32 @ 237 NONAME
NtYieldExecution@0 @ 238 NONAME
ObCreateObject@16 @ 239 NONAME
ObDirectoryObjectType @ 240 NONAME DATA
ObInsertObject@16 @ 241 NONAME
ObMakeTemporaryObject@4 @ 242 NONAME
ObOpenObjectByName@16 @ 243 NONAME
ObOpenObjectByPointer@12 @ 244 NONAME
ObpObjectHandleTable @ 245 NONAME DATA
ObReferenceObjectByHandle@12 @ 246 NONAME
ObReferenceObjectByName@20 @ 247 NONAME
ObReferenceObjectByPointer@8 @ 248 NONAME
ObSymbolicLinkObjectType @ 249 NONAME DATA
@ObfDereferenceObject@4 @ 250 NONAME
@ObfReferenceObject@4 @ 251 NONAME
PhyGetLinkState@4 @ 252 NONAME
PhyInitialize@8 @ 253 NONAME
PsCreateSystemThread@20 @ 254 NONAME
PsCreateSystemThreadEx@40 @ 255 NONAME
PsQueryStatistics@4 @ 256 NONAME
PsSetCreateThreadNotifyRoutine@4 @ 257 NONAME
PsTerminateSystemThread@4 @ 258 NONAME
PsThreadObjectType @ 259 NONAME DATA
RtlAnsiStringToUnicodeString@12 @ 260 NONAME
RtlAppendStringToString@8 @ 261 NONAME
RtlAppendUnicodeStringToString@8 @ 262 NONAME
RtlAppendUnicodeToString@8 @ 263 NONAME
RtlAssert@16 @ 264 NONAME
RtlCaptureContext@4 @ 265 NONAME
RtlCaptureStackBackTrace@16 @ 266 NONAME
RtlCharToInteger@12 @ 267 NONAME
RtlCompareMemory@12 @ 268 NONAME
RtlCompareMemoryUlong@12 @ 269 NONAME
RtlCompareString@12 @ 270 NONAME
RtlCompareUnicodeString@12 @ 271 NONAME
RtlCopyString@8 @ 272 NONAME
RtlCopyUnicodeString@8 @ 273 NONAME
RtlCreateUnicodeString@8 @ 274 NONAME
RtlDowncaseUnicodeChar@4 @ 275 NONAME
RtlDowncaseUnicodeString@12 @ 276 NONAME
RtlEnterCriticalSection@4 @ 277 NONAME
RtlEnterCriticalSectionAndRegion@4 @ 278 NONAME
RtlEqualString@12 @ 279 NONAME
RtlEqualUnicodeString@12 @ 280 NONAME
RtlExtendedIntegerMultiply@12 @ 281 NONAME
RtlExtendedLargeIntegerDivide@16 @ 282 NONAME
RtlExtendedMagicDivide@20 @ 283 NONAME
RtlFillMemory@12 @ 284 NONAME
RtlFillMemoryUlong@12 @ 285 NONAME
RtlFreeAnsiString@4 @ 286 NONAME
RtlFreeUnicodeString@4 @ 287 NONAME
RtlGetCallersAddress@8 @ 288 NONAME
RtlInitAnsiString@8 @ 289 NONAME
RtlInitUnicodeString@8 @ 290 NONAME
RtlInitializeCriticalSection@4 @ 291 NONAME
RtlIntegerToChar@16 @ 292 NONAME
RtlIntegerToUnicodeString@12 @ 293 NONAME
RtlLeaveCriticalSection@4 @ 294 NONAME
RtlLeaveCriticalSectionAndRegion@4 @ 295 NONAME
RtlLowerChar@4 @ 296 NONAME
RtlMapGenericMask@8 @ 297 NONAME
RtlMoveMemory@12 @ 298 NONAME
RtlMultiByteToUnicodeN@20 @ 299 NONAME
RtlMultiByteToUnicodeSize@12 @ 300 NONAME
RtlNtStatusToDosError@4 @ 301 NONAME
RtlRaiseException@4 @ 302 NONAME
RtlRaiseStatus@4 @ 303 NONAME
RtlTimeFieldsToTime@8 @ 304 NONAME
RtlTimeToTimeFields@8 @ 305 NONAME
RtlTryEnterCriticalSection@4 @ 306 NONAME
@RtlUlongByteSwap@4 @ 307 NONAME
RtlUnicodeStringToAnsiString@12 @ 308 NONAME
RtlUnicodeStringToInteger@12 @ 309 NONAME
RtlUnicodeToMultiByteN@20 @ 310 NONAME
RtlUnicodeToMultiByteSize@12 @ 311 NONAME
RtlUnwind@16 @ 312 NONAME
RtlUpcaseUnicodeChar@4 @ 313 NONAME
RtlUpcaseUnicodeString@12 @ 314 NONAME
RtlUpcaseUnicodeToMultiByteN@20 @ 315 NONAME
RtlUpperChar@4 @ 316 NONAME
RtlUpperString@8 @ 317 NONAME
@RtlUshortByteSwap@4 @ 318 NONAME
RtlWalkFrameChain@12 @ 319 NONAME
RtlZeroMemory@8 @ 320 NONAME
XboxEEPROMKey @ 321 NONAME DATA
XboxHardwareInfo @ 322 NONAME DATA
XboxHDKey @ 323 NONAME DATA
XboxKrnlVersion @ 324 NONAME DATA
XboxSignatureKey @ 325 NONAME DATA
XeImageFileName @ 326 NONAME DATA
XeLoadSection@4 @ 327 NONAME
XeUnloadSection@4 @ 328 NONAME
READ_PORT_BUFFER_UCHAR@12 @ 329 NONAME
READ_PORT_BUFFER_USHORT@12 @ 330 NONAME
READ_PORT_BUFFER_ULONG@12 @ 331 NONAME
WRITE_PORT_BUFFER_UCHAR@12 @ 332 NONAME
WRITE_PORT_BUFFER_USHORT@12 @ 333 NONAME
WRITE_PORT_BUFFER_ULONG@12 @ 334 NONAME
XcSHAInit@4 @ 335 NONAME
XcSHAUpdate@12 @ 336 NONAME
XcSHAFinal@8 @ 337 NONAME
XcRC4Key@12 @ 338 NONAME
XcRC4Crypt@12 @ 339 NONAME
XcHMAC@28 @ 340 NONAME
XcPKEncPublic@12 @ 341 NONAME
XcPKDecPrivate@12 @ 342 NONAME
XcPKGetKeyLen@4 @ 343 NONAME
XcVerifyPKCS1Signature@12 @ 344 NONAME
XcModExp@20 @ 345 NONAME
XcDESKeyParity@8 @ 346 NONAME
XcKeyTable@12 @ 347 NONAME
XcBlockCrypt@20 @ 348 NONAME
XcBlockCryptCBC@28 @ 349 NONAME
XcCryptService@8 @ 350 NONAME
XcUpdateCrypto@8 @ 351 NONAME
RtlRip@12 @ 352 NONAME
XboxLANKey @ 353 NONAME DATA
XboxAlternateSignatureKeys @ 354 NONAME DATA
XePublicKeyData @ 355 NONAME DATA
HalBootSMCVideoMode @ 356 NONAME DATA
IdexChannelObject @ 357 NONAME DATA
HalIsResetOrShutdownPending@0 @ 358 NONAME
IoMarkIrpMustComplete@4 @ 359 NONAME
HalInitiateShutdown@0 @ 360 NONAME
RtlSnprintf @ 361 NONAME
RtlSprintf @ 362 NONAME
RtlVsnprintf @ 363 NONAME
RtlVsprintf @ 364 NONAME
HalEnableSecureTrayEject@0 @ 365 NONAME
HalWriteSMCScratchRegister@4 @ 366 NONAME
MmDbgAllocateMemory@8 @ 374 NONAME
MmDbgFreeMemory@8 @ 375 NONAME
MmDbgQueryAvailablePages@0 @ 376 NONAME
MmDbgReleaseAddress@8 @ 377 NONAME
MmDbgWriteCheck@8 @ 378 NONAME

View file

@ -14,8 +14,8 @@ Game * g_game;
// Address: 0x0006F9E0
// Matching: yes
void main(void) {
g_game = new Game(NULL, 0);
g_game->initRootExecObj();
g_game->mainLoop();
delete g_game;
g_game = new Game(NULL, 0);
g_game->initRootExecObj();
g_game->mainLoop();
delete g_game;
}

View file

@ -4,7 +4,7 @@ Like other CRT code, there's some magic here with symbols that get special
treatment from the compiler and linker.
*/
#include "../Win32.hpp"
#include "Win32.hpp"
// Every program is supposed to have a main(), so we can just assume its
@ -29,5 +29,4 @@ The linker automatically sets this function to the entrypoint.
DWORD _mainXapiStartup(LPVOID const lpThreadParameter) {
/* Runs some initialization and then calls main() */
main();
return 0;
}

View file

@ -1,65 +0,0 @@
// TODO
//
// @category Export
import ghidra.app.script.GhidraScript;
import ghidra.program.flatapi.FlatProgramAPI;
import ghidra.program.model.listing.Data;
import ghidra.program.model.listing.Function;
import ghidra.program.model.symbol.SourceType;
import ghidra.program.model.symbol.Symbol;
import ghidra.program.model.symbol.SymbolIterator;
import java.io.FileWriter;
import java.util.Arrays;
public class EnhancedExport extends GhidraScript{
@Override
public void run() throws Exception {
final FileWriter out = new FileWriter(askFile("Specify output file", "OK"));
final SymbolIterator iter = currentProgram.getSymbolTable()
.getPrimarySymbolIterator(true);
while (iter.hasNext() && !monitor.isCancelled()) {
final Symbol s = iter.next();
if (s.getSource() != SourceType.USER_DEFINED) continue;
final Object obj = s.getObject();
if (obj != null) switch (obj) {
case Data d:
out.write(
"0x" + s.getAddress().toString() + "\t" +
"d" + "\t" +
d.getDataType().getDisplayName() + "\t" +
s.getName(true) + "\n"
);
break;
case Function f:
out.write(
"0x" + s.getAddress().toString() + "\t" +
"f" + "\t" +
f.getSignature(true).getReturnType()
.getDisplayName() + "\t" +
f.getCallingConventionName() + "\t" +
f.getName(true) +
String.join(
"\t",
Arrays.stream(f.getSignature(true).getArguments())
.map(arg -> "\t" +
arg.getDataType().getDisplayName() + "\t" +
arg.getName()
).toArray(String[]::new)
) +
(f.hasVarArgs() ? "\t..." : "") + "\n"
);
break;
default: {}
}
}
out.close();
}
}

View file

@ -17,9 +17,10 @@ The approach of this decompilation is to:
We are currently engaging in the first two steps simultaneously, decompiling
code as it's delinked. Further details on these steps can be found in the
[contribution guide](documentation/gettingstarted.md). Step 3 uses the linker
from the same Visual C++ 7.0 already used to compile object files. Step 4 uses
the `cxbe` tool found in e.g. [nxdk](https://github.com/XboxDev/nxdk).
[contribution guide](documentation/gettingstarted.md). Step 3 will use the
linker from the same Visual C++ 7.0 already used to compile object files. Step
4 is expected to use the `cxbe` tool found in e.g.
[nxdk](https://github.com/XboxDev/nxdk).
## Contributing
Anybody interested in joining the effort is welcome to read the