Soft Ware 130

int main(int argc, char *argv[]) 에 대해서

공부가 잘 안되서 블로그 글을 쓰러 ^---^ 요즘 글을 잘 안써서 블로그가 ㅠㅠ 자 그럼 주제에 써있는 내용으로 들어가 보겠습니다. 우리가 메인문을 많이 쓰시죠? 자 메인문도 일종에 함수 입니다. 그럼 매개변수가 입력될수 있겠죠? 메인문에 매개변수 두개가 입력되었는데요 하나는 int 형에 argc이고 다른 하나는 2차 char형 포인터인 argv이네요 그럼 메인은 어떻게 매개 변수값에 넣을 수 있을까요? 첫번째 방법은 콘솔창에서 디렉토리까지 간 다음에 명령어를 입력하는방법과 두번째 방법은 솔루션 탐색기에서 오른쪽 마우스를 클릭해서 속성 창으로 이동한다음 디버깅에서 명령인수 값에 넣어주면 됩니다 저는 -x -n patten 이라고 입력해 보았습니다. 자 그럼 분석을 시작해 볼까요 int 형에 argc는 ..

realloc 의 의미와 사용방법

밑에 문자열에서 숫자만 추출하는 소스에서 우리는 realloc를 사용하여 동적메모리 할당을 하였습니다. 여기서 동적메모리 할당에 대해서 알아봅시다. 동적메모리는 Heap 영역에 위치하는 녀석으로 malloc , calloc,realloc 이 있습니다. malloc함수는 리턴값이 void*로서 인자값으로는 데이터형과 메모리의 개수를 입력 받습니다. 메모리를 할당 받을시에는 메모리 영역이 초기화 되지 않는 상태 이구요. 리턴받을시에는 리턴받을 포인터 형에 맞춰 줘야 합니다. calloc 함수는 malloc과 비슷하지만 다른점이 있습니다. malloc은 동적메모리를 한줄로 할당했다면 이 녀석을 같은 크기에 있는 녀석을 몇개 만듭니다. 결과적으로는 malloc과 메모리 크기는 같습니다. 그리고 또 한가지 다른점..

디바이스 정리

디바이스 드라이버 의 개념 및 정리 드라이버들은 자신들을 나타낼수 있는 Device_Object를 만든다. 그 Device_Object는 구조의 형식은 그 틀이 정해져 있다. 틀이 정해져 있으면 무슨 문제가 있을까? 한번 생각봐야겠다. 그럼 내가 더 필요한 정보를 삽입할수 없다는 문제점이 있네요.. 그래서 그 방법을 해결하기 위해서 Device_Object 구조체를 살펴 보면 .... Device_Extension이라는 포인터 변수가 있다 +.+ 이 녀석이 무엇을 하는 녀석인가 하고 보면 위의 문제점을 해결해 줄수 있는 녀석이였다 !!!!. 그 녀석을 따라가면 메모리 공간이 있다 바로 거기가 사용자가 사용할수 있는 공간이다 !!!.. 이해가 안되시죠? 저도 많이 힘들었습니다. 머리로 그릴려고 계속 해도 ..

스레드

- 스택 메모리 공간 생성시 스레드가 생성되는 단계에서 함께 만들게 된다. - 스레드 생성시 디폴트로 1Mbyte의 메모리를 예약 -- > 이중 4Kbyte만을 실제로 메모리와 매핑시켜놓음으로써 사용가능하게 하고 ---> 또 하나의 메모리는 가드페이지라는 형태로 - 첫 페이지는 4kByte 영역은 커미드 영역 프로그램에서 바로 스택영역으로 사용 되어 질수 있는 영역 그 아랫부분은 한페이지인 4KByte 영역은 가드페이지 라는 형태로 윈도우에 의해 페이지 보호가 이루어 지고 있는 상태 --> 스레드에서 커미드 되어진 영역을 초과하여 스택을 사용했을때 가드 페이지 부분에 대한 접근이 이루어 질것이고 Windows 운영체제에서는 가드 페이지 영역을 커미드 영역으로 바꾸고 그 아래 가드 페이지를 생성 스택을 더..

스택 백트레싱

스택 백트레싱이란 ... ---> 리턴주소와 그전의 EBP값을 가지고 다시 그전 프로시저로 가서 오류를 확인하는 것 프로젝젝트 셋팅 에서 C/C++ 메뉴에서 프로젝트 옵션에서 /Oy 컴파일 옵션을 통하여 강제적으로 스택 프레임 구성을 생략 위의 경우에 스택 백트레싱이 불가능 하게 되며 , 디버거 의 경우 심벌 파일에 FPO(Frame Pointer Omission) 라는 정보를 포함 시킴으로써 스택 백트레이싱을 가능

함수 호출

1. __cdecl --> 프로시저에서 다른 프로시저를 호출시 파라미터는 오른쪽에서 왼쪽으로 스택에 쌓이고 호출하는 쪽에서 파라미터 스택 해제 2. __stdcall --> 프로시저에서 다른 프로스저 호출시 파라미터는 오른쪽에서 왼쪽으로 스택에 쌓이고 호출 받는 쪽에서 파라미터 스택 해제 3. __fastcall --> 파라미터 2개는 스택을 사용하지 않고 EDX , ECX 를 사용 , 2개이상부터는 파라미터 에 쌓인다. 스택 해제는 __stdcall과 같다. 4. Naked 함수 - 모든 스택 프레임에 대한 규정과 해제를 프로그래머가 직접 신경 써줘야 한다. 여기서 __LOCAL_SIZE는 이 Naked 형식의 함수에서 정의한 로컬 변수의 사이즈를 컴파일러에서 자동으로 계산하여 넣어주는 심벌 만약에 심..

Windows 구조와 원리

커널이란 ... 시스템 내의 물리적 장치 CPU , 메모리 , 입출력 장치 논리적 자원인 파일 (프로그램 또는 자료가 보조 기억 장치에 저장된 형태) 들이 효율적으로 고유의 기능을 수행하도록 관리하고 제어 하는 부분 CPU ---> 프로그램을 구성하는 명령어를 실행 메모리 ---> 프로그램과 자료를 저장하고 , 입출력이 원활하게 수행되도록 관리 마이크로프로세서 ---> 프로그램을 실제로 실행시키는 칩, 산술, 수치 비교, 데이터 전달 주변 장치 ---> I/O 입출력 장치 , 하드 디스크 MBR(Memory Buffer Register) : 메모리로부터 불러들인 데이터 저장 MAR(Memory Address Register): MBR쪽으로 읽어들인 메모리 주소를 저장 IR(Instruct Register..