Programming Language/Assembly4

Linux System Call 1. 이론 ▶ 먼저 아래 그림을 보려고 한다. (그림 그리기 힘들다 ㅠㅠ) ▶ 위로 갈수록 하이레벨이고 아래로 갈수로 로우레벨이다. (1) 이 그림으로 하고 싶은 말은 OS별로 제공되는 [Linux에서는 system call | Windows에서는 API]은 다르다. (2) 예를 쉽게보면 우리가 프로그램을 설치할 경우에... ▶ Windows 7용, Windows 10용, Ubuntu18.04용, CentOS7 용 등등 같은 프로그램이지만 OS에 따라 다른 것을 다운 받는다. ▶ 그렇다면 하나의 프로그램을 다 같이 사용하면 안될까? 라는 의문이 든다. (3) 아직은? 불가능하다.. [1] 이제 다시 그림을 보고 설명을 하려고 한다. [2] 커널 위에 System call은 각각의 호출되는 번호가 있다. .. 2019. 1. 26.
메모리와 변수 1. 메모리 내의 변수 - 어셈블리어에서 메모리를 사용할 때 메모리 크기를 결정해야하고, 사용할 메모리의 위치를 결정해야함 - 코드 작성 시 사용할 메모리의 크기는 프로그래머가 결정 - 메모리에서 사용할 주소의 위치는 어셈블러가 바이너리로 변경될 때 결정 2. segment .bss - 초기화되지 않은 변수를 선언하는 블록 - RESx 로 표현, x에는 저장될 데이터 크기를 지정 - 1byte[b], 2byte[w], 4byte[d], 8byte[q], 10byte segment .bss ; 메모리상에 초기화되지 않은 변수를 저장할 공간 [변수이름] [데이터 크기] [개수] ; 형식 test resd 10 ; 4btye짜리 10개만큼 공간 확보, C언어에서는 int test[10]; 로 표현 3. seg.. 2018. 7. 14.
레지스터 1. 단위 1) 64bit = RAX 2) 32bit = EAX 3) 16bit = AX 4) 8bit = AH, AL 2018. 7. 14.
어셈블리어란? 1. 어셈블리어란? - 기계어를 1:1로 매핑하는 가장 저레벨의 언어 - CPU(레지스터)와 메모리(RAM) 사이에 데이터를 조작 - C언어 기준에서 보면 어셈블리어에서 사용하는 instruction은 CPU에 내장 - CPU에서 지원하는 함수는 저레벨이라 반복적인 일을 하기 힘들기 때문에 운영체제에서 미리 함수로 구현하여 사용할 수 있도록 제공[CPU의 API를 이용하여 OS의 API 개발] - 그 외 메인보드에 있는 ROM BIOS에 있는 API도 사용가능 2. 장점 - 소스가 공개되지 않은 프로그램을 디스어셈블하여 바이너리수준에서 분석하여 이해 가능 - 하드웨어를 직접제어하는 부분(운영체제의 커널, 드라이버)은 간결성과 편의성때문에 어셈블리언어로 코딩 3. 단점 - 다양한 문법형식, 호환성이 낮음 .. 2018. 7. 14.