VC++ 6

Size: px
Start display at page:

Download "VC++ 6"

Transcription

1 VC 툴을사용한디바이스드라이버제작방법 1. win32 App 타입으로새로운프로젝트를생성한다. 2. 메뉴에서프로젝트셋팅을선택한후다음과같이설정을해준다. A. C/C++ Tab의 general Category에서 Debug Info를 Program Database로설정한다. B. C/C++ Tab의 C++ language Category에서 Enable exception handling에체크를없앤다. C. C/C++ Tab의 code generation Category에서 calling 방식을 cdecl 에서 stdcall로변경해준다.( 그림 1_1참조 ) D. C/C++ Tab의 Preprocessor Category에서기존에있는 definition을모두지우고 DBG=1,_X86_,_WIN32_WINNT=0x500로재정의해준다.( 그림 1_2 참조 ) E. 2-B와같은부분에서 Additional include directory부분에 DDK include file이있는디렉토리를지정해준다.( 예를들어필자의경우는 D: WINDDK 2600 inc ddk wxp와 D: WINDDK 2600 inc wxp으로지정하였다. 그림 1_2 참조 ) F. C/C++ Tab의 project option에서 /GZ 옵션을제거한다.( 주의 : -Gz와 /GZ는다른옵션이다!) G. Link Tab의 Customize Category에서 Link incrementally의체크를없앤다. H. Output file name의확장자를.exe에서.sys로바꿔준다.( 그림 1_3 참조 ) I. Link Tab의 Input Category에서 object/library module부분에있는라이브러리파일리스트를모두지우고 int64.lib ntoskrnl.lib hal.lib ntdll.lib로바꿔준다. 그리고 ignore all default libraries 의체크박스를체크한다.( 그림 1_4 참조 ) J. Additional library path에 DDK 라이브러리파일들이위치한디렉토리를지정한다.( 그림 1_5 참조 ) K. Link Tab의 output Category에서 Base address, Entry-point symbol값을각각 0x10000, DriverEntry로지정한다.( 그림 1_5 참조 ) L. Link Tab의 project option에서 /subsystem:windows 옵션을제거하고 driver subsystem: NATIVE,5.00 옵션을추가한다. 3. 2번과같이셋팅을하면일단디바이스드라이버의소스를빌드할수있는기본적인셋팅은끝납니다. 여기에추가적으로역시프로젝트셋팅메뉴의 Custom Build Tab에서 Commands부분에 copy $(TargetPath) $(SystemRoot) System32 Drivers *.* 라고적어주고 outputs부분에 $(SystemRoot) System32 Drivers $(TargetName) 라고적어줍니다. 이것은컴파일및빌드가성공적으로이루어지면자동으로윈도우디렉토리에있는 System32 drivers디렉토리에해당.sys 파일을카피해주는역활을합니다. 나중에다시설명하겠지만디바이스드라이버파일을동작시키기위해서는어차피위와같은작업을해줘야하므로이렇게해놓는것이편합니다.( 그림 1_6 참조 )

2 < 그림 1_1> < 그림 1_2>

3 < 그림 1_3> < 그림 1_4>

4 < 그림 1_5> < 그림 1_6>

5 예제 1:Hello Driver World 이제 VC++6.0 에서의셋팅이제대로되었는지확인하기위해아래의소스를적고 Build 를시켜봅니다 < 소스 1.> // Exercise Project #1 : Hello Driver World // This program is very simple NT driver source It can only create virtual device and delete it. #include <ntddk.h> PDEVICE_OBJECT DeviceObject = NULL; NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath); VOID Hello_DriverUnload(IN PDRIVER_OBJECT DriverObject); NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath) NTSTATUS status = STATUS_SUCCESS; UNICODE_STRING DeviceName; DriverObject->DriverUnload = Hello_DriverUnload; RtlInitUnicodeString ( &DeviceName, L" Device HELLODRV" ); status = IoCreateDevice ( DriverObject, 0, &DeviceName, FILE_DEVICE_UNKNOWN, 0, FALSE, &DeviceObject ); if (!NT_SUCCESS (status)) return status; }

6 KdPrint(("Hello Driver World!!!")); return status; } VOID Hello_DriverUnload(IN PDRIVER_OBJECT DriverObject) if(deviceobject) IoDeleteDevice(DeviceObject); DeviceObject = NULL; } KdPrint(("Hello Driver Unload!!!")); } 위의소스를작성하고빌드했을때아래와같은문장이나오면일단성공한것이라고생각해도무방합니다 Configuration: HelloDrv - Win32 Debug Copying Driver to System32 Drivers 1개파일이복사되었습니다. HelloDrv.sys - 0 error(s), 0 warning(s) 이드라이버가제대로컴퓨터에로딩이되고동작을하는지확인하기위해서는다음과같은작업이필요합니다. 1. 레지스트리편집기를실행시킨다.( 윈도우의시작-> 실행메뉴를선택하고열기에 regedt32을쓰고엔터를친다.) 2.. 레지스트리편집기실행되면왼쪽의트리뷰에서 HKEY_LOCAL_MACHINE SYSTEM Current ControlSet Services에서마우스오른쪽버튼을클릭, 새로만들기-> 키를선택해새로운키를생성한다. 4. 생성한키의이름은위에서만든드라이버파일의이름으로한다.( 예를들어드라이버파일이 Hello_drv.sys라면키이름은 Hello_drv로 ) 5. 생성한키를선택한후오른쪽버튼을클릭, 새로만들기->DWORD값을선택하여새 Value를생성한다. Value의이름은 Start로하고해당값에 1을집어넣는다.( 그림의값 (3) 은잘못된값임 ) 6. 5와같은방법으로 ErrorControl, Type값을만들고둘모두 1값을셋팅한다.( 그림 1_7 참조 ) 7. 위의작업이모두끝나면이제모든작업을종료하고컴퓨터를재부팅한다.

7 < 그림 1_7> 위의작업을제대로수행했다면컴퓨터재부팅시윈도우가드라이버를성공적으로인식했을것입니다. 이드라이버가제대로동작하는지확인하기위해서는다시아래와같은작업이필요합니다. 1. 시작-> 프로그램-> 관리도구-> 컴퓨터관리를선택, 실행시킨다.( 혹은바탕화면에있는내컴퓨터아이콘에서오른쪽버튼클릭, 관리메뉴를실행시켜도된다.) 2. 컴퓨터관리의왼쪽뷰에서장치관리자를클릭한다. 그러면현재내컴퓨터에등록되어있는드라이버들의리스트를볼수있다. 3. 다시왼쪽뷰의장치관리자에서오른쪽버튼클릭, 혹은보기메뉴를클릭한후숨김장치표시를체크한다. 그러면오른쪽드라이버리스트에몇가지항목이추가되는것을볼수있다.( 그림 1_8참조 ) 4. 메뉴에서동작-> 하드웨어변경사항검색을선택하여장치관리자에새로만든드라이버를등록한다. 5. 오른쪽리스트에서 비플러그앤플레이드라이버 를선택확장하면리스트들중에서우리가만든드라이버를확인할수있다.( 그림 1_8에서는 Hello_drv) 6. 해당드라이버를더블클릭 ( 혹은오른쪽버튼클릭후속성메뉴를선택 ) 하면드라이버의등록정보를볼수있는데여기서드라이버탭에서드라이버를수동으로작동 / 중지를시킬수있다.( 그림 1_9, 1_10 참조 ) 7. DebugView 유틸리티를먼저실행시킨후해당드라이버를시작 / 중지시켜보면각각 Hello Driver World!!! 와 Hello Driver Unload 메시지가 DebugView화면에나타나는것을확인할수있다.( 그림 1_11참조 )

8 < 그림 1_8> < 그림 1_9>

9 < 그림 1_10> < 그림 1_11>

10 Hello Driver World 소스분석 이제소스를차근차근살펴보도록하겠습니다. #include <ntddk.h> ntddk.h파일은 DDK에있는헤더파일로써 - stdio.h나 windows.h처럼 - 드라이버작성에필요한가장기본적인정의와함수원형을포함하고있습니다. WDM드라이버를작성시에는 ntddk.h대신에 wdm.h를사용하는데이건두개드라이버의동작방식차이때문입니다. 이에대한설명은다음으로미루도록하겠습니다. PDEVICE_OBJECT DeviceObject = NULL; DeviceObject라는전역변수를선언하고그값으로 null을주었습니다. 이변수의데이터형은 PDEVICE_OBJECT인데이것은 DEVICE_OBJECT라고하는 ntddk.h에정의된구조체의포인터형입니다. 이것에대한자세한설명은잠시뒤에하기로하고일단디바이스오브젝트포인터변수를하나선언했으며그값을 null로초기화했다고만알아두도록합니다. 참고로여기서는소스를간단하게하기위해전역변수를사용했지만사실디바이스드라이버를만들때는가급적전역변수의사용을피해야합니다. 그이유는드라이버는여러가지동시적인작업들이많이이루어지는데전역변수를사용하게되면그변수값을사용할때잘못된값을참조할위험이있기때문입니다. NTSTATUS DriverEntry (IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath); VOID Hello_DriverUnload(IN PDRIVER_OBJECT DriverObject); 이소스에서는두개의함수가정의되어있는데바로그함수들의원형을선언하고있습니다. 우선 DriverEntry() 함수에대해서먼저알아보도록하겠습니다. 이함수는간단히말하자면 C에서의 main() 혹은윈도우프로그래밍에서의 WinMain() 함수와비슷한역할을하는함수입니다. 즉, 프로그램이로딩되었을때가장먼저시작되는함수입니다. 이러한것을진입점 (Entry Point) 라고합니다. 이함수가그러한역할을담당할수있는것은바로 VC++ 프로젝트셋팅에서 Link Tab의 Entry-point symbol을그렇게지정해주었기때문입니다. 이것은다시말하면 Entry-point symbol을다른것으로정의해주면진입점함수를다른이름으로할수있다는뜻입니다. ( 즉, Entry-point symbol을 Hello_DriverEntry라고하면위의함수이름도 Hello_DriverEntry라고바뀌어야합니다.) 하지만다른프로그래밍시진입함수를표준처럼 ( 혹은표준으로 ) 정의해놓고사용하듯이드라이버프로그래밍시에도가급적이함수의이름은바꾸지않는것이좋습니다. ( 참고로 DDK를이용한콘솔모드빌딩시에도 DriverEntry() 가디폴트로정의되어있습니다.) 이함수에는두개의파라미터가넘어오는데각각 PDRIVER_OBJECT와 PUNICODE_STRING형의변수입니다. 이파라미터들을설명하기전에우선어떻게해서드라이버가로드되는지그과정을간략하게살펴보면,

