other-licenses/nsis/Contrib/ExDLL/extdll.inc

Tue, 06 Jan 2015 21:39:09 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Tue, 06 Jan 2015 21:39:09 +0100
branch
TOR_BUG_9701
changeset 8
97036ab72558
permissions
-rw-r--r--

Conditionally force memory storage according to privacy.thirdparty.isolate;
This solves Tor bug #9701, complying with disk avoidance documented in
https://www.torproject.org/projects/torbrowser/design/#disk-avoidance.

     1 ;################################################################
     2 ; ExtDLL header for MASM32
     3 ;
     4 ; Author: Ramon
     5 ;
     6 ; Obs: This header must be included after windows.inc and kernel32.inc
     7 ;      because it need the prototypes for lstrcpy, lstrcpyn, 
     8 ;      GlobalAlloc and GlobalFree
     9 ;
    10 ;################################################################
    11 stack_t struct
    12   next dd ?
    13   text dd ? ; 1 DUP(?) ; this should be the length of string_size
    14 stack_t ends
    16 .const
    17 ; For page showing plug-ins
    18 WM_NOTIFY_OUTER_NEXT   equ (WM_USER+0x8)
    19 WM_NOTIFY_CUSTOM_READY equ (WM_USER+0xd)
    20 NOTIFY_BYE_BYE         equ 'x'
    22 INST_0 EQU 0         ; $0
    23 INST_1 EQU 1         ; $1
    24 INST_2 EQU 2         ; $2
    25 INST_3 EQU 3         ; $3
    26 INST_4 EQU 4         ; $4
    27 INST_5 EQU 5         ; $5
    28 INST_6 EQU 6         ; $6
    29 INST_7 EQU 7         ; $7
    30 INST_8 EQU 8         ; $8
    31 INST_9 EQU 9         ; $9
    32 INST_R0 EQU 10        ; $R0
    33 INST_R1 EQU 11        ; $R1
    34 INST_R2 EQU 12        ; $R2
    35 INST_R3 EQU 13        ; $R3
    36 INST_R4 EQU 14        ; $R4
    37 INST_R5 EQU 15        ; $R5
    38 INST_R6 EQU 16        ; $R6
    39 INST_R7 EQU 17        ; $R7
    40 INST_R8 EQU 18        ; $R8
    41 INST_R9 EQU 19        ; $R9
    42 INST_CMDLINE EQU 20   ; $CMDLINE
    43 INST_INSTDIR EQU 21   ; $INSTDIR
    44 INST_OUTDIR EQU 22    ; $OUTDIR
    45 INST_EXEDIR EQU 23    ; $EXEDIR
    46 INST_LANG EQU 24      ; $LANGUAGE
    47 __INST_LAST EQU 25
    49 .data?
    50 g_stringsize dd ?
    51 g_stacktop dd ?
    52 g_variables dd ?
    54 m2m MACRO M1, M2
    55       push M2
    56       pop  M1
    57 ENDM
    59 EXDLL_INIT MACRO
    60       m2m g_stringsize, string_size
    61       m2m g_stacktop, stacktop
    62       m2m g_variables, variables
    63 ENDM
    65 .code
    67 ; utility functions (not required but often useful)
    68 popstring proc uses edi pStr:DWORD
    70   LOCAL th:DWORD
    72   mov edi, g_stacktop
    73   cmp edi, 0
    74   jz  STACK_ERR
    75   mov edi, [edi]
    76   cmp edi, 0
    77   jz  STACK_ERR
    79   ASSUME edi:PTR stack_t
    80   invoke lstrcpy, pStr, ADDR [edi].text
    81   mov th , edi
    82   mov edi, [edi].next
    83   mov eax, g_stacktop
    84   mov [eax], edi
    85   invoke GlobalFree, th
    86   ASSUME edi:PTR NOTHING
    87   mov eax, 0
    88   ret
    90 STACK_ERR:
    91   mov eax, 1
    92   ret
    94 popstring endp
    96 pushstring proc uses edi pStr:DWORD
    98   cmp g_stacktop, 0
    99   jz  STACK_ERR
   101   mov eax, sizeof stack_t
   102   add eax, g_stringsize
   103   invoke GlobalAlloc, GPTR, eax
   105   mov edi, eax
   106   assume edi:PTR stack_t
   108   invoke lstrcpyn, ADDR [edi].text, pStr, g_stringsize
   109   mov eax, g_stacktop
   110   push DWORD PTR[eax]
   111   mov [eax], edi
   112   pop eax
   113   ;lea edi, [edi].next ; Not needed [edi].next == edi
   114   mov DWORD PTR[edi], eax
   115   ASSUME edi:PTR NOTHING
   117 STACK_ERR:
   118   ret
   120 pushstring endp
   122 getuservariable proc varnum:DWORD
   124   .if varnum < 0 || varnum >= __INST_LAST
   125     xor eax, eax
   126   .else
   127     mov eax, varnum
   128     imul eax, g_stringsize
   129     add eax, g_variables
   130   .endif
   131   ret
   133 getuservariable endp
   135 setuservariable proc varnum:DWORD, var:DWORD
   137   .if (var != NULL && varnum >= 0 && varnum < __INST_LAST)
   138     mov eax, varnum
   139     imul eax, g_stringsize
   140     add eax, g_variables
   141     invoke lstrcpy, eax, var
   142   .endif
   143   ret
   145 setuservariable endp

mercurial