{"version":3,"file":"path32.mjs","names":["PATH_I386","PatchPath","PatchPath32","PatchPath32Dir","PatchPath32File","_addr_","_remap_","_ebx_","check","_relative","rel","_find","find","_offset","o","shdr","i","d","_findFuzzyCode","addr","shAddr","ebx","_findEbx","v","DataView","buffer","byteOffset","byteLength","ptr","getInt32","getUint32","remap","_getRemap","patch","_theShdrForAddress","data","setInt32","setUint32","PatchPath32FileAbs","PatchPath32FileRel","path32","setUint8"],"sources":["../../../../src/util/internal/linux/path32.ts"],"sourcesContent":["/* eslint-disable max-classes-per-file */\n\nimport {PATH_I386} from './asm.ts';\nimport {Elf32} from './elf.ts';\nimport {PatchPath} from './path.ts';\n\n/**\n * PatchPath32 object.\n */\nexport abstract class PatchPath32 extends PatchPath<Elf32> {}\n\n/**\n * PatchPath32Dir object.\n */\nabstract class PatchPath32Dir extends PatchPath32 {}\n\n/**\n * PatchPath32File object.\n */\nabstract class PatchPath32File extends PatchPath32 {\n\t/**\n\t * Relative offset.\n\t */\n\tprotected abstract readonly _relative: boolean;\n\n\t/**\n\t * Fuzzy find.\n\t */\n\tprotected abstract readonly _find: number[];\n\n\t/**\n\t * Address offset.\n\t */\n\tprotected abstract readonly _offset: number;\n\n\tprivate _addr_ = 0;\n\n\tprivate _remap_ = 0;\n\n\tprivate _ebx_ = 0;\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic check() {\n\t\tconst {_relative: rel, _find: find, _offset: o} = this;\n\t\tfor (const [shdr, i, d] of this._findFuzzyCode(find)) {\n\t\t\tconst addr = shdr.shAddr + i;\n\t\t\tconst ebx = rel ? this._findEbx(addr) : null;\n\t\t\tif (rel && ebx === null) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst v = new DataView(d.buffer, d.byteOffset, d.byteLength);\n\t\t\tconst ptr = rel\n\t\t\t\t? (ebx as number) + v.getInt32(i + o, true)\n\t\t\t\t: v.getUint32(i + o, true);\n\t\t\tconst remap = this._getRemap(ptr);\n\t\t\tif (!remap) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (this._addr_) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthis._addr_ = addr;\n\t\t\tthis._remap_ = remap;\n\t\t\tif (rel) {\n\t\t\t\tthis._ebx_ = ebx as number;\n\t\t\t}\n\t\t}\n\t\treturn !!this._addr_;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic patch() {\n\t\tconst {_relative: rel, _offset: o} = this;\n\t\tconst addr = this._addr_;\n\t\tconst shdr = this._theShdrForAddress(addr);\n\t\tconst v = new DataView(shdr.data);\n\t\tconst i = addr - shdr.shAddr;\n\t\tif (rel) {\n\t\t\tv.setInt32(i + o, this._remap_ - this._ebx_, true);\n\t\t} else {\n\t\t\tv.setUint32(i + o, this._remap_, true);\n\t\t}\n\t}\n}\n\n/**\n * PatchPath32FileAbs object.\n */\nabstract class PatchPath32FileAbs extends PatchPath32File {\n\t/**\n\t * @inheritDoc\n\t */\n\tprotected readonly _relative = false;\n}\n\n/**\n * PatchPath32FileRel object.\n */\nabstract class PatchPath32FileRel extends PatchPath32File {\n\t/**\n\t * @inheritDoc\n\t */\n\tprotected readonly _relative = true;\n}\n\n/**\n * Patch objects.\n */\nexport const path32 = [\n\t/**\n\t * 6.0.79.0 i386.\n\t */\n\tclass extends PatchPath32Dir {\n\t\tprivate _addr_ = 0;\n\n\t\t/**\n\t\t * @inheritDoc\n\t\t */\n\t\tpublic check() {\n\t\t\tfor (const [shdr, i] of this._findFuzzyCode(PATH_I386['6'])) {\n\t\t\t\tif (this._addr_) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tthis._addr_ = shdr.shAddr + i;\n\t\t\t}\n\t\t\treturn !!this._addr_;\n\t\t}\n\n\t\t/**\n\t\t * @inheritDoc\n\t\t */\n\t\tpublic patch() {\n\t\t\tconst {_addr_: addr} = this;\n\t\t\tconst shdr = this._theShdrForAddress(addr);\n\t\t\tconst v = new DataView(shdr.data);\n\t\t\tconst i = addr - shdr.shAddr;\n\n\t\t\t// sIsProjector -> sExecutableName\n\t\t\tconst ptr = v.getUint32(i + 24, true) + 4;\n\n\t\t\t// nop 2x\n\t\t\tv.setUint8(i + 68, 0x90);\n\t\t\tv.setUint8(i + 69, 0x90);\n\n\t\t\t// mov     esi, DWORD PTR ds:...\n\t\t\tv.setUint8(i + 70, 0x8b);\n\t\t\tv.setUint8(i + 71, 0x35);\n\t\t\tv.setUint32(i + 72, ptr, true);\n\n\t\t\t// push     esi\n\t\t\tv.setUint8(i + 96, 0x56);\n\n\t\t\t// push     esi\n\t\t\tv.setUint8(i + 122, 0x56);\n\t\t}\n\t},\n\n\t/**\n\t * 9.0.115.0 i386.\n\t */\n\tclass extends PatchPath32FileAbs {\n\t\t/**\n\t\t * @inheritDoc\n\t\t */\n\t\tprotected readonly _find = PATH_I386['9'];\n\n\t\t/**\n\t\t * @inheritDoc\n\t\t */\n\t\tprotected readonly _offset = 10;\n\t},\n\n\t/**\n\t * 10.0.12.36 i386.\n\t */\n\tclass extends PatchPath32FileAbs {\n\t\t/**\n\t\t * @inheritDoc\n\t\t */\n\t\tprotected readonly _find = PATH_I386['10.0'];\n\n\t\t/**\n\t\t * @inheritDoc\n\t\t */\n\t\tprotected readonly _offset = 16;\n\t},\n\n\t/**\n\t * 10.1.53.64 i386.\n\t */\n\tclass extends PatchPath32FileAbs {\n\t\t/**\n\t\t * @inheritDoc\n\t\t */\n\t\tprotected readonly _find = PATH_I386['10.1'];\n\n\t\t/**\n\t\t * @inheritDoc\n\t\t */\n\t\tprotected readonly _offset = 16;\n\t},\n\n\t/**\n\t * 11.0.1.152 i386.\n\t */\n\tclass extends PatchPath32FileAbs {\n\t\t/**\n\t\t * @inheritDoc\n\t\t */\n\t\tprotected readonly _find = PATH_I386['11.0'];\n\n\t\t/**\n\t\t * @inheritDoc\n\t\t */\n\t\tprotected readonly _offset = 18;\n\t},\n\n\t/**\n\t * 11.2.202.228 i386.\n\t */\n\tclass extends PatchPath32FileRel {\n\t\t/**\n\t\t * @inheritDoc\n\t\t */\n\t\tprotected readonly _find = PATH_I386['11.2'];\n\n\t\t/**\n\t\t * @inheritDoc\n\t\t */\n\t\tprotected readonly _offset = 2;\n\t}\n] as (new (elf: Elf32) => PatchPath32File)[];\n"],"mappings":"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","ignoreList":[]}