{"type": "func", "start": 6442544768, "end": 6442545074, "name": "localStorageInit", "pseudocode": "// \n// localStorageInit from 0x180016e80 to 0x180016fb2 (306 bytes)\n// \n// 4 xrefs:\n// > <???> @ 0x18002f074\n// > <???> @ 0x18002f084\n// > <???> @ 0x18002fdf8\n// > <???> @ 0x18004a9c8\n// \n// This function is hookable on this platform!\n// \n// Using BromaIDA 8.0.0 @ https://github.com/Stazzical/BromaIDA\n// Using bindings at commit ba9f177b at Thu Jul 16 22:52:06 2026 from https://github.com/geode-sdk/bindings\n// \n\nvoid __fastcall localStorageInit(const char *a1)\n{\n  int v1; // edi\n  int v2; // ebx\n  int v3; // ebx\n  int v4; // ebx\n  int v5; // edi\n  int v6; // edi\n  __int64 v7; // [rsp+48h] [rbp+10h] BYREF\n\n  if ( !dword_1800486A0 )\n  {\n    if ( !a1 )\n      a1 = \":memory:\";\n    v1 = sqlite3_open(a1, &qword_1800486A8);\n    v2 = sqlite3_prepare_v2(\n           qword_1800486A8,\n           \"CREATE TABLE IF NOT EXISTS data(key TEXT PRIMARY KEY,value TEXT);\",\n           0xFFFFFFFFLL,\n           &v7,\n           0);\n    v3 = sqlite3_step(v7) | v2;\n    v4 = sqlite3_finalize(v7) | v3;\n    if ( v4 && v4 != 101 )\n      sub_1800171C0(\"Error in CREATE TABLE\\n\");\n    v5 = sqlite3_prepare_v2(qword_1800486A8, \"SELECT value FROM data WHERE key=?;\", 0xFFFFFFFFLL, &qword_1800486B0, 0)\n       | v1;\n    v6 = sqlite3_prepare_v2(\n           qword_1800486A8,\n           \"REPLACE INTO data (key, value) VALUES (?,?);\",\n           0xFFFFFFFFLL,\n           &qword_1800486C0,\n           0)\n       | v5;\n    if ( v6\n       | (unsigned int)sqlite3_prepare_v2(\n                         qword_1800486A8,\n                         \"DELETE FROM data WHERE key=?;\",\n                         0xFFFFFFFFLL,\n                         &qword_1800486B8,\n                         0) )\n    {\n      sub_1800171C0(\"Error initializing DB\\n\");\n    }\n    dword_1800486A0 = 1;\n  }\n}", "assembly": "; \n; localStorageInit from 0x180016e80 to 0x180016fb2 (306 bytes)\n; \n; 4 xrefs:\n; > <???> @ 0x18002f074\n; > <???> @ 0x18002f084\n; > <???> @ 0x18002fdf8\n; > <???> @ 0x18004a9c8\n; \n; This function is hookable on this platform!\n; \n; Using BromaIDA 8.0.0 @ https:;github.com/Stazzical/BromaIDA\n; Using bindings at commit ba9f177b at Thu Jul 16 22:52:06 2026 from https:;github.com/geode-sdk/bindings\n; \n\nsub     rsp, 38h                                                       ; +0x0, 0x180016e80\ncmp     cs:dword_1800486A0, 0                                          ; +0x4, 0x180016e84\njnz     loc_180016FAD                                                  ; +0xb, 0x180016e8b\nmov     [rsp+38h+arg_0], rbx                                           ; +0x11, 0x180016e91\nlea     rdx, qword_1800486A8                                           ; +0x16, 0x180016e96\nmov     [rsp+38h+arg_10], rsi                                          ; +0x1d, 0x180016e9d\nmov     [rsp+38h+var_8], rdi                                           ; +0x22, 0x180016ea2\ntest    rcx, rcx                                                       ; +0x27, 0x180016ea7\njnz     short loc_180016EB3                                            ; +0x2a, 0x180016eaa\nlea     rcx, aMemory; \":memory:\"                                       ; +0x2c, 0x180016eac\ncall    cs:sqlite3_open                                                ; +0x33, 0x180016eb3\nmov     rcx, cs:qword_1800486A8                                        ; +0x39, 0x180016eb9\nlea     r9, [rsp+38h+arg_8]                                            ; +0x40, 0x180016ec0\nxor     esi, esi                                                       ; +0x45, 0x180016ec5\nlea     rdx, aCreateTableIfN; \"CREATE TABLE IF NOT EXISTS data(key TEX\"... ; +0x47, 0x180016ec7\nmov     edi, eax                                                       ; +0x4e, 0x180016ece\nmov     [rsp+38h+var_18], rsi                                          ; +0x50, 0x180016ed0\nlea     r8d, [rsi-1]                                                   ; +0x55, 0x180016ed5\ncall    cs:sqlite3_prepare_v2                                          ; +0x59, 0x180016ed9\nmov     rcx, [rsp+38h+arg_8]                                           ; +0x5f, 0x180016edf\nmov     ebx, eax                                                       ; +0x64, 0x180016ee4\ncall    cs:sqlite3_step                                                ; +0x66, 0x180016ee6\nmov     rcx, [rsp+38h+arg_8]                                           ; +0x6c, 0x180016eec\nor      ebx, eax                                                       ; +0x71, 0x180016ef1\ncall    cs:sqlite3_finalize                                            ; +0x73, 0x180016ef3\nor      ebx, eax                                                       ; +0x79, 0x180016ef9\njz      short loc_180016F0E                                            ; +0x7b, 0x180016efb\ncmp     ebx, 65h ; 'e'                                                 ; +0x7d, 0x180016efd\njz      short loc_180016F0E                                            ; +0x80, 0x180016f00\nlea     rcx, Format; \"Error in CREATE TABLE\\n\"                         ; +0x82, 0x180016f02\ncall    sub_1800171C0                                                  ; +0x89, 0x180016f09\nmov     rcx, cs:qword_1800486A8                                        ; +0x8e, 0x180016f0e\nlea     r9, qword_1800486B0                                            ; +0x95, 0x180016f15\nmov     r8d, 0FFFFFFFFh                                                ; +0x9c, 0x180016f1c\nmov     [rsp+38h+var_18], rsi                                          ; +0xa2, 0x180016f22\nlea     rdx, aSelectValueFro; \"SELECT value FROM data WHERE key=?;\"    ; +0xa7, 0x180016f27\ncall    cs:sqlite3_prepare_v2                                          ; +0xae, 0x180016f2e\nmov     rcx, cs:qword_1800486A8                                        ; +0xb4, 0x180016f34\nlea     r9, qword_1800486C0                                            ; +0xbb, 0x180016f3b\nmov     r8d, 0FFFFFFFFh                                                ; +0xc2, 0x180016f42\nmov     [rsp+38h+var_18], rsi                                          ; +0xc8, 0x180016f48\nlea     rdx, aReplaceIntoDat; \"REPLACE INTO data (key, value) VALUES (\"... ; +0xcd, 0x180016f4d\nor      edi, eax                                                       ; +0xd4, 0x180016f54\ncall    cs:sqlite3_prepare_v2                                          ; +0xd6, 0x180016f56\nmov     rcx, cs:qword_1800486A8                                        ; +0xdc, 0x180016f5c\nlea     r9, qword_1800486B8                                            ; +0xe3, 0x180016f63\nmov     r8d, 0FFFFFFFFh                                                ; +0xea, 0x180016f6a\nmov     [rsp+38h+var_18], rsi                                          ; +0xf0, 0x180016f70\nlea     rdx, aDeleteFromData; \"DELETE FROM data WHERE key=?;\"          ; +0xf5, 0x180016f75\nor      edi, eax                                                       ; +0xfc, 0x180016f7c\ncall    cs:sqlite3_prepare_v2                                          ; +0xfe, 0x180016f7e\nmov     rsi, [rsp+38h+arg_10]                                          ; +0x104, 0x180016f84\nor      eax, edi                                                       ; +0x109, 0x180016f89\nmov     rdi, [rsp+38h+var_8]                                           ; +0x10b, 0x180016f8b\nmov     rbx, [rsp+38h+arg_0]                                           ; +0x110, 0x180016f90\njz      short loc_180016FA3                                            ; +0x115, 0x180016f95\nlea     rcx, aErrorInitializ; \"Error initializing DB\\n\"                ; +0x117, 0x180016f97\ncall    sub_1800171C0                                                  ; +0x11e, 0x180016f9e\nmov     cs:dword_1800486A0, 1                                          ; +0x123, 0x180016fa3\nadd     rsp, 38h                                                       ; +0x12d, 0x180016fad\nretn                                                                   ; +0x131, 0x180016fb1", "xrefs": ["<???> @ 0x18002f074", "<???> @ 0x18002f084", "<???> @ 0x18002fdf8", "<???> @ 0x18004a9c8"], "is_objc": false, "is_arm32": false, "is_arm64": false, "bida_info": "8.0.0 @ https://github.com/Stazzical/BromaIDA", "bindings_info": "commit ba9f177b at Thu Jul 16 22:52:06 2026 from https://github.com/geode-sdk/bindings"}