11 다음과같습니다. 1. 컴퓨터가부팅을하게되면윈도우는컴퓨터가동에필요한가장기본적인요소들을메모리에상주시킨다. (hal.dll, ntoskrnl.dll, kernel32.dll 등등 ) 2. 기본적인요소가가동하고나면현재등록되어있는드라이버들을차례로로딩시키거나서비스컨트롤매니저라고부르는관리프로그램에등록시킨다. 이러한드라이버들에대한정보는레지스트리에서가져오게된다. 즉, 윈도우는레지스트리의 HKLM SYSTEM CurrentControlSet Services에있는목록들을차례로살펴보고해당키에정의된값들 ( 우리드라이버의경우 Start, Type, ErrorControl값 ) 을토대로이드라이버를당장로딩할지혹은나중으로미룰지, 어떻게관리할지등등을정하게된다. 참고로드라이버의로딩시기를결정하는것은 Start값이며 0~4의값을가지고있다. 0은커널로더에의해, 1은 I/O system에의해부팅시로딩되며 2는 SCM(Service Control Manager) 에의해, 그리고우리가정한 3은사용자에의해수동으로로딩시킨다는것을의미한다. 4 값은작동시키지않는다는것을의미한다.(disable) 3. 우리드라이버의경우위에서언급했듯이 3값을가지고있으므로윈도우가드라이버를로딩시키지는않지만일단관리프로그램에해당드라이버정보 - Start값, 드라이버경로명등 - 을기억해놓고있게된다. 따라서우리가컴퓨터관리도구를통해드라이버정보를보았을때우리의드라이버를볼수있는것이다. 4. 우리가관리도구를통해드라이버를수동으로동작시키게되면윈도우는드라이버오브젝트를생성한다. 이것은그리심오한의미가있는것은아니고단지미리정의된 DRIVER_OBJECT라고하는구조체의크기만큼을메모리에할당하고기본적인값을채워넣는것을말한다. 어쨌든윈도우는드라이버오브젝트를생성한후해당드라이버파일 ( 여기서는 Hello_drv.sys) 의진입함수인 DriverEntry() 함수를호출하면서파라미터로그오브젝트의포인터값과해당드라이버의레지스트리경로 (REGISTRY MACHINE SYSTEM ControlSet001 Services 서비스이름 ) 명을넘겨주게된다. 이제드라이버는로딩을시작하게된다. DRIVER_OBJECT 는 ntddk.h 와 wdm.h 에서다음과같이정의되어있습니다. typedef struct _DRIVER_OBJECT CSHORT Type; CSHORT Size; PDEVICE_OBJECT DeviceObject; ULONG Flags; PVOID DriverStart; ULONG DriverSize; PVOID DriverSection; PDRIVER_EXTENSION DriverExtension; UNICODE_STRING DriverName; PUNICODE_STRING HardwareDatabase;

12 PFAST_IO_DISPATCH FastIoDispatch; PDRIVER_INITIALIZE DriverInit; PDRIVER_STARTIO DriverStartIo; PDRIVER_UNLOAD DriverUnload; PDRIVER_DISPATCH MajorFunction[IRP_MJ_MAXIMUM_FUNCTION + 1]; } DRIVER_OBJECT; typedef struct _DRIVER_OBJECT *PDRIVER_OBJECT; 우선알아두어야할사항은드라이버프로그래밍시에사용되는많은구조체에속한멤버들이모두사용자에의한의도적변경이가능한것은아니라는사실입니다. 이러한제약은디바이스드라이버가커널모드메모리에서동작하기때문에생긴것으로써잘못된데이터수정은시스템다운혹은심한경우커널의심각한손실을입힐수있습니다. DRIVER_OBJECT역시마찬가지이며이구조체에서는 Type, Size, Flags, DriverStart, DriverSize, DriverSection, DriverName이직접적인참조 / 변경을금하는멤버들입니다. 이러한변수들은윈도우에의해서생성될당시이미초기화가되거나혹은다른함수나매크로에의해서참조 / 변경이가능한것들입니다.( 물론그렇다하더라도그행위자체가불가능한것은아닙니다.) 어쨋거나 DRIVER_OBJECT는앞서언급한바와같이드라이버가동작하는데필요한기본적인정보들을저장하는데사용되는구조체입니다. 여기에는드라이버가특정상황에서동작하는데필요한함수의포인터나드라이버가컨트롤하게되는디바이스의오브젝트포인터등이포함되어있습니다. 자세한사항은앞으로차근차근설명해나가도록하겠습니다. UNICODE_STRING의구조는다음과같으며 ntdef.h에정의되어있습니다. typedef struct _UNICODE_STRING USHORT Length; // Buffer에저장된문자열의길이 USHORT MaximumLength; // Buffer에저장될수있는최대문자열의길이 PWSTR Buffer; // 문자열값이저장되는버퍼의포인터 } UNICODE_STRING; typedef UNICODE_STRING *PUNICODE_STRING; 드라이버는기본적으로스트링을유니코드방식으로처리합니다. 즉, 일반적인윈도우 Application프로그램이 1 caracter = 1 byte로처리하는것에비해디바이스드라이버에서는 1 character = 2byte로처리한다. 그이유는커널모드에서문자값을 ASCII나 ANSI가아닌 Unicode로처리하기때문입니다. 그리고디바이스드라이버에서는그러한유니코드데이터를다시 UNICODE_STRING이라고하는구조체를통해처리합니다. 즉, 대부분의문자열처리관련함수들은이구조체를파라미터로사용하게됩니다. UNICODE_STRING은정의에서볼수있듯이데이터버퍼외에데이터의사이즈와버퍼에들어갈수있는최대사이즈를정의해놓기때문에문자열처리에있어서버퍼오버플로우등의에러발생을사전에방지해줄수있습니다. 앞에서언급했듯이윈도우는드라이버오브젝트를생성한후해당드라이버를로딩할때드라이버오브젝트

13 의포인터와함께레지스트리경로명을파라미터로넘기게됩니다. 그리고이때이경로명은유니코드형식으로 UNICODE_STRING구조체에저장되어넘겨지는것입니다. 예를들어드라이버의이름이 Hello_drv라고한다면레지스트리경로명은 REGISTRY MACHINE SYSTEM ControlSet001 Services Hello_drv 이므로 DriverEntry() 함수의두번째파라미터인 PUNICODE_STRING RegistryPath 구조체변수에는다음과같은값들이들어갈것입니다.( 이값은필자의컴퓨터에서디버깅을통해살펴본실제데이터값입니다.) RegistryPath->Length = 0x72(114) RegistryPath->MaximumLength = 0x72(114) RegistryPath->Buffer = 0x858d4008 ( REGISTRY MACHINE SYSTEM ControlSet001 Services Hello_drv) DriverEntry() 함수의리턴형은 NTSTATUS 이며이것은 Ntdef.h 를보면아래와같이정의되어있습니다. typedef LONG NTSTATUS; 즉, 단지 LONG형을사용자의가독성을고려해재정의해놓은것을알수있습니다. 다만 NTSTATUS의특이한점은그리턴값으로미리정의된상태코드를사용한다는점에있으며 DDK에정의된모든 - NTSTATUS를리턴형으로사용하는 - 함수들은그정의에따라특정상태를알려주게되어있습니다. 이상태코드의형식은 Walter Oney의책 Programming the Microsoft Windows Driver Model 에자세히나와있습니다. 하지만이러한상태코드의값을모두알필요는없으며 DDK에는상태코드의특정값들을확인할수있는몇가지매크로를정의해놓고있습니다. 이것에관해서는뒷부분에서설명하겠습니다. 이제 DriverEntry() 함수에서사용하는파라미터와리턴값의설명을마치고윈도우에의해 DriverEntry() 가호출된후이루어지는작업들에대해설명하도록하겠습니다. 앞서언급했듯이윈도우는 DriverEntry() 를호출하기전에드라이버의오브젝트를생성합니다. 여기에는몇가지값들은미리채워져있지만상당수가개발자의몫으로남겨진채비워져있습니다. 그리고바로 DriverEntry() 함수에서하는역할이바로이러한기본정보를설정하는것입니다. 우선필자의드라이버가처음로딩될때넘어온드라이버오브젝트의내용을살펴보면아래와같습니다. 1. Type = 0x4 2. Size = 0xA8 3. DeviceObject = 0x Flags = 0x2 5. DriverStart = 0xF7B7B DriverSize = 0x DriverSection = 0x85BB7C68 8. DriverExtension = 0x858FF680

14 A. DriverObject = 0x858FF5D8 B. Addevice = 0x C. count = 0x0 D. ServiceKeyName i. Length = 0x12 ii. MaximumLength = 0x14 iii. Buffer = 0x85C5C118( Hello_drv ) 9. DriverName A. Length = 0x22 B. MaximumLength = 0x22 C. Buffer = 0xE14D8B08( Driver Hello_drv ) 10. HardwareDatabase(0x806488B4) A. Length = 0x5A B. MaximumLength = 0x5C C. Buffer = 0x806163B8( REGISTRY MACHINE HARDWARE DESCRIPTION SYSTEM ) 11. FastIoDispatch = 0x DriverInit = 0xF7B7C000(DriverEntry) 13. DriverStartIo = 0x DriverUnload = 0x MajorFunction[28] 위에서볼수있듯이드라이버오브젝트는우리의드라이버를인식하고동작하는데필요한기본정보들을포함하고있습니다. 여기서 8-B와 11~15번까지는드라이버가동작하는데필요한함수를정의하는포인터변수들이며나머지는드라이버동작을보조하는정보들을저장하는구조체및데이터변수들입니다. 현재우리드라이버는가장기본적인동작인드라이버로딩 / 언로딩동작만을하도록설계되어있으며따라서이드라이버의동작에필요한함수정의는 12번 DriverInit과 14번 DriverUnload 멤버에해당동작을정의한함수포인터가들어가게됩니다. DriverInit은윈도우에의해이미설정되었으며우리는 DriverUnload만을설정해주면됩니다. DriverObject->DriverUnload = Hello_DriverUnload; 바로위구문이이것을수행합니다. 이구문을수행하고나면위의 14. DriverUnload변수는우리가미리정의한 Hello_DriverUnload() 함수의포인터값으로채워지게될것입니다. 사실이정도까지만수행해도드라이버는이상없이로딩이되고언로딩을수행할수있습니다. 그러나디바이스드라이버의개발목적은특정디바이스에결합되어해당디바이스를컨트롤하는데있는만큼우리드라이버역시디바이스의생성 / 삭제의기능을수행토록만들었습니다. 물론이디바이스는실제물리적인형태를지닌디바이스가아니며단지소프

