[13] 어셈블리 cat구현 ( SystemCall )

2017. 11. 1. 20:49SystemHacking/Assembly



 

 

[ System Call 형식 ]

 

[  C Progrmming ]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int main(){
 
    char file[1024];
    
    write( 1,"FILE: "6 );
    
    len = read ( 0, file , 1024 );
    file[len-1= 0 ;
    
    ret = open ( file, O_RDONLY );        // ReadOnly <= flag : 0
    
    ret_2 = write ( ret,  , 40 );
    
    close( file );
    return 0;
    
}
cs

 

[ Assembly ]


section .data

file:   db      'File: ',00


section .text

global _start:

_start

push    ebp

mov     ebp,    esp

sub     esp,    2056


mov     eax,    4

mov     ebx,    1

mov     ecx,    file

mov     edx,    7d

int     80h                             ; write(1,"FILE: " , 7 )


mov     eax,    3

mov     ebx,    0

lea     ecx,    [ebp-1024]

mov     edx,    1024d

int     80h                             ; read( 0,file, 1024)


mov     dword [ebp-1024+eax-1], 0       ; 뉴라인 제거


mov     eax,    5                      

lea     ebx,    [ebp-1024]

mov     ecx,    0

int     80h                             ; fd = open( File, O_RDONLY )


mov     dword [ebp-2052],       eax     ; [ebp-2052] : fd


while:

mov     ecx,    256

mov     eax,    0

lea     edi,    [ebp-2048]

rep     stosd


mov     eax,    3                      

mov     ebx,    dword [ebp-2052]

lea     ecx,    [ebp-2048]

mov     edx,    1024d

int     80h                             ; ret = read ( fd, buffer,1024 ) 읽기

 

mov     [ebp-2056],     eax             ; [ebp-2056] : ret


cmp     dword [ebp-2056],       0

jz      end


mov     eax,    4

mov     ebx,    1

lea     ecx,    [ebp-2048]

mov     edx,    1024d

int     80h                             ; write( 1, buffer, 1024) 쓰기


jmp     while


end:

mov     eax,    1                       ; exit(0)

mov     ebx,    0

int     80h

 

[ 실행결과 ]