Skip to content

Instantly share code, notes, and snippets.

@fox8091
Forked from gabe-k/label_syscalls.py
Last active January 30, 2018 03:55
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save fox8091/df36f352b1f937ade96bfb9511a8347c to your computer and use it in GitHub Desktop.
Save fox8091/df36f352b1f937ade96bfb9511a8347c to your computer and use it in GitHub Desktop.
IDAPython script to label 3DS syscalls
# based on info from switchbrew and reswitched
from idaapi import *
from idc import *
syscall_map = {
0x01: "svcControlMemory",
0x02: "svcQueryMemory",
0x03: "svcExitProcess",
0x04: "svcGetProcessAffinityMask",
0x05: "svcSetProcessAffinityMask",
0x06: "svcGetProcessIdealProcessor",
0x07: "svcSetProcessIdealProcessor",
0x08: "svcCreateThread",
0x09: "svcExitThread",
0x0A: "svcSleepThread",
0x0B: "svcGetThreadPriority",
0x0C: "svcSetThreadPriority",
0x0D: "svcGetThreadAffinityMask",
0x0E: "svcSetThreadAffinityMask",
0x0F: "svcGetThreadIdealProcessor",
0x10: "svcSetThreadIdealProcessor",
0x11: "svcGetCurrentProcessorNumber",
0x12: "svcRun",
0x13: "svcCreateMutex",
0x14: "svcReleaseMutex",
0x15: "svcCreateSemaphore",
0x16: "svcReleaseSemaphore",
0x17: "svcCreateEvent",
0x18: "svcSignalEvent",
0x19: "svcClearEvent",
0x1A: "svcCreateTimer",
0x1B: "svcSetTimer",
0x1C: "svcCancelTimer",
0x1D: "svcClearTimer",
0x1E: "svcCreateMemoryBlock",
0x1F: "svcMapMemoryBlock",
0x20: "svcUnmapMemoryBlock",
0x21: "svcCreateAddressArbiter",
0x22: "svcArbitrateAddress",
0x23: "svcCloseHandle",
0x24: "svcWaitSynchronization1",
0x25: "svcWaitSynchronizationN",
0x26: "svcSignalAndWait",
0x27: "svcDuplicateHandle",
0x28: "svcGetSystemTick",
0x29: "svcGetHandleInfo",
0x2A: "svcGetSystemInfo",
0x2B: "svcGetProcessInfo",
0x2C: "svcGetThreadInfo",
0x2D: "svcConnectToPort",
0x2E: "svcSendSyncRequest1",
0x2F: "svcSendSyncRequest2",
0x30: "svcSendSyncRequest3",
0x31: "svcSendSyncRequest4",
0x32: "svcSendSyncRequest",
0x33: "svcOpenProcess",
0x34: "svcOpenThread",
0x35: "svcGetProcessId",
0x36: "svcGetProcessIdOfThread",
0x37: "svcGetThreadId",
0x38: "svcGetResourceLimit",
0x39: "svcGetResourceLimitLimitValues",
0x3A: "svcGetResourceLimitCurrentValues",
0x3B: "svcGetThreadContext",
0x3C: "svcBreak",
0x3D: "svcOutputDebugString",
0x3E: "svcControlPerformanceCounter",
0x47: "svcCreatePort",
0x48: "svcCreateSessionToPort",
0x49: "svcCreateSession",
0x4A: "svcAcceptSession",
0x4B: "svcReplyAndReceive1",
0x4C: "svcReplyAndReceive2",
0x4D: "svcReplyAndReceive3",
0x4E: "svcReplyAndReceive4",
0x4F: "svcReplyAndReceive",
0x50: "svcBindInterrupt",
0x51: "svcUnbindInterrupt",
0x52: "svcInvalidateProcessDataCache",
0x53: "svcStoreProcessDataCache",
0x54: "svcFlushProcessDataCache",
0x55: "svcStartInterProcessDma",
0x56: "svcStopDma",
0x57: "svcGetDmaState",
0x58: "svcRestartDma",
0x59: "svcSetGpuProt",
0x5A: "svcSetWifiEnabled",
0x60: "svcDebugActiveProcess",
0x61: "svcBreakDebugProcess",
0x62: "svcTerminateDebugProcess",
0x63: "svcGetProcessDebugEvent",
0x64: "svcContinueDebugEvent",
0x65: "svcGetProcessList",
0x66: "svcGetThreadList",
0x67: "svcGetDebugThreadContext",
0x68: "svcSetDebugThreadContext",
0x69: "svcQueryDebugProcessMemory",
0x6A: "svcReadProcessMemory",
0x6B: "svcWriteProcessMemory",
0x6C: "svcSetHardwareBreakPoint",
0x6D: "svcGetDebugThreadParam",
0x70: "svcControlProcessMemory",
0x71: "svcMapProcessMemory",
0x72: "svcUnmapProcessMemory",
0x73: "svcCreateCodeSet",
0x74: "svcRandomStub",
0x75: "svcCreateProcess",
0x76: "svcTerminateProcess",
0x77: "svcSetProcessResourceLimits",
0x78: "svcCreateResourceLimit",
0x79: "svcSetResourceLimitValues",
0x7A: "svcAddCodeSegment",
0x7B: "svcBackdoor",
0x7C: "svcKernelSetState",
0x7D: "svcQueryProcessMemory"
}
for segea in Segments():
for funcea in Functions(segea, SegEnd(segea)):
for (startea, endea) in Chunks(funcea):
for head in Heads(startea, endea):
if GetMnem(head) == 'SVC':
syscall_num = GetOperandValue(head, 0)
if syscall_num in syscall_map:
MakeNameEx(startea, syscall_map[syscall_num], SN_NOWARN)
else:
MakeNameEx(startea, "svcUnknown" + hex(syscall_num)[:-1], SN_NOWARN)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment