2017. 11. 1. 20:49ㆍSystemHacking/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
[ 실행결과 ]
'SystemHacking > Assembly' 카테고리의 다른 글
[15] gdb 디스어셈블러 사용법,예제 ( C와 어셈블리 ) (0) | 2017.11.03 |
---|---|
[12] 어셈블리 mkdir 구현 ( SystemCall ) (0) | 2017.10.31 |
[11] 어셈블리 argc, argv 이해하기 (0) | 2017.10.30 |
[10] 어셈블리 스택메모리를 이용한 변수 저장 및 사용 (0) | 2017.10.27 |
[9] 어셈블리 스택 메모리를 이용한 간단한 덧셈 ( leave, ret, call ) (0) | 2017.10.27 |