Tuuna Computer Science

[Assembly] C 라이브러리 함수 strcpy 구현하기 본문

Assembly

[Assembly] C 라이브러리 함수 strcpy 구현하기

GuTTe 2018. 10. 26. 00:55

C library_fuction인 strcpy를 어셈블리로 구현해보았다. 출력부분을 write system-call로 구현하려 했지만 귀차니즘이 발생하여 pritnf을 extern해오는 걸루...


어셈블러 : nasm 32bit

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
%include "asm_io.inc"
 
segment .bss
 
segment .data
    src db "hello my friend"0
    dest times 100 db 0
    format db "%s"0 ;printf의 format 형식
 
segment .text
    extern printf
    global asm_main
 
asm_main:
    push ebp
    mov esp, ebp     ;setup routine
    mov esi, src        ;src의 문자열 주소를 esi에 넘김
    mov edi, dest     ;dest의 문자열 주소를 edi에 넘김
 
re:
    cmp byte [esi], 0x00 ;esi를 edi에 옮기기전에 esi의 주소값에 들어있는 byte부분이 NULL인지 체크
    je end                          ;만약 NULL이라면 end로 분기한다.
    lodsb                           ; mov al, [esi=> add esi1
    stosb                            ; mov [edi], al => add edi1
    jmp re                          ; loop
 
end:
    push dest
    push format
    call printf
    add esp, 8
    call print_nl
 
    mov esp, ebp
    pop ebp
    ret
cs
Comments