global _s_strlen global _s_strcat global _s_memcpy global _s_memset segment .text ;unsigned int s_strlen(char*); _s_strlen: push ebp mov ebp,esp mov edi,[ebp + 8] mov ecx,-1 xor al,al cld repnz scasb mov eax,ecx not eax dec eax mov esp,ebp pop ebp ret ;char* s_strcat(char*,const char*); _s_strcat: push ebp mov ebp,esp mov edi,[ebp + 8] mov esi,[ebp + 12] mov ecx,-1 xor al,al cld repnz scasb dec edi .b: lodsb stosb test al,al jnz .b mov eax,[ebp + 8] mov esp,ebp pop ebp ret ;char* s_memcpy(char*,const char*,int); _s_memcpy: push ebp mov ebp,esp mov edi,[ebp + 8] mov esi,[ebp + 12] mov ecx,[ebp + 16] rep movsb mov eax,[ebp + 8] mov esp,ebp pop ebp ret ;char* s_memset(char*,const char,int); _s_memset: push ebp mov ebp,esp mov edi,[ebp + 8] mov eax,[ebp + 12] mov ecx,[ebp + 16] rep stosb mov eax,[ebp + 8] mov esp,ebp pop ebp ret