home bbs files messages ]

Forums before death by AOL, social media and spammers... "We can't have nice things"

   comp.lang.asm.x86      Ahh, the lost art of x86 assembly      4,675 messages   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]

   Message 2,779 of 4,675   
   wolfgang kern to All   
   Re: BASE64 again   
   02 Jul 17 11:27:54   
   
   From: nowhere@never.at   
      
   added one more free modfier by reusing lost bytes:   
   (17 possible yet)   
      
   100 pop cx   
   101 push cx   
   102 push cx        ;ax=0   
   103 push byte 56   ;cx=0056   
   105 push 4130      ;dx=4130 to find my first byte with DH   
   108 pop ax   
   109 push ax   
   10a xor ax,4030   
   10d push ax        ;bx=0100   
   10e push cx  dup2  ;sp,bp=0   
   110 sub al,7e      ;   
   112 push ax        ;si=0182   
   113 push byte 044  ;di=0044   
   115 popa           ;   
   116 push BX        ;for ret   
   117 push DI        ;for ret   
   118 sub ax,5b73    ;->  a48d xor 6666 = EB C2   
   11b xor [bx+5C],ax ;make a back-branch to 0120   
   11e jnc 0142       ;=jmp always after xor (73 22)   
      
   120 cmp [si],dh    ;search my first byte (41)   
   122 jnz 0159       ;skip   
   124 3636 REP MOVSB ;   
   126 sub [bp+7a],ax ;ax= 7761 [07a] was 404c   
   129 sub [bp+74],al ;         [074] was 22   
   12c sub [bp+71],ax ; and so on...   
   13f sub [bb+6e],ax   
   132 sub [bp+6b],ax   
   135 sub [bp+69],ax   
   138 sub [bp+66],ax   
   13b sub [bp+60],ax   
   13e jnz 0161       ;=jmp always 75 21   
   140 0d 0a   
   142 36 36   
   144 push bp   
   145 pop ax   
   146 sub ax,6d3b    ;92c5 xor 3636 = A4F3   
   149 xor [bx+24],ax ;create REP MOVS   
   14c sub al,21      ;c5-21=a4   
   14d inc ax  dup2   ;a6 xor 65 = c3   
   14f xor [bx+7e],al ;create a RET in a field of 65 nops   
   152 push bx   
   153 pop di   
   154 push 7761   
   157 pop ax   
   158 dec si   
   159 36 36          ;slide nops   
   15b inc si   
   15c 6666 JMP 120   ;become eb c2   
   15e 6666   
   160 36             ;the only unused byte now   
   161 sub [bp+5e],al   
   164 sub [bp+5c],al   
   167 sub [bp+5a],ax   
   16a sub [bp+55],ax   
   16d sub [bp+51],al   
   170 sub [bb+4d],ah   
   173 363636         ;free for two more   
   176 363636         ;   
   179 sub al,7a      ;   
   17b sub [bp+4b],ax ;   
   17e 6565           ;the return goes here   
   180 6565           ;or there   
   182 0d0a   
   184 3636           ;two are enough with scan start at 0182   
   186 41414141 ...   ;raw string starts here immediate followed by B64   
      
   and with the free options I may save a few string bytes (lateron).   
   __   
   wolfgang   
      
   --- SoupGate-Win32 v1.05   
    * Origin: you cannot sedate... all the things you hate (1:229/2)   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]


(c) 1994,  bbs@darkrealms.ca