15 트웨어적으로생성된가상디바이스입니다. 디바이스의생성은아래의구문을통해이루어집니다. RtlInitUnicodeString ( &DeviceName, L" Device HELLODRV" ); status = IoCreateDevice ( DriverObject, 0, &DeviceName, FILE_DEVICE_UNKNOWN, 0, FALSE, &DeviceObject ); IoCreateDevice() 함수에대한자세한설명은 DDK에잘나와있으므로피하도록하고, 몇가지만언급하자면, 1. 이함수는 이름에서볼수있듯이 - 특정드라이버에결합될디바이스를생성하는역할을합니다. 그리고이디바이스와드라이버를연관지어주는역할을하는것은 I/O manager이다. I/O manager 가무엇이고어떤역할을하는지는다음에다시설명하겠습니다. 2. 세번째파라미터로넘어가는것이생성될디바이스의이름인데이것은옵션값이므로 NULL로줘도상관없습니다. 만약이값을주게되면사용자모드에서의컨트롤이쉬워지는반면에보안에취약한점이있습니다. 3. 마지막파라미터가바로생성된디바이스오브젝트의포인터를받게되는변수입니다. 이파라미터의데이터형은 PDEVICE_OBJECT이며바로밑에서이것에대해언급하도록하겠습니다. 4. 나머지파라미터들은해당디바이스의특성및타입에관련된정보들을제공하는것들입니다. 이것들역시다음에관련된사항이발생할시에자세히설명하도록하겠습니다. DEVICE_OBJECT 는 ntddk.h 에다음과같이정의되어있습니다. typedef struct DECLSPEC_ALIGN(MEMORY_ALLOCATION_ALIGNMENT) _DEVICE_OBJECT CSHORT Type; USHORT Size; LONG ReferenceCount; struct _DRIVER_OBJECT *DriverObject; struct _DEVICE_OBJECT *NextDevice; struct _DEVICE_OBJECT *AttachedDevice;

16 struct _IRP *CurrentIrp; PIO_TIMER Timer; ULONG Flags; ULONG Characteristics; PVOID DoNotUse1; PVOID DeviceExtension; DEVICE_TYPE DeviceType; CCHAR StackSize; union LIST_ENTRY ListEntry; WAIT_CONTEXT_BLOCK Wcb; } Queue; ULONG AlignmentRequirement; KDEVICE_QUEUE DeviceQueue; KDPC Dpc; ULONG ActiveThreadCount; PSECURITY_DESCRIPTOR SecurityDescriptor; KEVENT DeviceLock; USHORT SectorSize; USHORT Spare1; struct _DEVOBJ_EXTENSION *DeviceObjectExtension; PVOID Reserved; } DEVICE_OBJECT; typedef struct _DEVICE_OBJECT *PDEVICE_OBJECT; 모든내용을다설명하기에는무리가있고현재알아야할필요가있는멤버들은아래와같습니다. 1. DriverObject : 해당디바이스와연결된드라이버에대한참조포인터입니다. 참고로드라이버오브젝트역시디바이스오브젝트를참조하는포인터변수가멤버에포함되어있으며따라서상호참조가가능합니다. 2. NextDevice : 하나의드라이버는여러개의디바이스와생성 / 결합이가능합니다. 이는하나의시리얼드라이버가여러개의 COM포트를가질수있다는사실을생각해보면쉽게이해가될것입니다. 이

17 멤버는드라이버에연결된각각의디바이스들을차례로참조할수있는매개체역할을합니다. (Linked list에서의 next포인터와유사하다.) 3. Flags : 디바이스의특성및상태를나타내는변수입니다. 플래그비트의집합이며현재의미있는값은 DO_DEVICE_INITIALIZING(0x ) 입니다. 이것은 DriverEntry() 에서디바이스를생성할때윈도우가자동으로셋팅하는값이며정의된이름에서알수있듯이해당디바이스의초기화가아직완료되지않았음을의미합니다. 이값이셋팅되어있으면 I/O manager는해당디바이스로들어오는여러가지요청이나이벤트들을모두무시하며초기화동작의안전한완료를보장합니다. 이비트는 DriverEntry() 함수가완료되는순간역시윈도우에의해다시 0으로셋팅됩니다. 따라서 DriverEntry() 함수에서이비트값을사용자가건드릴필요는없습니다. 하지만이플래그비트를개발자가직접셋팅해줘야할상황이 WDM드라이버의경우발생하게되는데이것은다음기회에다시언급하도록하겠습니다. 그외에나머지멤버들도다른예제에서필요에따라설명하기로하겠습니다.( 한꺼번에너무많은지식이머리속에들어오면만성두통의야기합니다.) 만약더자세한사항을알고싶으면 Walter Oney의 Programming the Microsoft Windows Driver Model 의 Chapter 2를보기바랍니다. 우선은이디바이스오브젝트가드라이버에서실질적인작업을하는데있어중요한매개체역할을하며하나의드라이버오브젝트는여러개의디바이스오브젝트를가질수있다는정도만기억해두기바랍니다. 이것은마치윈도우프로그램에서하나의클래스오브젝트가여러개의윈도우를가질수있으며각각의윈도우를제어하기위해윈도우핸들변수를사용하는것과유사합니다. 어쨌든 IoCreateDevice() 함수가실행되면디바이스가생성되고그디바이스의정보는드라이버오브젝트의 DeviceObject멤버에저장됩니다. if (!NT_SUCCESS (status)) return status; } 위의구문은 IoCreateDevice() 함수가제대로동작했는지를확인하는구문입니다. 여기서앞에서잠깐언급한 NTSTATUS상태값을확인하는몇가지매크로중하나가사용되었습니다. NT_SUCCESS(status), 는 ntdef.h 에다음과같이정의되어있습니다. #define NT_SUCCESS(Status) ((NTSTATUS)(Status) >= 0) 즉, 이매크로는해당 status 값이 0 이거나 0 보다크면 TRUE 를, 0 보다작은값이면 FALSE 값을리턴합니다.

18 따라서위의구문의의미는 status가 0보다작은값이면해당상태값을가지고리턴하고종료하라는뜻입니다. 여기서한가지짐작할수있는것은 NTSTATUS값이양수일경우는해당함수동작이정상적으로이루어졌다는뜻이며, 음수일경우는무엇인가문제가발생했다는것을의미한다는사실입니다. 우선은이런정도만을알고있어도충분하며자세한사항은 Walter Oney의책 Chapter3, 혹은 ntdef.h에서 NTSTATUS를정의한부분을보기바랍니다. KdPrint(("Hello Driver World!!!")); 위의구문은다음과같이정의된매크로입니다. #if DBG #define KdPrint(_x_) DbgPrint _x_ #else #define KdPrint(_x_) 즉, 해당드라이버가디버그모드 ( 혹은 checked build) 로컴파일되었을경우에해당문장을디버그화면에출력하는기능을합니다.(DbgPrint() 가그역할을하는 API이다.) 우리가앞에서 DebugView라는프로그램을통해서확인해본문장은바로이구문을통해발생한것입니다. 이문장은꼭 DebugView를통해서만볼수있는것은아니며 Numega의 softice나마이크로소프트의 WinDbg와같은디버깅툴을통해서도볼수있습니다. return status; 이제모든동작이정상적으로이루어졌다면 status 값은초기에정의한 STATUS_SUCCESS를그대로유지하고있을것이며 DriverEntry() 는이값을리턴하면서종료하게됩니다. 이리턴값은윈도우에게넘겨지게되는데윈도우에서는이값을살펴보고 STATUS_SUCCESS이면성공적으로로딩되었다고판단하고메모리에해당드라이버오브젝트를계속상주시키며특정한이벤트 ( 여기서는드라이버종료 ) 가발생할때까지대기상태로두게됩니다. 만약이값이 STATUS_SUCCESS가아닌에러상태를나타내면, 윈도우는상태값을분석해서적절한에러메시지를출력하고 혹은아무런경고없이 드라이버오브젝트를메모리에서삭제합니다.( 우리드라이버에서는만약 IoCreateDevice() 함수가실패했을때이러한일이발생하게됩니다.) 여기서주의할점은위의상황과같은경우에드라이버가언로드될때는우리가정의한 Hello_ DriverUnload() 함수에의해언로드가수행되지않는다는사실입니다. Hello_DriverUnload() 함수는 DriverEntry() 가 STATUS_SUCCESS를리턴하여윈도우에서드라이버를정상적으로로드시킨상황에서언로드이벤트가발생하였을때수행되며드라이버의로딩이정상적으로완료되지않았을때는드라이버오브젝트에언로드함수를등록하였다하더라도윈도우는해당함수를호출하지않고단지할당된드라이버오브젝트를삭제하고드라이버의동작을멈추게합니다.

19 예를들어위의 DriverEntry() 함수를아래와같이고쳐보도록합니다. NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath) NTSTATUS status = STATUS_SUCCESS; UNICODE_STRING DeviceName; DriverObject->DriverUnload = Hello_DriverUnload; Return STATUS_DLL_NOT_FOUND; // - 이구문을삽입한다. RtlInitUnicodeString ( &DeviceName, L" Device HELLODRV" ); status = IoCreateDevice ( DriverObject, 0, &DeviceName, 위의고친소스를빌드한후컴퓨터관리자에서다시수동으로드라이버를로딩하면아래그림과같은에러메시지와함께드라이버시작이되지않음을알수있습니다.( 그림 1_12) 또한드라이버언로드함수에서출력되는디버그메시지 (Hello Driver Unload bye~) 도볼수없습니다. 한편위와같은상황이발생하게되면레지스트리에있는우리드라이버키에는다음과같이드라이버초기화가실패했다는정보가포함됩니다.( 그림 1_13 참조 ) 이로써드라이버로딩에관련된가장기초적인부분에대한설명을마쳤습니다.

