Copy Link
Add to Bookmark
Report

29A Issue 03 03 09

eZine's profile picture
Published in 
29A
 · 28 Dec 2019

  

ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ[jqencode.asm]ÄÄ
;
;JQENCODE.ASM - Supertiny/fast Compression/Encryption library - Compressor
;(c) 1998 by Jacky Qwerty/29A.
;

.386p

include jqcoding.inc

_text segment byte use32 public 'CODE'
assume cs:_text, ds:_text, ss:_text

;unsigned long
;__stdcall
;jq_encode(void *out, /* output stream ptr */
; const void *in, /* input stream ptr */
; unsigned long in_len, /* input stream length */
; void *mem64k); /* work mem ptr */

jq_encode proc
sub edx, edx
xchg eax, edx
pushad
mov ebp, esp
and ecx, eax
mov edi, [_mem64k + ebp]
cld
mov ch, (SizeOf_Mem / 4) / 256
push edi
rep stosd
sub edx, invalid_state
mov esi, [_in + ebp]
.if zero?
dec edx
.endif
push ecx
sub ax, 0AEB6h
mov edi, [_out + ebp]
pop ebx
stosw
xchg eax, edx
pop ebp
stosd
push edi
xchg eax, edx
push esp
.repeat
test cl, 7
lodsb
.if zero?
xchg edx, [esp]
adc ah, dl
pop edx
xchg edi, [esp]
ror edx, 1
mov [edi], ah
.if !carry?
xor edx, mask0 xor mask1
.endif
pop edi
mov ah, 0FFh
push edi
xor edx, mask1
inc edi
push edx
.endif
_mem64k equ <ebp>
cmp al, [_mem64k + ebx]
.if !zero?
ror edx, 1
mov [_mem64k + ebx], al
.if carry?
xor edx, mask0 xor mask1
.endif
mov bh, al
xor edx, mask0
adc al, dl
stosb
mov al, bh
stc
.endif
inc ecx
mov bh, bl
rcl ah, 1
cmp ecx, [_in_len + (2 * _Pushed) + esp]
mov bl, al
.until !carry?
ror ah, cl
pop ebx
add ah, bl
pop esi
mov ebp, esp
sub edi, [_out + ebp]
mov [_Pushad._edx + ebp], edx
xchg [esi], ah
add [_Pushad._eax + ebp], edi
popad
ret (_Args * _Pushed)
jq_encode endp
public jq_encode

_text ends

end
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ[jqencode.asm]ÄÄ
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ[jqdecode.asm]ÄÄ
;
;JQDECODE.ASM - Supertiny/fast Compression/Encryption library - Decompressor
;(c) 1998 by Jacky Qwerty/29A.
;

.386p

include jqcoding.inc

_text segment byte use32 public 'CODE'
assume cs:_text, ds:_text, ss:_text

;unsigned long
;__stdcall
;jq_decode(void *out, /* output stream ptr */
; const void *in, /* input stream ptr */
; unsigned long in_len, /* input stream length */
; void *mem64k); /* work mem ptr */

jq_decode proc
sub eax, eax
pushad
mov ebp, esp
and ecx, eax
mov edi, [_mem64k + ebp]
cld
mov ch, (SizeOf_Mem / 4) / 256
push edi
rep stosd
mov esi, [_in + ebp]
xchg ebx, eax
add ecx, [_in_len + ebp]
lodsw
mov edi, [_out + ebp]
add ecx,-6
pop ebp
lodsd
xchg edx, eax
.repeat
test byte ptr [_Pushad._eax + esp], 7
.if zero?
ror edx, 1
jecxz L0_jq_decode
.if carry?
xor edx, mask0 xor mask1
.endif
lodsb
dec ecx
xor edx, mask0
sbb al, dl
mov ah, al
.endif
shl ah, 1
inc byte ptr [_Pushad._eax + esp]
.if carry?
ror edx, 1
jecxz L0_jq_decode
.if !carry?
xor edx, mask0 xor mask1
.endif
lodsb
dec ecx
xor edx, mask1
sbb al, dl
_mem64k equ <ebp>
mov [_mem64k + ebx], al
.endif
mov al, [_mem64k + ebx]
mov bh, bl
stosb
mov bl, al
.until 0
dec edx
push ecx
L0_jq_decode:
sub edi, [_out + esp]
mov [_Pushad._eax + esp], edi
popad
ret (_Args * _Pushed)
jq_decode endp
public jq_decode

_text ends

end
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ[jqdecode.asm]ÄÄ
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ[jqcoding.asm]ÄÄ
;
;JQCODING.ASM - Superfast/Supertiny Compression/Encryption library.
;(c) 1998 by Jacky Qwerty/29A.
;

