목록분류 전체보기 (24)
개발자 노트
Q. C언어의 함수를 어셈블리어와 연계할 때 어셈블리어에서만 함수 앞에 언더바를 붙이는 이유어셈블리어로 c 라이브러리를 만들 때함수명은 동일하나 어셈블리어에서는 함수명 앞에 언더바를 붙이는 이유가 궁금했다. [예시] 만약 c언어 함수가 void io_hlt(void)일 경우--------어셈블리어 파일에서의 함수명----------_io_hlt---------------------------------------------------- A. 이유는 컴파일 과정의 linkage 때문이다.[상세설명]우선 어셈블리어 함수명 앞에 _(언더바)를 붙여주는 이유는 c에서 호출할 수 있도록 하기 위해서이며언더바를 붙이지 않은 함수는 어셈블리어끼리만 호출하도록 한다는 의미가 된다.그렇기 때문에 어셈블리어에서는 c언어의..
부트로더에 대한 이해를 돕기 위해 먼저 컴퓨터 부팅에 대해 설명해보겠다. 00. 컴퓨터 부팅부팅이란 PC가 켜진 후에 운영체제(이하 OS)가 실행 되기 전까지 수행되는 일련의 작업 과정을 말한다. 간단하게 그림으로 나타나면 다음과 같이 나타낼 수 있다. 제일 먼저 PC의 전원이 켜지면 ROM에 들어있는 BIOS가 로드 된다.BIOS는 컴퓨터에 연결된 저장 매체에서 설정된 부팅 순서대로 부트로더들을 불러 온다. 이 때, 하드 디스크가 첫 번째 부팅 장치로 설정되어 있으면, BIOS는 하드 디스크의 부트로더를 로드한다. 부트로더는 커널을 메모리에 로드하고 최종적으로 OS를 읽어내는 역할을 한다. 부팅 과정 중에서 부트 로더 동작 전 단계까지에 대한 자세한 설명은 다음의 그림으로 대체하겠다. 위의 그림에서 '..
1. ROM BIOS BIOS는 Basic Input Output System의 약자로서 컴퓨터의 가장 핵심적인 부분 중 하나이다. 컴퓨터에 전원이 들어오면 이루어지는 초기의 동작은 자체 진단과 부팅으로 나뉘어 진다. 자체 진단은 Power On Self Test(POST)라 부르는데 CPU를 비롯하여 BIOS 내용의 검사, CMOS 내용 검사, DMA, Keyboard, Memory, Video Card 등 각종 하드웨어 장치들에 대한 이상유무 검사가 이루어진다. 또 이 과정에서 각종 하드웨어 장치들의 초기화가 행해지는데 이는 정상적인 동작을 위해 필수적으로 거치는 작업이다. 이런 작업에서 이상없이 통과되면 부팅이 이루어지는데, 부팅에 관해서는 좀 더 자세히 알아보자. 2. ROM BIOS의 역할 컴퓨..
DB 명령은 'data byte'의 약어로, 파일의 내용을 1바이트만 직접 쓰는 명령이다. DW 명령은 'data word'의 약어로, 파일의 내용을 16비트 즉 2바이트만 직접 쓰는 명령이다. DD 명령은 'data double-word'의 약어로, 파일의 내용을 32비트 즉 4바이트만 직접 쓰는 명령이다. RESB 명령은 'reserve byte'의 약어로, 예약의 의미로 지정한 바이트 만큼을 비어둘 때 사용하는 명령이다.nask라는 어셈블러에서는 지정한 바이트 만큼을 비어두는 것에 그치지 않고 0x00 으로 채워진다.예) RESB 16 은 16바이트의 공간을 예약해둔다는 의미이다. nask에서는 16바이트의 공간을 0x00으로 채운다. ; 명령은 코멘트 명령이다. MOV..
바이너리 편집기BZ 를 이용하여 아래 그림과 같이 값을 입력한다. … … … run.bat 작성 copy helloos.img ..\z_tools\qemu\fdimage0.bin ..\z_tools\make.exe -C ..\z_tools\qemu ;heeyam-os ; 이하는 표준적인 FAT12 포맷 플로피디스크를 위한 서술 db 0xeb, 0x4e, 0x90 db "HELLOIPL" dw 512 db 1 dw 1 db 2 dw 224 dw 2880 db 0xf0 dw 9 dw 18 dw 2 dd 0 dd 2880 db 0,0,0x29 dd 0xffffffff db "HEEYAM-OS " db "FAT12 " resb 18 ; 프로그램 본체 db 0xb8, 0x00, 0x00, 0x8e, 0xd0, 0..
사용자가 입력한 문자열의 유효성 검사 스크립트 #스크립트 코드 #!/bin/bash validInput() { compressed="$(echo $1 | sed -e 's/[^[:alnum:]]//g')" if [ "$compressed" != "$1" ] ; then return 1 else return 0 fi } echo -n "Enter input: " read input if ! validInput "$input" ; then echo "Your input must consist of only letters and numbers." >&2 exit 1 else echo "Input is valid." fi exit 0 스크립트의 논리는 sed 기반의 변환으로 입력 내용을 바꿔 새로운 버전의 입력..
"#!" 는 스크립트를 실행할 셸을 지정하는 선언문이다. !앞에 #이 붙는다고해서 주석으로 착각하지 말 것! 셸 파라미터 $0 : Script를 실행시킬 때 프로그램의 이름이 포함된 첫 번째 문자열이 저장된다. $1, ...$N : argument들이 순서대로 저장된다. 위치 매개변수( Positional Parameter )라고 불린다. $? : 가장 최근에 실행된 포그라운드 파이프라인의 종료상태를 가지고 있다. 환경변수 $IFS : 입력필드 구분자, Shell 상에서 입력을 읽어들일 때 글자를 구분하기 위한 목적으로 사용되는 문자 목록, 보통은 스페이스, 탭, 개형문자이다. for문 [사용법] for 변수 in 반복될 인수 do 실행문 done [예제] for x in {1..5} do echo "$..
typedef 선언 기존에 존재하는 자료형의 이름에 새 이름을 부여하는 것을 목적으로 하는 선언이다. typedef 선언에 있어서 새로운 이름의 부여는 가장 마지막에 등장하는 단어를 중심으로 이뤄진다. typedef로 정의되는 자료형의 이름은 대문자로 시작하는 것이 관례이다. 구조체의 정의와 typedef 선언 typedef 선언을 이용하면 구조체 변수 선언 때 struct 선언을 생략할 수 있다. 다음과 같이 구조체 정의와 typedef 선언을 한데 묶어서 사용하면 된다. typedef struct person { char name[20]; int age; } Person; 구조체 변수를 선언할 때는 struct 없이 다음과 같이 선언하면 된다. Person man; typedef 선언이 추가 되었어도..
[Ubuntu] # 사용자 전환 root -> 일반 계정 $ su [계정명] 일반 계정 -> root $ sudo -i # vi 에디터에서 복사 붙여넣기 v, y, p 3개의 키로, 텍스트를 복사하여 다른 곳에 붙이는 작업을 할 수 있습니다. 텍스트 복사 붙이기 순서 (1) v : Visual mode 로 진입 (현재 문서를 편집중이라면 Esc키를 누르고, v키를 눌러야 함) (2) 그런 후, 상하좌우 화살표키를 움직이면, 이제 선택 블록이 회색으로 잡힙니다. 복사할 부분을 선택합니다. (3) y : yank (복사; Copy) yank는 '홱 잡아당긴다'는 뜻 (4) 문서를 스크롤하여, 복사된 텍스트를 붙어 넣을 곳으로 이동 (5) p : put (붙여 넣기; Paste) 이제 텍스트가 카피/붙이기 되..
printf 함수와 scanf 함수의 공통점 : 첫 번째 전달인자인 문자열에 존재하는 서식문자의 수만큼 전달인자의 수도 증가한다. 서식문자: 출력양식의 형태를 지정할 때 사용하는 문자 ex) %d, %c, %s 등 위의 함수들이 정의되어 있는 stdio.h 헤더파일을 살펴보면 다음과 같다. 함수의 매개변수 선언을 보면 … 있다. 이 것은 인자의 자료형과 수에 제한이 없음을 의미한다. 가변인자 매개변수의 선언방법 매개변수 선언을 통해서 미리 함수가 호출 될 때 전달되어야 할 인자의 수와 자료형이 결정된다. 그런데 가변인자 함수는 호출이 될 때 인자의 수가 결정되기 때문에 … 으로 가변인자에 대한 선언을 한다. 소스코드 #include int Sum(int n, ...); int main(void) { Su..
https://www.linux.co.kr/home2/board/bbs/board.php?bo_table=lecture&wr_id=1651&sca=1&sca2=32 http://www.joinc.co.kr/w/Site/C/Documents/CprogramingForLinuxEnv/Ch2_LiuxAndC http://www.joinc.co.kr/w/Site/C/Documents/CprogramingForLinuxEnv/Ch3_StartC
리눅스의 디렉토리 혹은 파일 시스템 구조는 윈도우와는 조금 다른 구조를 가지고 있습니다. 기본적으로 디렉토리를 구분하는 '/'(슬래시)는 리눅스에서 사용하고 윈도우는 반대인 '\'(역슬래시)를 사용하죠. 디렉토리 또한 그 명칭을 리눅스에서는 디렉토리(directory), 윈도우에서는 폴더(folder)라고 불리웁니다. 리눅스 디렉토리 구조 (그림 출처 http://www.doc.ic.ac.uk/~wjk/UnixIntro/Lecture2.html) 리눅스 파일 시스템 구조 리눅스 시스템의 디렉토리 구조는 전체적으로 역 트리(tree) 구조를 하고 있습니다. 그리고 명령어의 종류와 성격, 사용권한등에 따라 각각의 디렉토리들로 구분됩니다. 리눅스 배포판들은 '리눅스 파일시스템 표준' 인 FSSTND(LINUX..