20 < 그림 1_12> < 그림 1_13>

21 드라이버언로드과정은대개의컴퓨터작업이그러하듯로딩과정의역순으로진행된다. 우리드라이버에서는로딩과정에서디바이스의생성외에해준작업이없으므로언로드시생성된디바이스를삭제해주기만하면됩니다. VOID Hello_DriverUnload(IN PDRIVER_OBJECT DriverObject) if(deviceobject) IoDeleteDevice(DeviceObject); DeviceObject = NULL; } KdPrint(("Hello Driver Unload!!!")); } Hello_DriverUnload() 함수는파라미터로드라이버오브젝트를받으며 IoDeleteDevice() 함수를통해디바이스오브젝트를삭제하게됩니다. 여기서디바이스오브젝트가전역변수로선언되었기때문에바로참조해서 IoDeleteDevice() 함수의파라미터로사용했지만앞부분에서언급했듯이드라이버에서는전역변수의사용을최대한금 ( 禁 ) 해야합니다. 그리고드라이버오브젝트안에는디바이스오브젝트에대한포인터가멤버로들어있으므로위의소스는아래와같이수정이가능합니다. VOID Hello_DriverUnload(IN PDRIVER_OBJECT DriverObject) if(driverobject->deviceobject) IoDeleteDevice(DriverObject->DeviceObject); DriverObject->DeviceObject = NULL; } KdPrint(("Hello Driver Unload!!!")); } 이렇게하면디바이스오브젝트포인터변수를따로전역변수로사용하지않고 DriverEntry() 함수의지역변수로사용해도상관없으며이방법이더좋은방법입니다. 지금까지 Hello_drv 라고하는매우간단한디바이스드라이버를만들어보았습니다. 비록이것은디바이스드라이버라고부르기에는너무나미흡한토이프로그램 (toy program) 이지만드라이버의기본적인동작을살

22 펴보는데에는적절하지않았나생각이듭니다. 그러면앞으로우리의드라이버에기능을조금씩덧붙혀나가며드라이버에대한보다자세한이야기들을해나가기로하겠습니다. 글쓴이 : 이은조 (gimmesilver@gmail.com)

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx #include int main(void) { int num; printf( Please enter an integer "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 을 작성하면서 C 프로그램의

More information

ISP and CodeVisionAVR C Compiler.hwp

ISP and CodeVisionAVR C Compiler.hwp USBISP V3.0 & P-AVRISP V1.0 with CodeVisionAVR C Compiler http://www.avrmall.com/ November 12, 2007 Copyright (c) 2003-2008 All Rights Reserved. USBISP V3.0 & P-AVRISP V1.0 with CodeVisionAVR C Compiler

More information

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures 단일연결리스트 (Singly Linked List) 신찬수 연결리스트 (linked list)? tail 서울부산수원용인 null item next 구조체복습 struct name_card { char name[20]; int date; } struct name_card a; // 구조체변수 a 선언 a.name 또는 a.date // 구조체 a의멤버접근 struct

More information

Microsoft PowerPoint Android-SDK설치.HelloAndroid(1.0h).pptx

Microsoft PowerPoint Android-SDK설치.HelloAndroid(1.0h).pptx To be an Android Expert 문양세강원대학교 IT 대학컴퓨터학부 Eclipse (IDE) JDK Android SDK with ADT IDE: Integrated Development Environment JDK: Java Development Kit (Java SDK) ADT: Android Development Tools 2 JDK 설치 Eclipse

More information

Microsoft PowerPoint - additional01.ppt [호환 모드]

Microsoft PowerPoint - additional01.ppt [호환 모드] 1.C 기반의 C++ part 1 함수 오버로딩 (overloading) 디폴트매개변수 (default parameter) 인-라인함수 (in-line function) 이름공간 (namespace) Jong Hyuk Park 함수 Jong Hyuk Park 함수오버로딩 (overloading) 함수오버로딩 (function overloading) C++ 언어에서는같은이름을가진여러개의함수를정의가능

More information

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과 임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과 System call table and linkage v Ref. http://www.ibm.com/developerworks/linux/library/l-system-calls/ - 2 - Young-Jin Kim SYSCALL_DEFINE 함수

More information

목차 윈도우드라이버 1. 매뉴얼안내 운영체제 (OS) 환경 윈도우드라이버준비 윈도우드라이버설치 Windows XP/Server 2003 에서설치 Serial 또는 Parallel 포트의경우.

목차 윈도우드라이버 1. 매뉴얼안내 운영체제 (OS) 환경 윈도우드라이버준비 윈도우드라이버설치 Windows XP/Server 2003 에서설치 Serial 또는 Parallel 포트의경우. 소프트웨어매뉴얼 윈도우드라이버 Rev. 3.03 SLP-TX220 / TX223 SLP-TX420 / TX423 SLP-TX400 / TX403 SLP-DX220 / DX223 SLP-DX420 / DX423 SLP-DL410 / DL413 SLP-T400 / T403 SLP-T400R / T403R SLP-D220 / D223 SLP-D420 / D423

More information

Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3

Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3 Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3 Example 3.1 Files 3.2 Source code 3.3 Exploit flow

More information

Microsoft PowerPoint - chap10-함수의활용.pptx

Microsoft PowerPoint - chap10-함수의활용.pptx #include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 중 값에 의한 전달 방법과

More information

WinDBG 실무

WinDBG 실무 하제소프트 주식회사하제소프트 (www.hajesoft.co.kr) 강사이봉석 하제소프트 과정소개 윈도우응용프로그램, 윈도우서비스프로그램, 윈도우디바이스드라이버를개발하는개발자들로하여금고급디버깅기술을제공하는 윈도우디버거 (WinDBG) 사용방법을익히게하여, 고급시스템프로그래머를양성하는데있습니다 윈도우디버거 (WinDBG) 를사용하는개발자는실무에서고급시스템프로그래머가갖추어야할중요한디버깅지식을습득함과동시에시간과비용을최대한아끼는프로그래밍습관과우수한결과물을만들어낼수있습니다

More information

Chapter #01 Subject

Chapter #01  Subject Device Driver March 24, 2004 Kim, ki-hyeon 목차 1. 인터럽트처리복습 1. 인터럽트복습 입력검출방법 인터럽트방식, 폴링 (polling) 방식 인터럽트서비스등록함수 ( 커널에등록 ) int request_irq(unsigned int irq, void(*handler)(int,void*,struct pt_regs*), unsigned

More information

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770> 연습문제해답 5 4 3 2 1 0 함수의반환값 =15 5 4 3 2 1 0 함수의반환값 =95 10 7 4 1-2 함수의반환값 =3 1 2 3 4 5 연습문제해답 1. C 언어에서의배열에대하여다음중맞는것은? (1) 3차원이상의배열은불가능하다. (2) 배열의이름은포인터와같은역할을한다. (3) 배열의인덱스는 1에서부터시작한다. (4) 선언한다음, 실행도중에배열의크기를변경하는것이가능하다.

More information

API 매뉴얼

API 매뉴얼 PCI-TC03 API Programming (Rev 1.0) Windows, Windows2000, Windows NT, Windows XP and Windows 7 are trademarks of Microsoft. We acknowledge that the trademarks or service names of all other organizations

More information

Install stm32cubemx and st-link utility

Install stm32cubemx and st-link utility STM32CubeMX and ST-LINK Utility for STM32 Development 본문서는 ST Microelectronics 의 ARM Cortex-M 시리즈 Microcontroller 개발을위해제공되는 STM32CubeMX 와 STM32 ST-LINK Utility 프로그램의설치과정을설명합니다. 본문서는 Microsoft Windows 7

More information

Microsoft PowerPoint - chap01-C언어개요.pptx

Microsoft PowerPoint - chap01-C언어개요.pptx #include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 프로그래밍의 기본 개념을

More information

<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074>

<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074> SIMATIC S7 Siemens AG 2004. All rights reserved. Date: 22.03.2006 File: PRO1_17E.1 차례... 2 심벌리스트... 3 Ch3 Ex2: 프로젝트생성...... 4 Ch3 Ex3: S7 프로그램삽입... 5 Ch3 Ex4: 표준라이브러리에서블록복사... 6 Ch4 Ex1: 실제구성을 PG 로업로드하고이름변경......

More information

Microsoft PowerPoint - chap06-2pointer.ppt

Microsoft PowerPoint - chap06-2pointer.ppt 2010-1 학기프로그래밍입문 (1) chapter 06-2 참고자료 포인터 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 포인터의정의와사용 변수를선언하는것은메모리에기억공간을할당하는것이며할당된이후에는변수명으로그기억공간을사용한다. 할당된기억공간을사용하는방법에는변수명외에메모리의실제주소값을사용하는것이다.

More information

Microsoft PowerPoint SDK설치.HelloAndroid(1.5h).pptx

Microsoft PowerPoint SDK설치.HelloAndroid(1.5h).pptx To be an Android Expert 문양세강원대학교 IT 대학컴퓨터학부 개발환경구조및설치순서 JDK 설치 Eclipse 설치 안드로이드 SDK 설치 ADT(Androd Development Tools) 설치 AVD(Android Virtual Device) 생성 Hello Android! 2 Eclipse (IDE) JDK Android SDK with

More information

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc NTAS and FRAME BUILDER Install Guide NTAS and FRAME BUILDER Version 2.5 Copyright 2003 Ari System, Inc. All Rights reserved. NTAS and FRAME BUILDER are trademarks or registered trademarks of Ari System,

More information

Studuino소프트웨어 설치

Studuino소프트웨어 설치 Studuino 프로그래밍환경 Studuino 소프트웨어설치 본자료는 Studuino 프로그래밍환경설치안내서입니다. Studuino 프로그래밍 환경의갱신에따라추가 / 수정될수있습니다. 목차 1. 소개... 1 2. Windows... 2 2.1. 프로그래밍환경설치... 2 2.1.1. 웹설치버전설치방법... 2 2.2. Studuino 프로그래밍환경실행...

