strcpy.c /* strcpy: copy t to s; pointer version 2 */ void strcpy(char *s, char *t) { while ((*s = *t) != '\0') { s++ ; t++ ; } } strcpy.s (gcc-3.3.3) .file "strcpy.c" .text .globl strcpy .type strcpy, @function strcpy: pushl %ebp movl %esp, %ebp nop .L2: movl 8(%ebp), %eax movl 12(%ebp), %edx movb (%edx), %dl movb %dl, (%eax) testb %dl, %dl jne .L4 jmp .L1 .L4: incl 8(%ebp) leal 12(%ebp), %eax incl (%eax) jmp .L2 .L1: leave ret .size strcpy, .-strcpy .section .note.GNU-stack,"",@progbits .ident "GCC: (GNU) 3.3.3 20040412 (Red Hat Linux 3.3.3-7)" strcpy.s (gcc-4.4.5) .file "strcpy.c" .text .globl strcpy .type strcpy, @function strcpy: pushl %ebp movl %esp, %ebp jmp .L2 .L3: addl $1, 8(%ebp) addl $1, 12(%ebp) .L2: movl 12(%ebp), %eax movzbl (%eax), %edx movl 8(%ebp), %eax movb %dl, (%eax) movl 8(%ebp), %eax movzbl (%eax), %eax testb %al, %al jne .L3 popl %ebp ret .size strcpy, .-strcpy .ident "GCC: (Debian 4.4.5-8) 4.4.5" .section .note.GNU-stack,"",@progbits