{"version":3,"file":"linux.mjs","names":["launcher","align","findIndex","decode","Elf32Shdr","Elf64Shdr","PT_LOAD","SHF_ALLOC","SHT_NOBITS","SHT_PROGBITS","SHT_STRTAB","title64","title32","menu64","menu32","path64","path32","offset64","add","a","b","linuxProjectorAddSection","elf","data","te","TextEncoder","aligned","secnameData","secnameDataD","encode","secnameDataS","length","secnameEof","secnameEofD","secnameEofS","secdata","ArrayBuffer","Uint8Array","set","phdrLoadLast","phdr","programHeaders","pType","pVaddr","Error","origPhdrLoadEndM","pMemsz","origPhdrLoadEndF","pOffset","pFilesz","endM","endF","allowBssAfterLoadData","bits","shdr","sectionHeaders","shType","shFlags","insertI","secnameI","unloaded","i","shAddr","shName","shSize","shOffset","fileSize","push","sort","Number","shtrndx","elfHeader","eShtrndx","d","newData","byteLength","BigInt","sectionOffset","sectionAddrOffset","dataSection","eofSection","dataS","shLink","shInfo","shAddralign","shEntsize","splice","eofS","size","eShnum","eShoff","linuxProjectorPatch","options","patchWindowTitle","patchMenuRemove","patchProjectorPath","patchProjectorOffset","e","DataView","buffer","byteOffset","patchers","titleData","titleA","titleL","patches","map","Patch","type","found","patch","check","encoded","linuxLauncher"],"sources":["../../src/util/linux.ts"],"sourcesContent":["import {launcher} from '../util.ts';\n\nimport {align, findIndex} from './internal/data.ts';\nimport {\n\tdecode,\n\tElf32,\n\tElf32Shdr,\n\tElf64,\n\tElf64Shdr,\n\tPT_LOAD,\n\tSHF_ALLOC,\n\tSHT_NOBITS,\n\tSHT_PROGBITS,\n\tSHT_STRTAB\n} from './internal/linux/elf.ts';\nimport {Patch} from './internal/linux/patch.ts';\nimport {title64} from './internal/linux/title64.ts';\nimport {title32} from './internal/linux/title32.ts';\nimport {menu64} from './internal/linux/menu64.ts';\nimport {menu32} from './internal/linux/menu32.ts';\nimport {path64} from './internal/linux/path64.ts';\nimport {path32} from './internal/linux/path32.ts';\nimport {offset64} from './internal/linux/offset64.ts';\n\n/**\n * Add two numbers of bigints assuming same type.\n *\n * @param a A number of bigint.\n * @param b A number of bigint.\n * @returns A number of bigint.\n */\nfunction add(a: number | bigint, b: number | bigint) {\n\treturn ((a as number) + (b as number)) as number | bigint;\n}\n\n/**\n * Add a data section to an existring ELF.\n *\n * @param elf Elf object.\n * @param data New data.\n * @returns Inserted section.\n */\nfunction linuxProjectorAddSection(\n\telf: Elf32 | Elf64,\n\tdata: Readonly<Uint8Array>\n) {\n\tconst te = new TextEncoder();\n\tconst aligned = 64;\n\tconst secnameData = '.shockpkg.data';\n\tconst secnameDataD = te.encode(`${secnameData}\\0`);\n\tconst secnameDataS = secnameDataD.length;\n\tconst secnameEof = '.shockpkg.eof';\n\tconst secnameEofD = te.encode(`${secnameEof}\\0`);\n\tconst secnameEofS = secnameEofD.length;\n\tconst secdata = new ArrayBuffer(align(data.length, aligned));\n\tnew Uint8Array(secdata).set(data);\n\n\t// Get the highest PT_LOAD program header, sanity checked.\n\tlet phdrLoadLast = null;\n\tfor (const phdr of elf.programHeaders) {\n\t\tif (\n\t\t\tphdr.pType === PT_LOAD &&\n\t\t\t(phdrLoadLast === null || phdr.pVaddr >= phdrLoadLast.pVaddr)\n\t\t) {\n\t\t\tphdrLoadLast = phdr;\n\t\t}\n\t}\n\tif (!phdrLoadLast) {\n\t\tthrow new Error('No PT_LOAD program headers');\n\t}\n\tconst origPhdrLoadEndM = add(phdrLoadLast.pVaddr, phdrLoadLast.pMemsz);\n\tconst origPhdrLoadEndF = add(phdrLoadLast.pOffset, phdrLoadLast.pFilesz);\n\tfor (const phdr of elf.programHeaders) {\n\t\tconst endM = add(phdr.pVaddr, phdr.pMemsz);\n\t\tif (endM > origPhdrLoadEndM) {\n\t\t\tthrow new Error('Program header memory after PT_LOAD');\n\t\t}\n\t\tconst endF = add(phdr.pOffset, phdr.pFilesz);\n\t\tif (endF > origPhdrLoadEndF) {\n\t\t\tthrow new Error('Program header data after PT_LOAD');\n\t\t}\n\t}\n\n\t// The .bss section header in 6.0.79.0 is weird.\n\tlet allowBssAfterLoadData = false;\n\tif (elf.bits !== 64) {\n\t\tfor (const shdr of elf.sectionHeaders) {\n\t\t\tif (shdr.shType !== SHT_STRTAB || shdr.shFlags !== SHF_ALLOC) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Only FP6 uses this older library.\n\t\t\tallowBssAfterLoadData =\n\t\t\t\tfindIndex(\n\t\t\t\t\tnew Uint8Array(shdr.data),\n\t\t\t\t\tte.encode('libgtk-1.2.so.0')\n\t\t\t\t) >= 0;\n\t\t}\n\t}\n\n\t// List the trailing unloaded section headers, sanity checked.\n\tlet insertI = 0;\n\tlet secnameI = 0;\n\tconst unloaded = [];\n\tfor (let i = 0; i < elf.sectionHeaders.length; i++) {\n\t\tconst shdr = elf.sectionHeaders[i];\n\t\tif (shdr.shAddr) {\n\t\t\tinsertI = i + 1;\n\t\t\tsecnameI = shdr.shName;\n\t\t\tif (add(shdr.shAddr, shdr.shSize) > origPhdrLoadEndM) {\n\t\t\t\tthrow new Error('Loaded section memory after PT_LOAD');\n\t\t\t}\n\t\t\tif (\n\t\t\t\t!(allowBssAfterLoadData && shdr.shType === SHT_NOBITS) &&\n\t\t\t\tadd(shdr.shOffset, shdr.fileSize) > origPhdrLoadEndF\n\t\t\t) {\n\t\t\t\tthrow new Error('Loaded section data after PT_LOAD');\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tif (shdr.shOffset) {\n\t\t\tif (shdr.shOffset < origPhdrLoadEndF) {\n\t\t\t\tthrow new Error('Unloaded section data before end PT_LOAD');\n\t\t\t}\n\t\t\tunloaded.push(shdr);\n\t\t}\n\t}\n\tunloaded.sort((a, b) => Number(add(a.shOffset, -b.shOffset)));\n\tconst shtrndx = elf.sectionHeaders[elf.elfHeader.eShtrndx];\n\tfor (const d = new Uint8Array(shtrndx.data); d[secnameI++]; );\n\n\t// Insert new section names.\n\tconst newData = new ArrayBuffer(\n\t\tshtrndx.data.byteLength + secnameDataS + secnameEofS\n\t);\n\t{\n\t\tconst data = new Uint8Array(newData);\n\t\tlet i = 0;\n\t\tfor (const a of [\n\t\t\tnew Uint8Array(shtrndx.data, 0, secnameI),\n\t\t\tsecnameDataD,\n\t\t\tsecnameEofD,\n\t\t\tnew Uint8Array(shtrndx.data, secnameI)\n\t\t]) {\n\t\t\tdata.set(a, i);\n\t\t\ti += a.length;\n\t\t}\n\t}\n\tshtrndx.data = newData;\n\tshtrndx.shSize =\n\t\telf.bits === 64\n\t\t\t? BigInt(shtrndx.data.byteLength)\n\t\t\t: shtrndx.data.byteLength;\n\tfor (const shdr of elf.sectionHeaders) {\n\t\tif (shdr.shName >= secnameI) {\n\t\t\tshdr.shName += secnameDataS + secnameEofS;\n\t\t}\n\t}\n\n\t// Insert new sections and section data.\n\tlet sectionOffset = Number(add(phdrLoadLast.pOffset, phdrLoadLast.pMemsz));\n\tsectionOffset = align(sectionOffset, 64);\n\tconst sectionAddrOffset = sectionOffset - Number(phdrLoadLast.pOffset);\n\tlet dataSection = null;\n\tlet eofSection = null;\n\tif (elf.bits === 64) {\n\t\tconst dataS = new Elf64Shdr();\n\t\tdataS.shName = secnameI;\n\t\tdataS.shType = SHT_PROGBITS;\n\t\tdataS.shFlags = BigInt(SHF_ALLOC);\n\t\tdataS.shAddr = BigInt(phdrLoadLast.pVaddr) + BigInt(sectionAddrOffset);\n\t\tdataS.shOffset = BigInt(sectionOffset);\n\t\tdataS.shSize = BigInt(secdata.byteLength);\n\t\tdataS.shLink = 0;\n\t\tdataS.shInfo = 0;\n\t\tdataS.shAddralign = BigInt(aligned);\n\t\tdataS.shEntsize = 0n;\n\t\tdataS.data = secdata;\n\t\telf.sectionHeaders.splice(insertI, 0, dataS);\n\t\tdataSection = dataS;\n\n\t\tconst eofS = new Elf64Shdr();\n\t\teofS.shName = secnameI + secnameDataS;\n\t\teofS.shType = SHT_PROGBITS;\n\t\teofS.shFlags = 0n;\n\t\teofS.shAddr = 0n;\n\t\teofS.shOffset = BigInt(elf.size);\n\t\teofS.shSize = 0n;\n\t\teofS.shLink = 0;\n\t\teofS.shInfo = 0;\n\t\teofS.shAddralign = 1n;\n\t\teofS.shEntsize = 0n;\n\t\telf.sectionHeaders.splice(insertI + 1, 0, eofS);\n\t\teofSection = eofS;\n\t} else {\n\t\tconst dataS = new Elf32Shdr();\n\t\tdataS.shName = secnameI;\n\t\tdataS.shType = SHT_PROGBITS;\n\t\tdataS.shFlags = SHF_ALLOC;\n\t\tdataS.shAddr = Number(phdrLoadLast.pVaddr) + sectionAddrOffset;\n\t\tdataS.shOffset = sectionOffset;\n\t\tdataS.shSize = secdata.byteLength;\n\t\tdataS.shLink = 0;\n\t\tdataS.shInfo = 0;\n\t\tdataS.shAddralign = aligned;\n\t\tdataS.shEntsize = 0;\n\t\tdataS.data = secdata;\n\t\telf.sectionHeaders.splice(insertI, 0, dataS);\n\t\tdataSection = dataS;\n\n\t\tconst eofS = new Elf32Shdr();\n\t\teofS.shName = secnameI + secnameDataS;\n\t\teofS.shType = SHT_PROGBITS;\n\t\teofS.shFlags = 0;\n\t\teofS.shAddr = 0;\n\t\teofS.shOffset = elf.size;\n\t\teofS.shSize = 0;\n\t\teofS.shLink = 0;\n\t\teofS.shInfo = 0;\n\t\teofS.shAddralign = 1;\n\t\telf.sectionHeaders.splice(insertI + 1, 0, eofS);\n\t\teofSection = eofS;\n\t}\n\telf.elfHeader.eShnum += 2;\n\tif (insertI <= elf.elfHeader.eShtrndx) {\n\t\telf.elfHeader.eShtrndx += 2;\n\t}\n\tsectionOffset += secdata.byteLength;\n\n\t// Extend load header to cover the new section.\n\tphdrLoadLast.pFilesz = phdrLoadLast.pMemsz =\n\t\telf.bits === 64\n\t\t\t? BigInt(sectionOffset - Number(phdrLoadLast.pOffset))\n\t\t\t: sectionOffset - Number(phdrLoadLast.pOffset);\n\n\t// Shift the unloaded section data and the section table forward.\n\tfor (const shdr of unloaded) {\n\t\tif (shdr.shOffset < origPhdrLoadEndF) {\n\t\t\tcontinue;\n\t\t}\n\t\tsectionOffset = align(sectionOffset, Number(shdr.shAddralign));\n\t\t// eslint-disable-next-line unicorn/prefer-ternary\n\t\tif (elf.bits === 64) {\n\t\t\tshdr.shOffset = BigInt(sectionOffset);\n\t\t} else {\n\t\t\tshdr.shOffset = Number(sectionOffset);\n\t\t}\n\t\tsectionOffset += Number(shdr.fileSize);\n\t}\n\tsectionOffset = align(sectionOffset, 16);\n\t// eslint-disable-next-line unicorn/prefer-ternary\n\tif (elf.bits === 64) {\n\t\telf.elfHeader.eShoff = BigInt(sectionOffset);\n\t} else {\n\t\telf.elfHeader.eShoff = Number(sectionOffset);\n\t}\n\n\t// Linux projectors expect a section to cover the headers.\n\t// This is how the code finds the appended projector data.\n\t// For i386 the .bss section happens to do this before being modified.\n\t// For x86_64 this assumption is one of reasons that projectors are broken.\n\t// After the above modifications that poor assumption breaks.\n\t// To companstate update the added unloaded section to point to the end.\n\teofSection.shOffset = elf.bits === 64 ? BigInt(elf.size) : elf.size;\n\n\treturn dataSection;\n}\n\n/**\n * Linux projector patch.\n */\nexport interface ILinuxProjectorPatch {\n\t/**\n\t * Attempt to replace the window title if not null.\n\t *\n\t * @default null\n\t */\n\tpatchWindowTitle?: string | null;\n\n\t/**\n\t * Attempt to patch out application menu.\n\t *\n\t * @default false\n\t */\n\tpatchMenuRemove?: boolean;\n\n\t/**\n\t * Attempt to patch the projector path reading code.\n\t *\n\t * @default false\n\t */\n\tpatchProjectorPath?: boolean;\n\n\t/**\n\t * Attempt to patch the projector offset reading code.\n\t *\n\t * @default false\n\t */\n\tpatchProjectorOffset?: boolean;\n}\n\n/**\n * Apply patches to projector.\n *\n * @param elf Projector data.\n * @param options Patch options.\n * @returns Patched projector.\n */\nexport function linuxProjectorPatch(\n\telf: Readonly<Uint8Array>,\n\toptions: Readonly<ILinuxProjectorPatch>\n) {\n\tconst {\n\t\tpatchWindowTitle,\n\t\tpatchMenuRemove,\n\t\tpatchProjectorPath,\n\t\tpatchProjectorOffset\n\t} = options;\n\n\tconst e = decode(new DataView(elf.buffer, elf.byteOffset, elf.byteLength));\n\n\tconst patchers = [] as [string, Patch<Elf32 | Elf64>[]][];\n\tif (typeof patchWindowTitle === 'string') {\n\t\tconst titleData = new TextEncoder().encode(`${patchWindowTitle}\\0`);\n\t\tconst shdr = linuxProjectorAddSection(e, titleData);\n\t\tconst titleA = shdr.shAddr;\n\t\tconst titleL = titleData.length - 1;\n\n\t\tconst patches =\n\t\t\te.bits === 64\n\t\t\t\t? title64.map(Patch => new Patch(e, titleA as bigint, titleL))\n\t\t\t\t: title32.map(Patch => new Patch(e, titleA as number, titleL));\n\t\tpatchers.push(['Window Title', patches]);\n\t}\n\n\tif (patchMenuRemove) {\n\t\tconst patches =\n\t\t\te.bits === 64\n\t\t\t\t? menu64.map(Patch => new Patch(e))\n\t\t\t\t: menu32.map(Patch => new Patch(e));\n\t\tpatchers.push(['Menu Remove', patches]);\n\t}\n\n\tif (patchProjectorPath) {\n\t\tconst patches =\n\t\t\te.bits === 64\n\t\t\t\t? path64.map(Patch => new Patch(e))\n\t\t\t\t: path32.map(Patch => new Patch(e));\n\t\tpatchers.push(['Projector Path', patches]);\n\t}\n\n\tif (patchProjectorOffset) {\n\t\tif (e.bits === 64) {\n\t\t\tconst patches = offset64.map(Patch => new Patch(e));\n\t\t\tpatchers.push(['Projector Offset', patches]);\n\t\t} else {\n\t\t\tthrow new Error('Invalid configuration');\n\t\t}\n\t}\n\n\tfor (const [type, patches] of patchers) {\n\t\tlet found = null;\n\t\tfor (const patch of patches) {\n\t\t\tif (patch.check()) {\n\t\t\t\tif (found) {\n\t\t\t\t\tthrow new Error(`Multiple patch candidates for: ${type}`);\n\t\t\t\t}\n\t\t\t\tfound = patch;\n\t\t\t}\n\t\t}\n\t\tif (!found) {\n\t\t\tthrow new Error(`No patch candidates for: ${type}`);\n\t\t}\n\t\tfound.patch();\n\t}\n\n\treturn new Uint8Array(e.encoded());\n}\n\n/**\n * Get Linux launcher for the specified type.\n *\n * @param type Executable type.\n * @returns Launcher data.\n */\nexport async function linuxLauncher(type: 'i386' | 'x86_64') {\n\tswitch (type) {\n\t\tcase 'i386': {\n\t\t\treturn launcher('linux-i386');\n\t\t}\n\t\tcase 'x86_64': {\n\t\t\treturn launcher('linux-x86_64');\n\t\t}\n\t\tdefault: {\n\t\t\tthrow new Error(`Invalid type: ${type as string}`);\n\t\t}\n\t}\n}\n"],"mappings":"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","ignoreList":[]}