StormBringer thank you for this link I have glanced through it the info in there comes thick and fast so I will be giving that a more thorough reading asap
mentor you are involved in the development of crinkler? excellent tool btw very popular on this forum I love using it

I will try to adapt your advice to my needs I recognise that routine from in4k (or something very similar 'rol edi,6' is ringing stong bells but last time i saw that I had no idea what it was doing) I will use this for learning only I also want to feel the satisfaction of DIY and thanks for sharing it will come in MEGA useful cos its much smaller than what I was thinking of

I was planning on storing the DLL names inside the header file (wherever they will fit), I want something sequencial for accessing them I did not want to be pointing esi at string then back to hashes ... hey wait a minute

of course storing the string inside the struct IS easier I can just roll from one to the other. Okay I shut my mouth now cos this is one time I should be listening
BTW another thing I plan on using, I dont think this has ever been done before if it has then I wanna know what its called, I will store my invokes as structures, everything params/VA get loaded then pushed on top of stack (ret is used to call process) in this way a single invoke function is shared by all process calls, the opcode for pushing each parameter is eliminated.
Here is a 16 bit mockup if you run it slowly in a debugger you will see what it is doing
at first it calls two dummy routines in a sort of initialise phase
then calls a dummy routine in an infinate loop
the dummys simply consume the parameters then return it gives a concept of what I am going for. Using this and a well optmised getprocessaddress is a good 512 byter feasable? (uncompressed)
ORG 0x100
D1 = 0x011C
D2 = 0x0121
BEGINS:LEA SI,COMMND ; BE 14 00 ;
CALL INVOKE ; E8 07 00 ;
ETERNL:PUSH SI ; 56 ;
CALL INVOKE ; E8 03 00 ;
POP SI ; 5E ;
JMP ETERNL ; EB F9 ;
INVOKE:XOR AX,AX ; 33 C0 ; AX = 0
LODSB ; AA ; AL = NUM_PARAMS
XCHG AX,CX ; 91 ; CX = NUM_PARAMS
JCXZ RETURN ; E3 08 ; RETURN ON NUM_PARAMS = 0
PUSH OFFSET INVOKE ; 68 0F 01 ; USE INVOKE AS RETURN ADDRESS
PARAMS:PUSH [SI] ; FF 34 ; PUSH PARAMS | VA
LODSW ; AD ; SI++
LOOP PARAMS ; E2 FC ; LOOP FOR ALL ELEMENTS OF STRUCT
RETURN:RET ; C3 ; LOOP INVOKE | RETURN TO CALLER
DUMMY1:POP DX ;
POP DX ;
POP DX ;
POP DX ;
RET ;
DUMMY2:POP DX ;
POP DX ;
RET ;
COMMND DB 0x05 ; NUMPARAMS+1
DW 0x0000 ; PARAM 4
DW 0x0000 ; PARAM 3
DW 0x0000 ; PARAM 2
DW 0x0000 ; PARAM 1
DW D1 ; VA DUMMY 1
DB 0x03 ; NUMPARAMS+1
DW 0x0000 ; PARAM 2
DW 0x0000 ; PARAM 1
DW D2 ; VA DUMMY 2
DB 0x00 ; END OUTER LOOP
DB 0x03 ; NUMPARAMS+1
DW 0x0000 ; PARAM 2
DW 0x0000 ; PARAM 1
DW D2 ; VA DUMMY 2
DB 0x00 ; END OUTER LOOP
DB 0x00 ; END ALL