More information

chap 5: Trees

chap 5: Trees 5. Threaded Binary Tree 기본개념 n 개의노드를갖는이진트리에는 2n 개의링크가존재 2n 개의링크중에 n + 1 개의링크값은 null Null 링크를다른노드에대한포인터로대체 Threads Thread 의이용 ptr left_child = NULL 일경우, ptr left_child 를 ptr 의 inorder predecessor 를가리키도록변경

More information

설계란 무엇인가?

설계란 무엇인가? 금오공과대학교 C++ 프로그래밍 jhhwang@kumoh.ac.kr 컴퓨터공학과 황준하 6 강. 함수와배열, 포인터, 참조목차 함수와포인터 주소값의매개변수전달 주소의반환 함수와배열 배열의매개변수전달 함수와참조 참조에의한매개변수전달 참조의반환 프로그래밍연습 1 /15 6 강. 함수와배열, 포인터, 참조함수와포인터 C++ 매개변수전달방법 값에의한전달 : 변수값,

More information

<4D F736F F F696E74202D C7D4BFEEC3B6B1B3BCF6B4D4205BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D C7D4BFEEC3B6B1B3BCF6B4D4205BC8A3C8AF20B8F0B5E55D> Windows XP 에서의장치관리자 : Device Driver 에관하여 May 29, 2015. CHONBUK NATIONAL UNIVERSITY Prof. Woonchul Ham 2015-05-28 1 개요 1. 장치관리자란? 2. Device Driver 작업환경은? 3. Driver 의구조 4. Plug & Play 5. Device Driver 응용사례

More information

JUNIT 실습및발표

JUNIT 실습및발표 JUNIT 실습및발표 JUNIT 접속 www.junit.org DownLoad JUnit JavaDoc API Document 를참조 JUNIT 4.8.1 다운로드 설치파일 (jar 파일 ) 을다운로드 CLASSPATH 를설정 환경변수에서설정 실행할클래스에서 import JUnit 설치하기 테스트실행주석 @Test Test 를실행할 method 앞에붙임 expected

More information

Microsoft Word - windows server 2003 수동설치_non pro support_.doc

Microsoft Word - windows server 2003 수동설치_non pro support_.doc Windows Server 2003 수동 설치 가이드 INDEX 운영체제 설치 준비과정 1 드라이버를 위한 플로피 디스크 작성 2 드라이버를 위한 USB 메모리 작성 7 운영체제 설치 과정 14 Boot Sequence 변경 14 컨트롤러 드라이버 수동 설치 15 운영체제 설치 17 운영체제 설치 준비 과정 Windows Server 2003 에는 기본적으로

More information

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D> 리눅스 오류처리하기 2007. 11. 28 안효창 라이브러리함수의오류번호얻기 errno 변수기능오류번호를저장한다. 기본형 extern int errno; 헤더파일 라이브러리함수호출에실패했을때함수예 정수값을반환하는함수 -1 반환 open 함수 포인터를반환하는함수 NULL 반환 fopen 함수 2 유닉스 / 리눅스 라이브러리함수의오류번호얻기 19-1

More information

Windows 8에서 BioStar 1 설치하기

Windows 8에서 BioStar 1 설치하기 / 콘텐츠 테이블... PC에 BioStar 1 설치 방법... Microsoft SQL Server 2012 Express 설치하기... Running SQL 2012 Express Studio... DBSetup.exe 설정하기... BioStar 서버와 클라이언트 시작하기... 1 1 2 2 6 7 1/11 BioStar 1, Windows 8 BioStar

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 KeyPad Device Control - Device driver Jo, Heeseung HBE-SM5-S4210 에는 16 개의 Tack Switch 를사용하여 4 행 4 열의 Keypad 가장착 4x4 Keypad 2 KeyPad 를제어하기위하여 FPGA 내부에 KeyPad controller 가구현 KeyPad controller 16bit 로구성된

More information

Microsoft PowerPoint - chap06-5 [호환 모드]

Microsoft PowerPoint - chap06-5 [호환 모드] 2011-1 학기프로그래밍입문 (1) chapter 06-5 참고자료 변수의영역과데이터의전달 박종혁 Tel: 970-6702 Email: jhpark1@seoultech.ac.kr h k 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- ehanbit.net 자동변수 지금까지하나의함수안에서선언한변수는자동변수이다. 사용범위는하나의함수내부이다. 생존기간은함수가호출되어실행되는동안이다.

More information

금오공대 컴퓨터공학전공 강의자료

금오공대 컴퓨터공학전공 강의자료 C 프로그래밍프로젝트 Chap 14. 포인터와함수에대한이해 2013.10.09. 오병우 컴퓨터공학과 14-1 함수의인자로배열전달 기본적인인자의전달방식 값의복사에의한전달 val 10 a 10 11 Department of Computer Engineering 2 14-1 함수의인자로배열전달 배열의함수인자전달방식 배열이름 ( 배열주소, 포인터 ) 에의한전달 #include

More information

PowerPoint Presentation

PowerPoint Presentation #include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 을작성하면서 C 프로그램의구성요소에대하여알아본다.

More information

Windows Server 2012

Windows Server  2012 Windows Server 2012 Shared Nothing Live Migration Shared Nothing Live Migration 은 SMB Live Migration 방식과다른점은 VM 데이터파일의위치입니다. Shared Nothing Live Migration 방식은 Hyper-V 호스트의로컬디스크에 VM 데이터파일이위치합니다. 반면에, SMB

More information

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Function) 1. 함수의개념 입력에대해적절한출력을발생시켜주는것 내가 ( 프로그래머 ) 작성한명령문을연산, 처리, 실행해주는부분 ( 모듈 ) 자체적으로실행되지않으며,

More information

OCW_C언어 기초

OCW_C언어 기초 초보프로그래머를위한 C 언어기초 2 장 : C 프로그램시작하기 2012 년 이은주 학습목표 을작성하면서 C 프로그램의구성요소 주석 (comment) 이란무엇인지알아보고, 주석을만드는방법 함수란무엇인지알아보고, C 프로그램에반드시필요한 main 함수 C 프로그램에서출력에사용되는 printf 함수 변수의개념과변수의값을입력받는데사용되는 scanf 함수 2 목차 프로그램코드

More information

Microsoft Word - 3부A windows 환경 IVF + visual studio.doc

Microsoft Word - 3부A windows 환경 IVF + visual studio.doc Visual Studio 2005 + Intel Visual Fortran 9.1 install Intel Visual Fortran 9.1 intel Visual Fortran Compiler 9.1 만설치해서 DOS 모드에서실행할수있지만, Visual Studio 2005 의 IDE 를사용하기위해서는 Visual Studio 2005 를먼저설치후 Integration

More information

Microsoft Word doc

Microsoft Word doc 2. 디바이스드라이버 [ DIO ] 2.1. 개요 타겟보드의데이터버스를이용하여 LED 및스위치동작을제어하는방법을설명하겠다. 2.2. 회로도 2.3. 준비조건 ARM 용크로스컴파일러가설치되어있어야한다. 하드웨어적인점검을하여정상적인동작을한다고가정한다. NFS(Network File System) 를사용할경우에는 NFS가마운트되어있어야한다. 여기서는소스전문을포함하지않았다.

More information

슬라이드 1

슬라이드 1 정적메모리할당 (Static memory allocation) 일반적으로프로그램의실행에필요한메모리 ( 변수, 배열, 객체등 ) 는컴파일과정에서결정되고, 실행파일이메모리에로드될때할당되며, 종료후에반환됨 동적메모리할당 (Dynamic memory allocation) 프로그램의실행중에필요한메모리를할당받아사용하고, 사용이끝나면반환함 - 메모리를프로그램이직접관리해야함

More information

IRP란 무엇인가

IRP란 무엇인가 IRP 란무엇인가? 윈도우프로그래밍을해보신분이라면윈도우프로그램이콘솔프로그램과다른가장큰차이점이메시지구동방식이라는것을알고계실것입니다. 즉, 일반콘솔프로그램이순차적으로진행되는반면에윈도우프로그램은사용자가특정작업 ( 마우스클릭, 키보드입력, 메뉴선택등등 ) 을하게되면그것에해당하는윈도우메시지라는것이발생되고그러면윈도우에서는해당메시지를현재활성화되어있는프로그램의메시지큐에집어넣게됩니다.

More information

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 제 5 장생성자와접근제어 1. 객체지향기법을이해한다. 2. 클래스를작성할수있다. 3. 클래스에서객체를생성할수있다. 4. 생성자를이용하여객체를초기화할수 있다. 5. 접근자와설정자를사용할수있다. 이번장에서만들어볼프로그램 생성자 생성자 (constructor) 는초기화를담당하는함수 생성자가필요한이유 #include using namespace

More information

윈도우시스템프로그래밍

윈도우시스템프로그래밍 데이터베이스및설계 MySQL 을위한 MFC 를사용한 ODBC 프로그래밍 2012.05.10. 오병우 컴퓨터공학과금오공과대학교 http://www.apmsetup.com 또는 http://www.mysql.com APM Setup 설치발표자료참조 Department of Computer Engineering 2 DB 에속한테이블보기 show tables; 에러발생

More information

Lab 3. 실습문제 (Single linked list)_해답.hwp

Lab 3. 실습문제 (Single linked list)_해답.hwp Lab 3. Singly-linked list 의구현 실험실습일시 : 2009. 3. 30. 담당교수 : 정진우 담당조교 : 곽문상 보고서제출기한 : 2009. 4. 5. 학과 : 학번 : 성명 : 실습과제목적 : 이론시간에배운 Singly-linked list를실제로구현할수있다. 실습과제내용 : 주어진소스를이용해 Singly-linked list의각함수를구현한다.

More information

Microsoft Word - Armjtag_문서1.doc

Microsoft Word - Armjtag_문서1.doc ARM JTAG (wiggler 호환 ) 사용방법 ( IAR EWARM 에서 ARM-JTAG 로 Debugging 하기 ) Test Board : AT91SAM7S256 IAR EWARM : Kickstart for ARM ARM-JTAG : ver 1.0 ( 씨링크테크 ) 1. IAR EWARM (Kickstart for ARM) 설치 2. Macraigor

