분류 전체보기
2013.08.30_UNIX_파일I/O_연산 및 함수
3.1 원자적 연산들 - 하나의 연산이 여러 단계로 구성되어 있으며 그 단계들 모두가 수행되거나 아니면 하나도 수행되지 않음을 보장될 때, 그러한 연산을 가리켜 '원자적 연산(atomic operation)' 이라고 부른다. 예를 들어서 A와 B 라는 사람이 완전히 똑같은 시간에 비행기표를 같은 번호로 인터넷으로 예약을 하였을 때, 한사람만 예약이 되거나, 중복으로 예약이 되거나 하는 일이 발생하면 안된다. 이때 원자적 연산을 보장받지 못했다. 라고 말할 수 있다. - pread , pwrite 함수 #include ssize_t pread(int filedes, void *buf, size_t nbytes, off_t offset) 반환값 : 읽은 바이트 수, 파일 끝이면 0, 오류 시 -1 ssize..
2013.08.29_UNIX 프로그래밍_3장_파일 I/O
3장 파일 I/O - 파일 입/출력에 사용하는 함수 : open, read, write, lseek, close - 비버퍼링(unbuffered I/O)방식 3.1 open 함수 #include int open(const char *pathname, int oflag, ... /* mode_t mode */); 반환값 : 성공 시 파일 서술자, 오류 시 -1- 반드시 지정해야하는 상수 O_RDONLY : 읽기 전용으로 열기 O_WRONLY : 쓰기 전용으로 열기 O_RDWR : 읽기 및 쓰기용으로 열기 - 선택적 상수 O_APPEND : 파일 기록 시 내용을 파일의 끝에 추가한다. O_CREAT : 파일이 존재하지 않으면 새로 생성한다. O_EXCL : O_CREAT 와 같이 지정하고, 파일이 이미 존재..
2013.08.29_Division Instructions
Division Instructions - AX 는 2byte 이므로 1byte( byte ) 로 나누면 1byte ( 몫 ) 과 1byte ( 나머지 ) 가 나옴 - 마찬가지로 2byte( word ) 로 4byte ( DX:AX ) 를 나누면 2byte ( AX ) 와 2byte ( DX ) 가 나옴 - EDX:EAX ( 8byte ) = doubleword(4byte) / EAX(4byte) + [EDX(4byte)] 예제 소스 .386 ;// 386 이상의 기계어를 사용하겠음 .MODEL FLAT ;// MEMORY MODEL > 메모리형태 평평한 형태 ExitProcess PROTO NEAR32 stdcall, dxExitCode:DWORD ;// ExitProcess DWORD(4byte), ..
2013.08.28_ASM_Basic Instruction
------------------------ 4장 Basic Instruction ------------------------- inc and dec instructions - inc 와 dec 명령어 => C 언어에서 ++ or -- 와 동일, 7F FF FF FF 가 양수의 가장 큰 수 이므로, 여기서 ++ 을 하면 Overflow 되면서 음수가 되기 때문에 EFLAGS의 SF , OF 가 1이 됨 - neg Instruction => 2의 보수를 취한 것과 같음. 연산 해보기 예제 소스 .386.MODEL FLAT ExitProcess PROTO NEAR32 stdcall, dwExitCode:DWORD include io.h cr equ 0dh Lf equ 0ah .STACK 4096 .DATA ..
2013.08.27_EFLAGS레지스터의구조
* EFLAGS (Extended FLAGS) 레지스터의 구조 ; 목적에따라 상태 플래그, 제어 플래그, 시스템 플래그로 나눌 수 있다. 플래그의 경우 1을 지정하는 것을 세트(set)라고하고 0을 지정하는 것을 클리어(clear) 혹은 리셋(reset)이라고 한다. 보통 1일 경우 Enable, 0일 경우 disalble을 가지지만 간혹 0이 enable, 1이 disable값을 가지는 경우가 있다. *상태 플래그 (Status Flag) - Carry Flag (CF : bit 0) ; 산술연산 수행 결과가 자리 올림이나 자리 내림이 발생 할때 set(1)된다. 상태 플래그 중 유일하게 어셈블리어 STC, CLC, CMC instruction을 이용하여 플래스 값을 직접 수정 가능한 플래그이다. - ..
2013.08.27_ASM_APPENDIX 활용하기 and 4장 Basic Instruction
Debug Mode => Step Into(F8 of F11)를 누르면 Debug가 진행. 레지스터의 변한 값이 EAX, EBX 에 저장되며, 레지스터에 저장될때는 Big Endian 으로 적힌다. 반대로 메모리에는 little Endian 으로 적힌다. => View에서 보고싶은 옵션을 선택함. Memory는 smart로 잡아주었다. (entry point가 smart이므로) APPENDIX E => 위의 Debug Mode 의 값을 보면 알 수 있듯이 EAX는 B8의 Opcode(기계어) 를 가지고, EBX는 BB를 가진다. => 00 00 03 e8 은 1000의 값을 Hex 로 변경 한 것임. --------------- 4장 Base Instruction------------------- Cop..