jq_encode: sub edx, edx ;Encoder/Encryptor
xchg eax, edx
pushad
mov ebp, esp
and ecx, eax
mov edi, [ebp+30h]
cld
mov ch, 40h
push edi
rep stosd
sub edx, 2864E25Ch
mov esi, [ebp+28h]
jnz jq_e0
dec edx
jq_e0: push ecx
sub ax, 0AEB6h
mov edi, [ebp+24h]
pop ebx
stosw
xchg eax, edx
pop ebp
stosd
push edi
xchg eax, edx
push esp
jq_e1: test cl, 7
lodsb
jnz jq_e3
xchg edx, [esp]
adc ah, dl
pop edx
xchg edi, [esp]
ror edx, 1
mov [edi], ah
jc jq_e2
xor edx, 2C047C3Eh
jq_e2: pop edi
mov ah, 0FFh
push edi
xor edx, 76C52B8Dh
inc edi
push edx
jq_e3: cmp al, [ebx+ebp]
jz jq_e5
ror edx, 1
mov [ebx+ebp], al
jnc jq_e4
xor edx, 2C047C3Eh
jq_e4: mov bh, al
xor edx, 5AC157B3h
adc al, dl
stosb
mov al, bh
stc
jq_e5: inc ecx
mov bh, bl
rcl ah, 1
cmp ecx, [esp+34h]
mov bl, al
jc jq_e1
ror ah, cl
pop ebx
add ah, bl
pop esi
mov ebp, esp
sub edi, [ebp+24h]
mov [ebp+14h], edx
xchg ah, [esi]
add [ebp+1Ch], edi
popad
ret 10h

jq_decode: sub eax, eax ;Decoder/Decryptor
pushad
mov ebp, esp
and ecx, eax
mov edi, [ebp+30h]
cld
mov ch, 40h
push edi
rep stosd
mov esi, [ebp+28h]
xchg ebx, eax
add ecx, [ebp+2Ch]
lodsw
mov edi, [ebp+24h]
add ecx,-6
pop ebp
lodsd
xchg eax, edx
jq_d0: test byte ptr [esp+1Ch], 7
jnz jq_d2
ror edx, 1
jecxz jq_d5
jnc jq_d1
xor edx, 2C047C3Eh
jq_d1: lodsb
dec ecx
xor edx, 5AC157B3h
sbb al, dl
mov ah, al
jq_d2: shl ah, 1
inc byte ptr [esp+1Ch]
jnc jq_d4
ror edx, 1
jecxz jq_d5
jc jq_d3
xor edx, 2C047C3Eh
jq_d3: lodsb
dec ecx
xor edx, 76C52B8Dh
sbb al, dl
mov [ebx+ebp], al
jq_d4: mov al, [ebx+ebp]
mov bh, bl
stosb
mov bl, al
jmp jq_d0
dec edx
push ecx
jq_d5: sub edi, [esp+24h]
mov [esp+1Ch], edi
popad
ret 10h
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ[jqcoding.asm]ÄÄ
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ[jqcoding.inc]ÄÄ
;
;JQCODING.INC - Supertiny/fast Compression/Encryption library - ASM include
;(c) 1998 by Jacky Qwerty/29A.
;

SizeOf_Mem equ 10000h ;64Kb

ifndef mask0
mask0 equ 5AC157B3h
endif
ifndef mask1
mask1 equ 76C52B8Dh
endif

invalid_state equ 2864E25Ch

_Pushed_ret equ 4
_Pushed equ 4

_Pushad struc
_edi dd ?
_esi dd ?
_ebp dd ?
_esp dd ?
_ebx dd ?
_edx dd ?
_ecx dd ?
_eax dd ?
_Pushad ends

_out equ <_Pushed_ret + size _Pushad + 0>
_in equ <_Pushed_ret + size _Pushad + 4>
_in_len equ <_Pushed_ret + size _Pushad + 8>
_mem64k equ <_Pushed_ret + size _Pushad + 12>

_Args equ 4

jq_encode equ <_jq_encode@16>
jq_decode equ <_jq_decode@16>
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ[jqcoding.inc]ÄÄ
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ[jqcoding.h]ÄÄ
/*
JQCODING.H - Supertiny/fast Compression/Encryption library - C/C++ header
(c) 1998 by Jacky Qwerty/29A.
*/

unsigned long
__stdcall
jq_encode(void *out, /* output stream ptr */
const void *in, /* input stream ptr */
unsigned long in_len, /* input stream length */
void *mem64k); /* work mem ptr */

unsigned long
__stdcall
jq_decode(void *out, /* output stream ptr */
const void *in, /* input stream ptr */
unsigned long in_len, /* input stream length */
void *mem64k); /* work mem ptr */
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ[jqcoding.h]ÄÄ

← previous
next →
loading
sending ...
New to Neperos ? Sign Up for free
download Neperos App from Google Play
install Neperos as PWA

Let's discover also

Recent Articles

Recent Comments

Neperos cookies
This website uses cookies to store your preferences and improve the service. Cookies authorization will allow me and / or my partners to process personal data such as browsing behaviour.

By pressing OK you agree to the Terms of Service and acknowledge the Privacy Policy

By pressing REJECT you will be able to continue to use Neperos (like read articles or write comments) but some important cookies will not be set. This may affect certain features and functions of the platform.
OK
REJECT