More information

슬라이드 1

슬라이드 1 CCS v4 사용자안내서 CCSv4 사용자용예제따라하기안내 0. CCS v4.x 사용자 - 준비사항 예제에사용된 CCS 버전은 V4..3 버전이며, CCS 버전에따라메뉴화면이조금다를수있습니다. 예제실습전준비하기 처음시작하기예제모음집 CD 를 PC 의 CD-ROM 드라이브에삽입합니다. 아래안내에따라, 예제소스와헤더파일들을 PC 에설치합니다. CD 드라이브 \SW\TIDCS\TIDCS_DSP80x.exe

More information

WinDbg 사용법

WinDbg 사용법 WinDbg 사용법 본사이트내에서취득한모든문서나이미지, 기타정보의소유권은 하제소프트에있으며동의없는타사이트에의게재나배포, 상업적이용은불가합니다. 자료사용에관한문의는 webmaster@hajesoft.co.kr 로해주시기바랍니다. hajesoft Corp. 2005. Seoul. All Rights Reserved. 프로그램개발에서디버깅은전체개발의 50% 이상의비중을차지할정도로중요하다.

More information

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F > 10주차 문자 LCD 의인터페이스회로및구동함수 Next-Generation Networks Lab. 5. 16x2 CLCD 모듈 (HY-1602H-803) 그림 11-18 19 핀설명표 11-11 번호 분류 핀이름 레벨 (V) 기능 1 V SS or GND 0 GND 전원 2 V Power DD or V CC +5 CLCD 구동전원 3 V 0 - CLCD 명암조절

More information

Microsoft Word - Crackme 15 from Simples 문제 풀이_by JohnGang.docx

Microsoft Word - Crackme 15 from Simples 문제 풀이_by JohnGang.docx CrackMe 15.exe (in Simples) 문제풀이 동명대학교정보보호동아리 THINK www.mainthink.net 강동현 Blog: johnghb.tistory.com e-mail: cari2052@gmail.com 1 목차 : 1. 문제설명및기본분석 --------------------------- P. 03 2 상세분석 ---------------------------

More information

Sharing Memory Between Drivers and Applications

Sharing Memory Between Drivers and Applications 본컬럼에대한모든저작권은 DevGuru에있습니다. 컬럼을타사이트등에기재및링크또는컬럼내용을인용시반드시출처를밝히셔야합니다. 컬럼들을 CD나기타매체로배포하고자할경우 DevGuru에동의를얻으셔야합니다. c DevGuru Corporation. All rights reserved 기타자세한질문사항들은웹게시판이나 support@devguru.co.kr 으로 문의하기바랍니다.

More information

윤성우의 열혈 TCP/IP 소켓 프로그래밍

윤성우의 열혈 TCP/IP 소켓 프로그래밍 C 프로그래밍프로젝트 Chap 22. 구조체와사용자정의자료형 1 2013.10.10. 오병우 컴퓨터공학과 구조체의정의 (Structure) 구조체 하나이상의기본자료형을기반으로사용자정의자료형 (User Defined Data Type) 을만들수있는문법요소 배열 vs. 구조체 배열 : 한가지자료형의집합 구조체 : 여러가지자료형의집합 사용자정의자료형 struct

More information

PowerPoint Template

PowerPoint Template JavaScript 회원정보 입력양식만들기 HTML & JavaScript Contents 1. Form 객체 2. 일반적인입력양식 3. 선택입력양식 4. 회원정보입력양식만들기 2 Form 객체 Form 객체 입력양식의틀이되는 태그에접근할수있도록지원 Document 객체의하위에위치 속성들은모두 태그의속성들의정보에관련된것

More information

다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp");

다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher( 실행할페이지.jsp); 다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp"); dispatcher.forward(request, response); - 위의예에서와같이 RequestDispatcher

More information

System Recovery 사용자 매뉴얼

System Recovery 사용자 매뉴얼 Samsung OS Recovery Solution 을이용하여간편하게 MagicInfo 의네트워크를설정하고시스템을백업및복원할수있습니다. 시스템시작시리모컨의 - 버튼이나키보드의 F3 키를연속해서누르면복구모드로진입한후 Samsung OS Recovery Solution 이실행됩니다. Samsung OS Recovery Solution 은키보드와리모컨을사용하여조작할수있습니다.

More information

KEY 디바이스 드라이버

