Ok i found the garbagestring function. I put it all together. Can anybody make any sense of it?
Code:
#include <iostream>
#include <windows.h>
char *UCase(char *);
char *garbagestring(DWORD StrBytes);
void initgarbage(void);
int GarbagePos;
char *GarbageArray[0x4000];
__inline void AsmPointerFill(DWORD,DWORD,DWORD);
__inline void *MallocZero(size_t);
char *garbagestring(DWORD StrBytes)
{
char *CurrentGarbage;
if (GarbageArray[GarbagePos]) free((void *)GarbageArray[GarbagePos]);
CurrentGarbage=(char *)MallocZero(StrBytes+1);
GarbageArray[GarbagePos]=CurrentGarbage;
GarbagePos=(GarbagePos+1)&0x3fff;
return CurrentGarbage;
}
char *UCase(char *UCaseString)
{
char *StrUCaseTmp;
int StrUCaseLen;
StrUCaseLen=strlen(UCaseString);
StrUCaseTmp=garbagestring(StrUCaseLen);
strncpy(StrUCaseTmp,UCaseString,StrUCaseLen);
StrUCaseTmp=strupr(StrUCaseTmp);
return StrUCaseTmp;
}
__inline void *MallocZero(size_t SizeToAlloc)
{
DWORD AllocatedMem;
AllocatedMem=(DWORD)malloc(SizeToAlloc);
AsmPointerFill(AllocatedMem,0,SizeToAlloc);
return((void *)AllocatedMem);
}
__inline void AsmPointerFill(DWORD MemToFill,DWORD FillDat,DWORD FillLen)
{
_asm {
push eax
push ecx
push edi
mov edi,MemToFill
mov ecx,FillLen
mov eax,FillDat
cld
shr ecx,2
rep stosd
mov ecx,FillLen
and ecx,3
rep stosb
pop edi
pop ecx
pop eax
}
return;
}
int main(){
UCase("hello");
}