KEY 디바이스 드라이버 KEY 디바이스드라이버 임베디드시스템소프트웨어 I (http://et.smu.ac.kr et.smu.ac.kr) 차례 GPIO 및 Control Registers KEY 하드웨어구성 KEY Driver 프로그램 key-driver.c 시험응용프로그램 key-app.c KEY 디바이스드라이버 11-2 GPIO(General-Purpose Purpose I/O)

More information

iii. Design Tab 을 Click 하여 WindowBuilder 가자동으로생성한 GUI 프로그래밍환경을확인한다.

iii. Design Tab 을 Click 하여 WindowBuilder 가자동으로생성한 GUI 프로그래밍환경을확인한다. Eclipse 개발환경에서 WindowBuilder 를이용한 Java 프로그램개발 이예는 Java 프로그램의기초를이해하고있는사람을대상으로 Embedded Microcomputer 를이용한제어시스템을 PC 에서 Serial 통신으로제어 (Graphical User Interface (GUI) 환경에서 ) 하는프로그램개발예를설명한다. WindowBuilder:

More information

Microsoft PowerPoint - chap03-변수와데이터형.pptx

Microsoft PowerPoint - chap03-변수와데이터형.pptx #include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num %d\n", num); return 0; } 1 학습목표 의 개념에 대해 알아본다.

More information

지난시간에... 우리는 kernel compile을위하여 cross compile 환경을구축했음. UBUNTU 12.04에서 arm-2009q3를사용하여 간단한 c source를빌드함. 한번은 intel CPU를위한 gcc로, 한번은 ARM CPU를위한 gcc로. AR

지난시간에... 우리는 kernel compile을위하여 cross compile 환경을구축했음. UBUNTU 12.04에서 arm-2009q3를사용하여 간단한 c source를빌드함. 한번은 intel CPU를위한 gcc로, 한번은 ARM CPU를위한 gcc로. AR Configure Kernel Build Environment And kernel & root file system Build 2018-09-27 VLSI Design Lab 1 지난시간에... 우리는 kernel compile을위하여 cross compile 환경을구축했음. UBUNTU 12.04에서 arm-2009q3를사용하여 간단한 c source를빌드함.

More information

untitled

untitled 시스템소프트웨어 : 운영체제, 컴파일러, 어셈블러, 링커, 로더, 프로그래밍도구등 소프트웨어 응용소프트웨어 : 워드프로세서, 스프레드쉬트, 그래픽프로그램, 미디어재생기등 1 n ( x + x +... + ) 1 2 x n 00001111 10111111 01000101 11111000 00001111 10111111 01001101 11111000

More information

Splentec V-WORM Quick Installation Guide Version: 1.0 Contact Information 올리브텍 주소 : 경기도성남시분당구구미로 11 ( 포인트타운 701호 ) URL: E-M

Splentec V-WORM Quick Installation Guide Version: 1.0 Contact Information 올리브텍 주소 : 경기도성남시분당구구미로 11 ( 포인트타운 701호 ) URL:   E-M Splentec V-WORM Quick Installation Guide Version: 1.0 Contact Information 올리브텍 주소 : 경기도성남시분당구구미로 11 ( 포인트타운 701호 ) URL: http://www.olivetech.co.kr E-Mail: tech@olivetech.co.kr TEL: 031-726-4217 FAX: 031-726-4219

More information

6. 설치가시작되는동안 USB 드라이버가자동으로로드됩니다. USB 드라이버가성공적으로로드되면 Setup is starting( 설치가시작되는중 )... 화면이표시됩니다. 7. 화면지침에따라 Windows 7 설치를완료합니다. 방법 2: 수정된 Windows 7 ISO

6. 설치가시작되는동안 USB 드라이버가자동으로로드됩니다. USB 드라이버가성공적으로로드되면 Setup is starting( 설치가시작되는중 )... 화면이표시됩니다. 7. 화면지침에따라 Windows 7 설치를완료합니다. 방법 2: 수정된 Windows 7 ISO Windows 7 설치및 PCIE RAID 설정정보 DK173 초판 11월 2016 A. Windows 7 및 USB 드라이버설치 칩셋사양에따라 Windows 7 설치중에 USB 키보드 / 마우스를사용하려면시스템에서 USB 드라이버를사전로드해야합니다. 이절에서는 USB 드라이버사전로드방법과 Windows 7 설치방법에대해서설명합니다. 방법 1: SATA ODD

More information

Mango-IMX6Q mfgtool을 이용한 이미지 Write하기

Mango-IMX6Q mfgtool을 이용한 이미지 Write하기 Mango-IMX6Q mfgtool 을 이용한이미지 Write 하기 http://www.mangoboard.com/ http://cafe.naver.com/embeddedcrazyboys Crazy Embedded Laboratory www.mangoboard.com cafe.naver.com/embeddedcrazyboys CRZ Technology 1 Document

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 실습 1 배효철 th1g@nate.com 1 목차 조건문 반복문 System.out 구구단 모양만들기 Up & Down 2 조건문 조건문의종류 If, switch If 문 조건식결과따라중괄호 { 블록을실행할지여부결정할때사용 조건식 true 또는 false값을산출할수있는연산식 boolean 변수 조건식이 true이면블록실행하고 false 이면블록실행하지않음 3

More information

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning C Programming Practice (II) Contents 배열 문자와문자열 구조체 포인터와메모리관리 구조체 2/17 배열 (Array) (1/2) 배열 동일한자료형을가지고있으며같은이름으로참조되는변수들의집합 배열의크기는반드시상수이어야한다. type var_name[size]; 예 ) int myarray[5] 배열의원소는원소의번호를 0 부터시작하는색인을사용

More information

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 제 3 장함수와문자열 1. 함수의기본적인개념을이해한다. 2. 인수와매개변수의개념을이해한다. 3. 함수의인수전달방법 2가지를이해한다 4. 중복함수를이해한다. 5. 디폴트매개변수를이해한다. 6. 문자열의구성을이해한다. 7. string 클래스의사용법을익힌다. 이번장에서만들어볼프로그램 함수란? 함수선언 함수호출 예제 #include using

More information

UI TASK & KEY EVENT

UI TASK & KEY EVENT T9 & AUTOMATA 2007. 3. 23 PLATFORM TEAM 정용학 차례 T9 개요 새로운언어 (LDB) 추가 T9 주요구조체 / 주요함수 Automata 개요 Automata 주요함수 추후세미나계획 질의응답및토의 T9 ( 2 / 30 ) T9 개요 일반적으로 cat 이라는단어를쓸려면... 기존모드 (multitap) 2,2,2, 2,8 ( 총 6번의입력

More information

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A638C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A638C0CFC2F72E BC8A3C8AF20B8F0B5E55D> 뻔뻔한 AVR 프로그래밍 The Last(8 th ) Lecture 유명환 ( yoo@netplug.co.kr) INDEX 1 I 2 C 통신이야기 2 ATmega128 TWI(I 2 C) 구조분석 4 ATmega128 TWI(I 2 C) 실습 : AT24C16 1 I 2 C 통신이야기 I 2 C Inter IC Bus 어떤 IC들간에도공통적으로통할수있는 ex)

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Chapter 15 고급프로그램을 만들기위한 C... 1. main( ) 함수의숨겨진이야기 2. 헤더파일 3. 전처리문과예약어 1. main( ) 함수의숨겨진이야기 main( ) 함수의매개변수 [ 기본 14-1] main( ) 함수에매개변수를사용한예 1 01 #include 02 03 int main(int argc, char* argv[])

More information

Microsoft PowerPoint - chap13-입출력라이브러리.pptx

Microsoft PowerPoint - chap13-입출력라이브러리.pptx #include int main(void) int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; 1 학습목표 스트림의 기본 개념을 알아보고,

More information

Frama-C/JESSIS 사용법 소개

Frama-C/JESSIS 사용법 소개 Frama-C 프로그램검증시스템소개 박종현 @ POSTECH PL Frama-C? C 프로그램대상정적분석도구 플러그인구조 JESSIE Wp Aorai Frama-C 커널 2 ROSAEC 2011 동계워크샵 @ 통영 JESSIE? Frama-C 연역검증플러그인 프로그램분석 검증조건추출 증명 Hoare 논리에기초한프로그램검증도구 사용법 $ frama-c jessie

More information

Microsoft PowerPoint - e pptx

Microsoft PowerPoint - e pptx Import/Export Data Using VBA Objectives Referencing Excel Cells in VBA Importing Data from Excel to VBA Using VBA to Modify Contents of Cells 새서브프로시저작성하기 프로시저실행하고결과확인하기 VBA 코드이해하기 Referencing Excel Cells

More information

API 매뉴얼

API 매뉴얼 PCI-DIO12 API Programming (Rev 1.0) Windows, Windows2000, Windows NT and Windows XP are trademarks of Microsoft. We acknowledge that the trademarks or service names of all other organizations mentioned

More information

JVM 메모리구조

JVM 메모리구조 조명이정도면괜찮조! 주제 JVM 메모리구조 설미라자료조사, 자료작성, PPT 작성, 보고서작성. 발표. 조장. 최지성자료조사, 자료작성, PPT 작성, 보고서작성. 발표. 조원 이용열자료조사, 자료작성, PPT 작성, 보고서작성. 이윤경 자료조사, 자료작성, PPT작성, 보고서작성. 이수은 자료조사, 자료작성, PPT작성, 보고서작성. 발표일 2013. 05.

More information

Chap 6: Graphs

Chap 6: Graphs AOV Network 의표현 임의의 vertex 가 predecessor 를갖는지조사 각 vertex 에대해 immediate predecessor 의수를나타내는 count field 저장 Vertex 와그에부속된모든 edge 들을삭제 AOV network 을인접리스트로표현 count link struct node { int vertex; struct node

More information

PowerPoint Presentation

PowerPoint Presentation Class - Property Jo, Heeseung 목차 section 1 클래스의일반구조 section 2 클래스선언 section 3 객체의생성 section 4 멤버변수 4-1 객체변수 4-2 클래스변수 4-3 종단 (final) 변수 4-4 멤버변수접근방법 section 5 멤버변수접근한정자 5-1 public 5-2 private 5-3 한정자없음

More information

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt 변수와상수 1 변수란무엇인가? 변수 : 정보 (data) 를저장하는컴퓨터내의특정위치 ( 임시저장공간 ) 메모리, register 메모리주소 101 번지 102 번지 변수의크기에따라 주로 byte 단위 메모리 2 기본적인변수형및변수의크기 변수의크기 해당컴퓨터에서는항상일정 컴퓨터마다다를수있음 short

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Web server porting 2 Jo, Heeseung Web 을이용한 LED 제어 Web 을이용한 LED 제어프로그램 web 에서데이터를전송받아타겟보드의 LED 를조작하는프로그램을작성하기위해다음과같은소스파일을생성 2 Web 을이용한 LED 제어 LED 제어프로그램작성 8bitled.html 파일을작성 root@ubuntu:/working/web# vi

More information

Endpoint Protector - Active Directory Deployment Guide

Endpoint Protector - Active Directory Deployment Guide Version 1.0.0.1 Active Directory 배포가이드 I Endpoint Protector Active Directory Deployment Guide 목차 1. 소개...1 2. WMI 필터생성... 2 3. EPP 배포 GPO 생성... 9 4. 각각의 GPO 에해당하는 WMI 연결... 12 5.OU 에 GPO 연결... 14 6. 중요공지사항

More information

슬라이드 1

슬라이드 1 Delino EVM 용처음시작하기 - 프로젝트만들기 (85) Delfino EVM 처음시작하기앞서 이예제는타겟보드와개발홖경이반드시갖추어져있어야실습이가능합니다. 타겟보드 : Delfino EVM + TMS0F85 초소형모듈 개발소프트웨어 : Code Composer Studio 4 ( 이자료에서사용된버전은 v4..입니다. ) 하드웨어장비 : TI 정식 JTAG

More information

IoT FND8 7-SEGMENT api

IoT FND8 7-SEGMENT api IoT FND8 7-SEGMENT api http://www.mangoboard.com/ http://cafe.naver.com/embeddedcrazyboys Crazy Embedded Laboratory www.mangoboard.com cafe.naver.com/embeddedcrazyboys CRZ Technology 1 Document History

More information

Chapter 4. LISTS

Chapter 4. LISTS C 언어에서리스트구현 리스트의생성 struct node { int data; struct node *link; ; struct node *ptr = NULL; ptr = (struct node *) malloc(sizeof(struct node)); Self-referential structure NULL: defined in stdio.h(k&r C) or

More information

학습목표 함수프로시저, 서브프로시저의의미를안다. 매개변수전달방식을학습한다. 함수를이용한프로그래밍한다. 2

학습목표 함수프로시저, 서브프로시저의의미를안다. 매개변수전달방식을학습한다. 함수를이용한프로그래밍한다. 2 학습목표 함수프로시저, 서브프로시저의의미를안다. 매개변수전달방식을학습한다. 함수를이용한프로그래밍한다. 2 6.1 함수프로시저 6.2 서브프로시저 6.3 매개변수의전달방식 6.4 함수를이용한프로그래밍 3 프로시저 (Procedure) 프로시저 (Procedure) 란무엇인가? 논리적으로묶여있는하나의처리단위 내장프로시저 이벤트프로시저, 속성프로시저, 메서드, 비주얼베이직내장함수등

More information

윈도우시스템프로그래밍

윈도우시스템프로그래밍 데이타베이스 MySQL 을위한 MFC 를사용한 ODBC 프로그래밍 2013.05.15. 오병우 컴퓨터공학과금오공과대학교 http://www.apmsetup.com 또는 http://www.mysql.com APM Setup 설치발표자료참조 Department of Computer Engineering 2 DB 에속한테이블보기 show tables; 에러발생

More information

MF5900 Series MF Driver Installation Guide

MF5900 Series MF Driver Installation Guide 한국어 MF 드라이버설치설명서 사용자소프트웨어 CD-ROM................................................ 1.................................................................... 1..............................................................................

More information

Microsoft Word - src.doc

Microsoft Word - src.doc IPTV 서비스탐색및콘텐츠가이드 RI 시스템운용매뉴얼 목차 1. 서버설정방법... 5 1.1. 서비스탐색서버설정... 5 1.2. 컨텐츠가이드서버설정... 6 2. 서버운용방법... 7 2.1. 서비스탐색서버운용... 7 2.1.1. 서비스가이드서버실행... 7 2.1.2. 서비스가이드정보확인... 8 2.1.3. 서비스가이드정보추가... 9 2.1.4. 서비스가이드정보삭제...

More information

버퍼오버플로우-왕기초편 10. 메모리를 Hex dump 뜨기 앞서우리는버퍼오버플로우로인해리턴어드레스 (return address) 가변조될수있음을알았습니다. 이제곧리턴어드레스를원하는값으로변경하는실습을해볼것인데요, 그전에앞서, 메모리에저장된값들을살펴보는방법에대해배워보겠습

버퍼오버플로우-왕기초편 10. 메모리를 Hex dump 뜨기 앞서우리는버퍼오버플로우로인해리턴어드레스 (return address) 가변조될수있음을알았습니다. 이제곧리턴어드레스를원하는값으로변경하는실습을해볼것인데요, 그전에앞서, 메모리에저장된값들을살펴보는방법에대해배워보겠습 앞서우리는버퍼오버플로우로인해리턴어드레스 (return address) 가변조될수있음을알았습니다. 이제곧리턴어드레스를원하는값으로변경하는실습을해볼것인데요, 그전에앞서, 메모리에저장된값들을살펴보는방법에대해배워보겠습니다. 여러분모두 Windows 에서 hex editor(hex dump, hex viewer) 라는것을사용해보셨을겁니다. 바로바이너리파일을 16 진수

More information

JDK이클립스

JDK이클립스 JDK 와이클립스설치 A. JDK 다운로드, 설치및환경설정 지금부터 JDK를다운로드받아설치하고 JDK를윈도우에서활용할수있도록환경을설정하는전과정을소개한다. 다운로드 www.oracle.com 사이트에접속하여 Downloads 메뉴를선택한후 [ 그림 1] 과같이 "Java for Developers" 를클릭한다. [ 그림 1] www.oracle.com 사이트

More information

기초컴퓨터프로그래밍

기초컴퓨터프로그래밍 구조체 #include int main() { } printf("structure\n"); printf("instructor: Keon Myung Lee\n"); return 0; 내용 구조체 (struct) Typedef 공용체 (union) 열거형 (enum) 구조체 구조체 (structure) 어떤대상을표현하는서로연관된항목 ( 변수 )

More information

WinDBG 실무

WinDBG 실무 주식회사하제소프트 (www.hajesoft.co.kr) 강사이봉석 과정소개 윈도우응용프로그램, 윈도우서비스프로그램, 윈도우디바이스드라이버를개발하는개발자들로하여금고급디버깅기술을제공하는 윈도우디버거 (WinDBG) 사용방법을익히게하여, 고급시스템프로그래머를양성하는데있습니다 윈도우디버거 (WinDBG) 를사용하는개발자는실무에서고급시스템프로그래머가갖추어야할중요한디버깅지식을습득함과동시에시간과비용을최대한아끼는프로그래밍습관과우수한결과물을만들어낼수있습니다

More information

4 장클래스와객체 클래스와객체 public과 private 구조체와클래스객체의생성과생성자객체의소멸과소멸자생성자와소멸자의호출순서디폴트생성자와디폴트소멸자멤버초기화멤버함수의외부정의멤버함수의인라인함수선언 C++ 프로그래밍입문

4 장클래스와객체 클래스와객체 public과 private 구조체와클래스객체의생성과생성자객체의소멸과소멸자생성자와소멸자의호출순서디폴트생성자와디폴트소멸자멤버초기화멤버함수의외부정의멤버함수의인라인함수선언 C++ 프로그래밍입문 4 장클래스와객체 클래스와객체 public과 private 구조체와클래스객체의생성과생성자객체의소멸과소멸자생성자와소멸자의호출순서디폴트생성자와디폴트소멸자멤버초기화멤버함수의외부정의멤버함수의인라인함수선언 C++ 프로그래밍입문 1. 클래스와객체 추상데이터형 : 속성 (attribute) + 메서드 (method) 예 : 자동차의속성과메서드 C++ : 주로 class

More information

HLS(HTTP Live Streaming) 이용가이드 1. HLS 소개 Apple iphone, ipad, ipod의운영체제인 ios에서사용하는표준 HTTP 기반스트리밍프로토콜입니다. 2. HLS 지원대상 - 디바이스 : iphone/ipad/ipod - 운영체제 :

HLS(HTTP Live Streaming) 이용가이드 1. HLS 소개 Apple iphone, ipad, ipod의운영체제인 ios에서사용하는표준 HTTP 기반스트리밍프로토콜입니다. 2. HLS 지원대상 - 디바이스 : iphone/ipad/ipod - 운영체제 : HLS(HTTP Live Streaming) 이용가이드 1. HLS 소개 Apple iphone, ipad, ipod의운영체제인 ios에서사용하는표준 HTTP 기반스트리밍프로토콜입니다. 2. HLS 지원대상 - 디바이스 : iphone/ipad/ipod - 운영체제 : ios 3.0 이상 - 콘텐츠형식 : MP4 (H264,AAC ), MP3 * 디바이스별해상도,

More information

Microsoft Word - codevision사용법_pdf버전.docx

Microsoft Word - codevision사용법_pdf버전.docx CodevisionAVR 설치와 기본사용법 민경학 ( hak@anycalluser.net) 인하대학교 IT 공과대학전자공학과멀티미디어연구실 ( 하이테크센터 916 호 ) 2008.9.7.001 들어가며 AVR 에서쓸수있는컴파일러종류에는 CodeVisionAVR, AVR Edit, IAR, AVRStudio 등이있습니다. CodeVisionAVR 과 IAR 은상용이고

More information

슬라이드 1

슬라이드 1 -Part3- 제 4 장동적메모리할당과가변인 자 학습목차 4.1 동적메모리할당 4.1 동적메모리할당 4.1 동적메모리할당 배울내용 1 프로세스의메모리공간 2 동적메모리할당의필요성 4.1 동적메모리할당 (1/6) 프로세스의메모리구조 코드영역 : 프로그램실행코드, 함수들이저장되는영역 스택영역 : 매개변수, 지역변수, 중괄호 ( 블록 ) 내부에정의된변수들이저장되는영역

More information

Chapter 4. LISTS

Chapter 4. LISTS 6. 동치관계 (Equivalence Relations) 동치관계 reflexive, symmetric, transitive 성질을만족 "equal to"(=) 관계는동치관계임. x = x x = y 이면 y = x x = y 이고 y = z 이면 x = z 동치관계를이용하여집합 S 를 동치클래스 로분할 동일한클래스내의원소 x, y 에대해서는 x y 관계성립

More information

C# Programming Guide - Types

C# Programming Guide - Types C# Programming Guide - Types 최도경 lifeisforu@wemade.com 이문서는 MSDN 의 Types 를요약하고보충한것입니다. http://msdn.microsoft.com/enus/library/ms173104(v=vs.100).aspx Types, Variables, and Values C# 은 type 에민감한언어이다. 모든

More information

01장

01장 뇌를자극하는 Windows Server 2012 R2 부록 NAS4Free 의설치와환경설정 네트워크상에서저장공간이제공되는 NAS(Network Attached Storage) 환경을 VMware에서구성해야한다. 이책에서는그중 Unix 계열의운영체제이며무료로사용할수있는 NAS4Free 운영체제를설치하고사용할것이다. 결국지금설치하는 NAS4Free는쿼럼디스크와클러스터디스크를제공하는것이목적이다.

More information

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout << " 양수입력 : "; cin >> *p; if (*p <= 0) cout << " 양수를입력해야합니다 " << endl; return; 동적할

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout <<  양수입력 : ; cin >> *p; if (*p <= 0) cout <<  양수를입력해야합니다  << endl; return; 동적할 15 장기타주제들 auto_ptr 변환함수 cast 연산자에의한명시적형변환실행시간타입정보알아내기 (RTTI) C++ 프로그래밍입문 1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout > *p; if (*p

More information

목차 BUG DEQUEUE 의 WAIT TIME 이 1 초미만인경우, 설정한시간만큼대기하지않는문제가있습니다... 3 BUG [qp-select-pvo] group by 표현식에있는컬럼을참조하는집합연산이존재하지않으면결괏값오류가발생할수있습니다... 4

목차 BUG DEQUEUE 의 WAIT TIME 이 1 초미만인경우, 설정한시간만큼대기하지않는문제가있습니다... 3 BUG [qp-select-pvo] group by 표현식에있는컬럼을참조하는집합연산이존재하지않으면결괏값오류가발생할수있습니다... 4 ALTIBASE HDB 6.5.1.5.10 Patch Notes 목차 BUG-46183 DEQUEUE 의 WAIT TIME 이 1 초미만인경우, 설정한시간만큼대기하지않는문제가있습니다... 3 BUG-46249 [qp-select-pvo] group by 표현식에있는컬럼을참조하는집합연산이존재하지않으면결괏값오류가발생할수있습니다... 4 BUG-46266 [sm]

More information

기존에 Windchill Program 이 설치된 Home Directory 를 선택해준다. 프로그램설치후설치내역을확인해보면 Adobe Acrobat 6.0 Support 내역을확인할수 있다.

기존에 Windchill Program 이 설치된 Home Directory 를 선택해준다. 프로그램설치후설치내역을확인해보면 Adobe Acrobat 6.0 Support 내역을확인할수 있다. PDMLink 에등록된 Office 문서들의 PDF 문서변환기능및 Viewer 기능을알아보자 PDM Link에서지원하는 [Product View Document Support] 기능은 Windows-Base 기반의 Microsoft Office 문서들을 PDMLink용 Viewer인 Product View를통한읽기가가능한 PDF Format 으로변환하는기능이다.

More information

03_queue

03_queue Queue Data Structures and Algorithms 목차 큐의이해와 ADT 정의 큐의배열기반구현 큐의연결리스트기반구현 큐의활용 덱 (Deque) 의이해와구현 Data Structures and Algorithms 2 큐의이해와 ADT 정의 Data Structures and Algorithms 3 큐 (Stack) 의이해와 ADT 정의 큐는 LIFO(Last-in,

More information

Microsoft PowerPoint - C++ 5 .pptx

Microsoft PowerPoint - C++ 5 .pptx C++ 언어프로그래밍 한밭대학교전자. 제어공학과이승호교수 연산자중복 (operator overloading) 이란? 2 1. 연산자중복이란? 1) 기존에미리정의되어있는연산자 (+, -, /, * 등 ) 들을프로그래머의의도에맞도록새롭게정의하여사용할수있도록지원하는기능 2) 연산자를특정한기능을수행하도록재정의하여사용하면여러가지이점을가질수있음 3) 하나의기능이프로그래머의의도에따라바뀌어동작하는다형성

More information

<B1E2BCFAB9AEBCAD28C0CCB5BFBCF6295F F6F6B696E672E687770>

<B1E2BCFAB9AEBCAD28C0CCB5BFBCF6295F F6F6B696E672E687770> SSDT HOOKING을이용한프로세스와파일숨기기 이동수 alonglog@is119.jnu.ac.kr 개 요 기존에만들었던메시지후킹프로그램을숨겨보고싶어서 SSDT후킹을공부하였다. 그리고그결과를정리하여이문서를작성하였다. 프로세스를숨기고파일을숨기기위해서 Native API를후킹했다. 메시지후킹과다르게 SSDT후킹은커널모드에서후킹을해야하므로디바이스드라이버로프로그램이작성되어있다.

More information

CODESYS 런타임 설치과정

CODESYS 런타임 설치과정 CODESYS 런타임설치과정 CODESYS Control RTE / SoftMotion RTE Setup Web: www.altsoft.kr E-mail: altsoft@altsoft.kr Tel: 02-547-2344 목 차 CODESYS 런타임 - Control RTE, SoftMotion RTE... 2 다운로드및설치과정... 2 CODESYS EtherCAT

More information