Microsoft Word - PE_structure.docx
|
|
- 자영 예
- 6 years ago
- Views:
Transcription
1 PE의구조 < 밑의내용은 kkamagui 님이쓰신글과 Msdn Magazine 의 An In-Depth Look into the Win32 Portable Executable File Format Part I, II와 msdn의 Debugging and Error Handling Technical Articles 에기재된 Peering Inside the PE: A Tour of the Win32 Portable Executable File Format 에서도움을많이받았습니다.> 1. PE 파일의전체구조다음은 PE 파일의전체구조이다. 위와같은형태이며 PE 파일포맷은 COFF 라는포맷을계승한파일포맷이다. COFF 라는것은수많은프로그램들은하나로합쳐메모리에옮기는과정에서매우복잡하고많은시간을요구하는등의문제점을개선하기위해미국 AT&T 사에서고안해낸규칙이다.
2 각부분을크게살펴보면다음과같이 4 부분으로크게나뉜다. IMAGE_DOS_HEADER : PE 파일의처음에위치하며뒷부분에 DOS 에서실행했을때, 에러메시지 (This program cannot be run in DOS mode) 를표시하는스텁 (Stub) 코드를포함하고있다. MAGIC Number 와다음에오는 IMAGE_NT_HEADER 의위치를표시한다. IMAGE_NT_HEADER : PE 파일포맷에대한정보를포함. 아래의두부분으로구성된다. IMAGE_FILE_HEADER : Section 의수및속성과같은정보포함한다. IMAGE_OPTIONAL_HEADER : PE 파일에대한속성또는이미지베이스와같은정보포함한다. Data Directory : 어떤영역의 Virtual Address 와 Size 정보를포함한다. IMAGE_SECTION_HEADER Array: 섹션에대한실질적인정보를포함한다. Section( 섹션 ) : 실제데이터가위치하는영역이다. 로더는섹션의내용만을메모리로로드한다. 다음은대표적인섹션들의설명이다. 1) 코드 2) 데이터.text : 프로그램을실행하기위한코드를담고있는섹션.data : 초기화된전역변수들을담고있는읽고쓰기가능한섹션.rdata : 읽기전용데이터섹션으로서문자열표현이나 C++/COM 가상함수테이블들이배치된다..bss : 초기화되지않은전역변수들을위한섹션이다. 가상주소공간에매필될때에는보통.data 섹션에병합되어메모리상에서따로존재하지않는다. VC 에서는.textbss 로나타난다. 3) 임포트 API 정보.idata : 임포트할 DLL 과그 API 들에대한정보를담고있는섹션. 대표적으로 IAT(Import Address Table) 이존재함..didat : 지연로딩임포트데이터를위한섹션이다. 지연로딩은 Win2000 부터지원되는 DLL 로딩의한방식이다. 릴리즈모드일때는다른섹션에병합된다. 4) 익스포트 API 정보.edata : 익스포트할 API 에대한정보를담고있는섹션. 보통 API 나변수를익스포트할수있는경우 5) 리소스 DLL 이기때문에 DLL PE 에이섹션이존재한다..rsrc : 다이얼로그, 아이콘, 커서들의윈도우 APP 리소스관련데이터들이배치된다. 6) 재배치정보.reloc : 실행파일에대한기본재배치정보를담고있는섹션. 재배치란 PE 이미지를원하는기본주소에로드하지못하고다른주소에로드했을경우코드상에서의관련주소참조에대한정보를해야하는경우. 7) TLS
3 .tls : declspec(thread) 지시어와함께선언되는스레드지역저장소 (Thread Local Storage) 를위한섹션 8) C++ 런타임.crt : C++ 런터임을지원하기위한추가된섹션. C++ 객체생성자와소멸자를호출하는데이용되는함수포인터. 9) Short.sdata : 전역포인터에상대적으로주소지정될수있는읽고쓰기가능한 "Short" 데이터섹션이다..srdata :.sdata 에들어갈수있는데이터들의읽기전용섹션. 10) 예외정보.pdata : 예외정보를담고있는섹션이다. IMAGE_RUNTIME_FUNCTION_ENTRY 구조체의배열을가지고있다. 이구조체는 CPU 플랫폼에의존한다. 11) 디버깅 12) Directives.debug$S : OBJ 파일에만존재한다. 가변길이코드뷰포맷심벌레코드의스트림이다..debug$T : OBJ 파일에만존재한다. 가변길이코드뷰포맷타입레코드의스트림이다..debug$P : 미리컴파일된헤더를사용했을때 OBJ 파일에만존재하는섹션이다..drectve : OBJ 파일에만존재한다. Directives 란링커명령라인을통해전달될수있는아스키문자열을말한다. 마지막 COFF Linue Numbers, COFF Symbols, CodeView Debug Information 은파일로드시쓰이지않는다. 구체적으로 PE 포멧에대해서공부하기전에알아야할것이있는데바로 RVA(Relative Virtual Address, 상대적가상주소 ) 이다.. 파일의오프셋과관련이없고, PE 파일내의번지에관계된값. 즉, 가상주소공간상의번지값들이라고생각하면된다. RVA 가상대적가상주소이기때문에실제주소번지로변환하기위해서는다음과같이계산을하면된다. 실제주소번지 ( 가상주소 ) = 이미지로드시작번지 + RVA 여기서이미지로드시작번지는 NT 의경우 EXE 가시작되는번지는 0x 번지이다. IMAGE_DOS_HEADER IMAGE_DOS_HEADER 는 PE 실행파일첫부분에위치하며아래와같이 WinNT.h 에정의되어있다. #define IMAGE_DOS_SIGNATURE 0x4D5A // MZ #define IMAGE_OS2_SIGNATURE 0x4E45 // NE #define IMAGE_OS2_SIGNATURE_LE 0x4C45 // LE #define IMAGE_NT_SIGNATURE 0x // PE00
4 typedef struct _IMAGE_DOS_HEADER { // DOS.EXE header WORD e_magic; WORD e_cblp; WORD e_cp; WORD e_crlc; WORD e_cparhdr; WORD e_minalloc; WORD e_maxalloc; WORD e_ss; WORD e_sp; WORD e_csum; WORD e_ip; WORD e_cs; WORD e_lfarlc; WORD e_ovno; WORD e_res[4]; WORD e_oemid; WORD e_oeminfo; WORD e_res2[10]; LONG e_lfanew; // Magic number <MZ> // Bytes on last page of file // Pages in file // Relocations // Size of header in paragraphs // Minimum extra paragraphs needed // Maximum extra paragraphs needed // Initial (relative) SS value // Initial SP value // Checksum // Initial IP value // Initial (relative) CS value // File address of relocation table // Overlay number // Reserved words // OEM identifier (for e_oeminfo) // OEM information; e_oemid specific // Reserved words // File address of new exe header } IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER; 크게주의해서볼부분은실행파일인지판단하는데사용되는 e_magic 부분과다음에오는 IMAGE_NT_HEADER 의위치를표시해주는 e_lfanew 부분이다. IMAGE_NT_HEADER IMAGE_NT_HEADER 는실제 PE 파일포맷에대한정보를포함하는헤더로써 IMAGE_FILE_HEADER 와 IMAGE_OPTIONAL_HEADER 로구성된다. 1. typedef struct _IMAGE_NT_HEADERS { DWORD Signature; <PE00> IMAGE_FILE_HEADER FileHeader; IMAGE_OPTIONAL_HEADER32 OptionalHeader; } IMAGE_NT_HEADERS32, *PIMAGE_NT_HEADERS32;
5 IMAGE_NT_HEADER 는위와같이 Signature 와 File 헤더, 그리고 Optional Header 로구성되어있다. Signature 는 IMAGE_NT_SIGNATURE 로 <PE00> 의값을가진다. 그럼첫번째에해당하는 FileHeader 를알아보자. IMAGE_FILE_HEADER typedef struct _IMAGE_FILE_HEADER { WORD Machine; WORD NumberOfSections; DWORD TimeDateStamp; DWORD PointerToSymbolTable; DWORD NumberOfSymbols; WORD SizeOfOptionalHeader; WORD Characteristics; } IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER; Machine : CPU ID 를나타내는데, 간단히보면 Intel 인지, MIPS 인지등등의정보가들어있음 NumberOfSections : PE 파일에포함된총섹션의수를나타냄 TimeDateStamp : 컴파일러또는링커가파일을생성한시간 년 1 월 1 일 GMT 기준으로지나온초 PointerToSymbolTable : COFF 파일의심볼테이블의오프셋을나타냄. 없는경우가대부분 NumberOfSymbols : 심볼의개수를나타냄 SizeOfOptionalHeader : 뒤에이어서나오는 Optional Header 의크기를나타낸다. 32Bit/64Bit 에따라서그크기가다름 Characteristics : 파일의특성 Machine 에대한매크로는 WinNT.h 에정의되어있는데아래와같다. Intel32 or Intel64 가대부분일테니까위의파란색만보면될것같다. #define IMAGE_FILE_MACHINE_UNKNOWN 0 #define IMAGE_FILE_MACHINE_I386 0x014c // Intel 386. #define IMAGE_FILE_MACHINE_R3000 #define IMAGE_FILE_MACHINE_R4000 #define IMAGE_FILE_MACHINE_R10000 #define IMAGE_FILE_MACHINE_WCEMIPSV2 #define IMAGE_FILE_MACHINE_ALPHA 0x0162 // MIPS little-endian, 0x160 big-endian 0x0166 // MIPS little-endian 0x0168 // MIPS little-endian 0x0169 // MIPS little-endian WCE v2 0x0184 // Alpha_AXP #define IMAGE_FILE_MACHINE_SH3 #define IMAGE_FILE_MACHINE_SH3DSP #define IMAGE_FILE_MACHINE_SH3E 0x01a2 // SH3 little-endian 0x01a3 0x01a4 // SH3E little-endian
6 #define IMAGE_FILE_MACHINE_SH4 #define IMAGE_FILE_MACHINE_SH5 #define IMAGE_FILE_MACHINE_ARM #define IMAGE_FILE_MACHINE_THUMB #define IMAGE_FILE_MACHINE_AM33 #define IMAGE_FILE_MACHINE_POWERPC 0x01a6 // SH4 little-endian 0x01a8 // SH5 0x01c0 // ARM Little-Endian 0x01c2 0x01d3 0x01F0 // IBM PowerPC Little-Endian #define IMAGE_FILE_MACHINE_POWERPCFP 0x01f1 #define IMAGE_FILE_MACHINE_IA64 0x0200 // Intel 64 #define IMAGE_FILE_MACHINE_MIPS16 #define IMAGE_FILE_MACHINE_ALPHA64 #define IMAGE_FILE_MACHINE_MIPSFPU #define IMAGE_FILE_MACHINE_MIPSFPU16 #define IMAGE_FILE_MACHINE_AXP64 #define IMAGE_FILE_MACHINE_TRICORE #define IMAGE_FILE_MACHINE_CEF #define IMAGE_FILE_MACHINE_EBC #define IMAGE_FILE_MACHINE_AMD64 #define IMAGE_FILE_MACHINE_M32R #define IMAGE_FILE_MACHINE_CEE 0x0266 // MIPS 0x0284 // ALPHA64 0x0366 // MIPS 0x0466 // MIPS IMAGE_FILE_MACHINE_ALPHA64 0x0520 // Infineon 0x0CEF 0x0EBC // EFI Byte Code 0x8664 // AMD64 (K8) 0x9041 // M32R little-endian 0xC0EE 다음은 Characteristics 에대한부분인데 WinNT.h 에아래와같이정의되어있다. 역시나파란색부분만보면될것같다. #define IMAGE_FILE_RELOCS_STRIPPED #define IMAGE_FILE_EXECUTABLE_IMAGE 0x0001 // Relocation info stripped from file. 0x0002 // File is executable (i.e. no unresolved externel references). #define IMAGE_FILE_LINE_NUMS_STRIPPED #define IMAGE_FILE_LOCAL_SYMS_STRIPPED #define IMAGE_FILE_AGGRESIVE_WS_TRIM #define IMAGE_FILE_LARGE_ADDRESS_AWARE #define IMAGE_FILE_BYTES_REVERSED_LO 0x0004 // Line nunbers stripped from file. 0x0008 // Local symbols stripped from file. 0x0010 // Agressively trim working set 0x0020 // App can handle >2gb addresses 0x0080 // Bytes of machine word are reversed. #define IMAGE_FILE_32BIT_MACHINE #define IMAGE_FILE_DEBUG_STRIPPED 0x0100 // 32 bit word machine. 0x0200 // Debugging info stripped from file in.dbg file #define IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP 0x0400 // If Image is on removable media, copy and run from the swap file. #define IMAGE_FILE_NET_RUN_FROM_SWAP 0x0800 // If Image is on Net, copy and run from the swap file.
7 #define IMAGE_FILE_SYSTEM #define IMAGE_FILE_DLL 0x1000 // System File. 0x2000 // File is a DLL. #define IMAGE_FILE_UP_SYSTEM_ONLY #define IMAGE_FILE_BYTES_REVERSED_HI 0x4000 // File should only be run on a UP machine 0x8000 // Bytes of machine word are reversed. IMAGE_OPTIONAL_HEADER typedef struct _IMAGE_OPTIONAL_HEADER { // // Standard fields. // WORD Magic; BYTE MajorLinkerVersion; BYTE MinorLinkerVersion; DWORD SizeOfCode; DWORD SizeOfInitializedData; DWORD SizeOfUninitializedData; DWORD AddressOfEntryPoint; DWORD BaseOfCode; DWORD BaseOfData; // // NT additional fields. // DWORD ImageBase; DWORD SectionAlignment; DWORD FileAlignment; WORD MajorOperatingSystemVersion; WORD MinorOperatingSystemVersion; WORD MajorImageVersion; WORD MinorImageVersion; WORD MajorSubsystemVersion; WORD MinorSubsystemVersion; DWORD Win32VersionValue; DWORD SizeOfImage;
8 DWORD SizeOfHeaders; DWORD CheckSum; WORD Subsystem; WORD DllCharacteristics; DWORD SizeOfStackReserve; DWORD SizeOfStackCommit; DWORD SizeOfHeapReserve; DWORD SizeOfHeapCommit; DWORD LoaderFlags; DWORD NumberOfRvaAndSizes; IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES]; } IMAGE_OPTIONAL_HEADER32, *PIMAGE_OPTIONAL_HEADER32; Optional Header 는꽤나중요한정보를가지고있다. 위에서보면알수있듯이 PE 파일의전반적이내용들에대한정보를포함한다. 항목이꽤나많은데중요한정보만추리면아래와같다. Magic : Signature 로 32Bit 의경우 0x10b 를가짐 SizeOfCode : 섹션중에 IMAGE_SCN_CNT_CODE 속성을가진섹션들전체의합 SizeOfInitializedData : 섹션중에 IMAGE_SCN_CNT_INITIALIZED_DATA 속성을가진섹션들전체의합 SizeOfUninitializedData : 섹션중에 IMAGE_SCN_CNT_UNINITIALIZED_DATA 속성을가진섹션들전체의합 AddressOfEntryPoint : Entry Point 의주소. 실제로더가제일먼저실행할코드의시작점 BaseOfCode : 코드가시작되는상대주소 (RVA) BaseOfData : 데이터가시작되는상대주소 (RVA) ImageBase : 이미지가로딩되는메모리의 Base 주소. 일반적으로실행파일의경우 0x400000(4Mbyte) 위치에로딩 SectionAlignment : 섹션이정렬되는크기. PE 파일자체가메모리맵파일이기때문에 0x1000(4Kbyte) 보다크거나같아야함 SizeOfImage : 모든섹션들의합. 이미지실행을위해메모리를할당해야하는총크기 NumberOfRvaAndSizes : 뒤에오는 DataDirectory 의개수. 무조건 16 개 Data Directory : 총 16 개가있으며각항목은특정데이터에대한정보를가지고있음. 뒤에서설명 IMAGE_DATA_DIRECTORY
9 typedef struct _IMAGE_DATA_DIRECTORY { DWORD VirtualAddress; DWORD Size; } IMAGE_DATA_DIRECTORY, *PIMAGE_DATA_DIRECTORY; 데이터디렉토리는위와같은구조로이루어져있으며 IMAGE_OPTIONAL_HEADER 에총 16 개가있다. 각각에 Index 에대한매크로는 WinNT.h 에아래와같이정의되어있다. #define IMAGE_DIRECTORY_ENTRY_EXPORT #define IMAGE_DIRECTORY_ENTRY_IMPORT #define IMAGE_DIRECTORY_ENTRY_RESOURCE #define IMAGE_DIRECTORY_ENTRY_EXCEPTION #define IMAGE_DIRECTORY_ENTRY_SECURITY #define IMAGE_DIRECTORY_ENTRY_BASERELOC 0 // Export Directory 1 // Import Directory 2 // Resource Directory 3 // Exception Directory 4 // Security Directory 5 // Base Relocation Table #define IMAGE_DIRECTORY_ENTRY_DEBUG 6 // Debug Directory // IMAGE_DIRECTORY_ENTRY_COPYRIGHT 7 // (X86 usage) #define IMAGE_DIRECTORY_ENTRY_ARCHITECTURE 7 // Architecture Specific Data #define IMAGE_DIRECTORY_ENTRY_GLOBALPTR #define IMAGE_DIRECTORY_ENTRY_TLS 8 // RVA of GP 9 // TLS Directory #define IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG 10 // Load Configuration Directory #define IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT 11 // Bound Import Directory in headers #define IMAGE_DIRECTORY_ENTRY_IAT 12 // Import Address Table #define IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT 13 // Delay Load Import Descriptors #define IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR 14 // COM Runtime descriptor 이미지디렉토리정보는굉장히중요하다. 경우에따라서섹션이합쳐질수있기때문에통합된섹션에서원하는정보를찾는방법은이미지디렉토리에포함된정보를이용하는방법밖에는없다. 여러모로많이쓰이는인덱스는아래와같은역할을한다. 또로더가섹션을일일이돌아다닐필요없이필요한자기가필요한섹션의정보를없는데유용하다. IMAGE_DIRECTORY_ENTRY_EXPORT : Export 함수들에대한 Export Table 의시작위치와크기를나타냄 IMAGE_DIRECTORY_ENTRY_IMPORT : Import 함수들에대한 Import Table 의시작위치와크기를나타냄 IMAGE_DIRECTORY_ENTRY_RESOURCE : IMAGE_RESOURCE_DIRECTORY 구조체의시작위치를나타냄
10 IMAGE_DIRECTORY_ENTRY_TLS : Thread Local Storage 에대한포인터 IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG : IMAGE_LOAD_CONFIG_DIRECTORY 구조체애대한포인터 IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT : IMAGE_BOUND_IMPORT_DESCRIPTOR 구조체의배열을가리키는포인터 IMAGE_DIRECTORY_ENTRY_IAT : Import Address Table 의시작위치를나타냄 여기까지 IMAGE_NT_HEADER 에대해서알아보았다. 일단지금은특정영역의크기와위치를표시한다는정도만알아놓고다음으로넘어가자. IMAGE_SECTION_HEADER PE 헤더의뒷부분에연속해서 IMAGE_SECTION_HEADER 가위치하게된다. 섹션은뒤에올코드나데이터가위치하는영역에대한구체적인정보를포함하고있으므로굉장히중요하다. 섹션의개수는앞서 IMAGE_FILE_HEADER 에포함된 NumberOfSections 에서얻을수있으며해당개수만큼얻어오면된다. IMAGE_SECTION_HEADER 는 WinNT.h 에아래와같이정의되어있다. #define IMAGE_SIZEOF_SHORT_NAME 8 typedef struct _IMAGE_SECTION_HEADER { BYTE Name[IMAGE_SIZEOF_SHORT_NAME]; union { DWORD PhysicalAddress; DWORD VirtualSize; } Misc; DWORD VirtualAddress; DWORD SizeOfRawData; DWORD PointerToRawData; DWORD PointerToRelocations; DWORD PointerToLinenumbers; WORD NumberOfRelocations; WORD NumberOfLinenumbers; DWORD Characteristics; } IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;
11 중요한항목에대한의미는아래와같다. VirtualSize : 실제코드나데이터영역의크기를표시 VirtualAddress : 메모리에로드되었을때 RVA 를표시 SizeOfRawData : VirtualSize 의크기를 IMAGE_OPTIONAL_HEADER 에포함된 FileAlignment 의단위로올림한크기 PointerToRawData : 실제섹션데이터가파일내에존재하는오프셋. Virtual Address 와같을수도있고다를수도있음 Characteristics : 섹션의속성표시. 자세한것은뒤를참조 위의 VirtualSize 와 SizeOfRawData 는영역의크기를나타낸다는공통점이있으나라운드업된크기와실제크기를나타낸다는차이가있다. 만약섹션의크기를조작했다면위의두부분모두손을봐야한다. Virtual Address 와 Pointer To Raw Data의값이다를수있다고했는데, 왜그럴까? 이것은실행파일의크기를줄이기위해서이다. 만약로드되었을때크기가 0x2000 정도인섹션이있다고하자. 그런데이섹션은메모리의값이초기화될필요도없고값도들어있지않다면? 실행시에영역만할당해주면끝이라면? 이런경우라면굳이이섹션이실행파일에서영역을가지고있을필요가없다. 따라서 Virtual Address는 0 이아닌값을갖겠지만파일내에위치를의미하는 Pointer To Raw Data 의값은 0이된다. 즉실제파일내에는존재하지않는영역이생김으로써 Virtual Address 와 Pointer To Raw Data 의값이달라질수있으며, 기타다른이유로도충분히다를수있다. 따라서실행파일을조작하기위해서는 Pointer To Raw Data 의값을위주로작업을해야한다. Characteristics 는해당영역의속성을나타내는데, WinNT.h 에정의되어있고아주흥미로운값을가지고있다. // IMAGE_SCN_TYPE_REG 0x // Reserved. // IMAGE_SCN_TYPE_DSECT 0x // Reserved. // IMAGE_SCN_TYPE_NOLOAD 0x // Reserved. // IMAGE_SCN_TYPE_GROUP 0x // Reserved. #define IMAGE_SCN_TYPE_NO_PAD 0x // Reserved. // IMAGE_SCN_TYPE_COPY 0x // Reserved. #define IMAGE_SCN_CNT_CODE 0x // Section contains code. #define IMAGE_SCN_CNT_INITIALIZED_DATA #define IMAGE_SCN_CNT_UNINITIALIZED_DATA 0x // Section contains initialized data. 0x // Section contains uninitialized data. #define IMAGE_SCN_LNK_OTHER #define IMAGE_SCN_LNK_INFO 0x // Reserved. 0x // Section contains comments or some other type of information.
12 // IMAGE_SCN_TYPE_OVER 0x // Reserved. #define IMAGE_SCN_LNK_REMOVE #define IMAGE_SCN_LNK_COMDAT 0x // Section contents will not become part of image. 0x // Section contents comdat. // 0x // Reserved. // IMAGE_SCN_MEM_PROTECTED - Obsolete 0x #define IMAGE_SCN_NO_DEFER_SPEC_EXC 0x // Reset speculative exceptions handling bits in the TLB entries for this section. #define IMAGE_SCN_GPREL #define IMAGE_SCN_MEM_FARDATA 0x // Section content can be accessed relative to GP 0x // IMAGE_SCN_MEM_SYSHEAP - Obsolete 0x #define IMAGE_SCN_MEM_PURGEABLE #define IMAGE_SCN_MEM_16BIT #define IMAGE_SCN_MEM_LOCKED #define IMAGE_SCN_MEM_PRELOAD 0x x x x #define IMAGE_SCN_ALIGN_1BYTES 0x // #define IMAGE_SCN_ALIGN_2BYTES 0x // #define IMAGE_SCN_ALIGN_4BYTES 0x // #define IMAGE_SCN_ALIGN_8BYTES 0x // #define IMAGE_SCN_ALIGN_16BYTES 0x // Default alignment if no others are specified. #define IMAGE_SCN_ALIGN_32BYTES 0x // #define IMAGE_SCN_ALIGN_64BYTES 0x // #define IMAGE_SCN_ALIGN_128BYTES 0x // #define IMAGE_SCN_ALIGN_256BYTES 0x // #define IMAGE_SCN_ALIGN_512BYTES 0x00A00000 // #define IMAGE_SCN_ALIGN_1024BYTES 0x00B00000 // #define IMAGE_SCN_ALIGN_2048BYTES 0x00C00000 // #define IMAGE_SCN_ALIGN_4096BYTES 0x00D00000 // #define IMAGE_SCN_ALIGN_8192BYTES 0x00E00000 // // Unused 0x00F00000 #define IMAGE_SCN_ALIGN_MASK 0x00F00000 #define IMAGE_SCN_LNK_NRELOC_OVFL #define IMAGE_SCN_MEM_DISCARDABLE #define IMAGE_SCN_MEM_NOT_CACHED #define IMAGE_SCN_MEM_NOT_PAGED 0x // Section contains extended relocations. 0x // Section can be discarded. 0x // Section is not cachable. 0x // Section is not pageable.
13 #define IMAGE_SCN_MEM_SHARED #define IMAGE_SCN_MEM_EXECUTE #define IMAGE_SCN_MEM_READ #define IMAGE_SCN_MEM_WRITE 0x // Section is shareable. 0x // Section is executable. 0x // Section is readable. 0x // Section is writeable. 중요한플래그별로의미를보면아래와같다. IMAGE_SCN_CNT_CODE : 섹션에코드가포함되어있음. IMAGE_SCN_MEM_EXECUTE 와보통같이지정됨 IMAGE_SCN_CNT_INITIALIZED_DATA : 섹션이초기화된데이터를포함하고있음 IMAGE_SCN_CNT_UNINITIALIZED_DATA : 섹션이초기화되지않은데이터를포함하고있음 IMAGE_SCN_MEM_DISCARDABLE : 섹션이버려질수있음. 한번사용되고필요없는섹션들 (relocation 데이터같은경우 ) 이이속성을가짐 IMAGE_SCN_MEM_SHARED : 섹션이이모듈을사용하는모든프로세스에의해서공유될수있음을의미 IMAGE_SCN_MEM_EXECUTE : 섹션이실행가능함 IMAGE_SCN_MEM_READ : 섹션이읽기가능함 IMAGE_SCN_MEM_WRITE : 섹션이쓰기가능함 위의값을보면섹션에대한속성이미리정의되어있다는것을알수있다. 즉데이터섹션같은경우 IMAGE_SCN_MEM_READ/WRITE 속성을가지고있으리라유추할수있고, 코드가포함된섹션의경우 IMAGE_SCN_MEM_EXECUTE 속성을가지고있다고유추할수있다. 섹션의경우섹션이름을가지고있는데, VC로실행파일을만들면.text,.data,.idata 와같은이름의섹션들이생긴다. 이름그대로코드, 데이터와같은정보가포함된섹션이라는것을알수있는데, 여기서속지말아야할것은섹션이름은권장값이므로섹션이름으로섹션이포함하는내용을판단하면안된다는것이다. 특히파일의크기를줄이는릴리즈옵션같은경우는섹션들이합쳐져서하나의섹션으로존재하는경우도있기때문에섹션이름을이용해서찾아서는안되며 IMAGE_NT_HEADER 에있는 Data Directory 의값을참조해서찾도록해야한다. 2. Import Section Import 영역은 PE 파일이실행될때외부로부터당겨와서사용하는함수들의목록이포함되어있으며, Export 영역은다른모듈이사용할수있게노출해놓은함수들이들어있다. Import 영역은 PE 파일내의특정섹션에자리잡고있으며, IMAGE_OPTIONAL_HEADER 의 DataDirectory 에서위치를찾을수있다. DataDirectory 내의인덱스는 0x01 이며 IMAGE_DIRECTORY_ENTRY_IMPORT 매크로로 WinNT.h 에
14 정의되어있다. Data Directory 가포함하는정보는해당위치의 RVA 값과크기정보이다. RVA 를통해파일내실제 Offset 을찾는알고리즘은다음과같다. DWORD CPEAnalyzer::GetPointerOfRawDataFromRVA( DWORD dwrva ) { int i; DWORD dwvirtualaddress; DWORD dwsize; DWORD dwpointerofrawdata; for( i = 0 ; i < m_pstimagentheader->fileheader.numberofsections; i++ ) { dwvirtualaddress = m_pstimagesectionheader[ i ].VirtualAddress; dwsize = m_pstimagesectionheader[ i ].SizeOfRawData; dwpointerofrawdata = m_pstimagesectionheader[ i ].PointerToRawData; if( ( dwvirtualaddress <= dwrva ) && ( dwrva < ( dwvirtualaddress + dwsize ) ) ) { return ( dwrva - dwvirtualaddress ) + dwpointerofrawdata; } } return 0xFFFFFFFF; } 우선 RVA 를통해해당섹션헤드 (IMAGE_SECTION_HEADER) 를찾는다. 그러면 Offset 은헤더의시작에서찾으려는주소의상대주소 + 헤더의파일내 Offset 이면된다. IMAGE_IMPORT_DESCRIPTOR Import 섹션은 IMAGE_IMPORT_DESCRIPTOR 구조체로시작한다. 해당구조체의배열형태로구성되며마지막은 NULL 구조체로되어있어끝을표시한다. IMAGE_IMPORT_DESCRIPTOR typedef struct _IMAGE_IMPORT_DESCRIPTOR { union { DWORD Characteristics; DWORD OriginalFirstThunk; // 0 for terminating null import descriptor // RVA to original unbound IAT (PIMAGE_THUNK_DATA) }; DWORD TimeDateStamp; // 0 if not bound, // -1 if bound, and real date\time stamp // in IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT (new BIND) // O.W. date/time stamp of DLL bound to (Old BIND)
15 DWORD ForwarderChain; // -1 if no forwarders DWORD Name; DWORD FirstThunk; // RVA to IAT (if bound this IAT has actual addresses) } IMAGE_IMPORT_DESCRIPTOR; typedef IMAGE_IMPORT_DESCRIPTOR UNALIGNED *PIMAGE_IMPORT_DESCRIPTOR; OriginalFirstThunk : IMAGE_THUNK_DATA 구조체 RVA 주소를가리킴. 이때 IMAGE_THUNK_DATA 는 Import 하는함수이름이나서수 (Ordinal) 를포함하는구조체 IMAGE_IMPORT_BY_NAME 을가리킴 Name : Import 한 DLL 의이름을담고있는 ASCII 문자열의 RVA 주소 FirstThunk : OriginalFirstThunk 와같이 IMAGE_THUNK_DATA 구조체의 RVA 주소를가리키지만 PE 파일이메모리에맵핑되고나면 Import 한 DLL 내의함수주소가지고있는 IMAGE_THUNK_DATA 를가리킴 IMAGE_IMPORT_DESCRIPTOR OriginalFirstThunk 및 FirstThunk 가가리키는구조체인 IMAGE_THUNK_DATA 의구조는다음과같다. typedef struct _IMAGE_THUNK_DATA64 { union { ULONGLONG ForwarderString; // PBYTE ULONGLONG Function; // PDWORD ULONGLONG Ordinal; ULONGLONG AddressOfData; // PIMAGE_IMPORT_BY_NAME } u1; } IMAGE_THUNK_DATA64; typedef IMAGE_THUNK_DATA64 * PIMAGE_THUNK_DATA64; typedef struct _IMAGE_THUNK_DATA32 { union { DWORD ForwarderString; // PBYTE DWORD Function; // PDWORD DWORD Ordinal; DWORD AddressOfData; // PIMAGE_IMPORT_BY_NAME } u1; } IMAGE_THUNK_DATA32; typedef IMAGE_THUNK_DATA32 * PIMAGE_THUNK_DATA32; ForwarderString : 실제 Import 한함수가 Forwarding 된함수일경우.
16 Function : FirstThunk 의경우메모리에로딩이되면실제함수주소를가리키는 IMAGE_THUNK_DATA 의 RVA 값을표시한다고했는데, 이때실제 Function 의주소가포함된부분 Ordinal : Import 를함수명이아니라서수 (Ordinal) 로한경우. 0x 값으로마스크하면최상위비트를구할수있는데이것이 1 로셋팅된경우서수로판단 AddressOfData : 실제 Import 된함수의이름이포함된 IMAGE_IMPORT_BY_NAME 구조체에대한 RVA 주소포함 여기서 ForwarderString 에대해서잠시알아보겠다. 이것은 import 할 dll 에서해당함수를또다시다른 dll 로포워딩할경우이변수가사용된다. 예를들어윈도우 NT, 윈도우 2000, 윈도우톄의경우 KERNEL32 의 HeapAlloc 함수는 NTDLL 의 RtlAllocHeap 로포워드되어있다. 그렇다면 ( 밑의 Export 섹션에서보겠지만 ) Kernel32 의 Export 섹션부분에서해당함수 AddressOfFunction 는 NTDLL.RtlAllocHeap 스트링심볼의 RVA 주소로셋팅되어있다. 참고로 Export 섹션에서 AddressOfFunction 이가르키는곳이함수의주소인지위와같이심볼의주소인지를판별하는방법은만약주소가 export 섹션내부를가르키고있다면이는심볼의주소이다. IMAGE_IMPORT_BY_NAME 이제살펴볼마지막은실제함수이름을포함하는 IMAGE_IMPORT_BY_NAME 구조체이다. typedef struct _IMAGE_IMPORT_BY_NAME { WORD Hint; BYTE Name[1]; } IMAGE_IMPORT_BY_NAME, *PIMAGE_IMPORT_BY_NAME; Hint : Import 시서수를사용하지않으면임의로설정되는 0 base 의숫자, Import 한함수가추가될때마다 1 씩증가. Name : NULL 로끝나는 Ascii 문자열. 실제함수이름을포함 아래는전체적인 Import 섹션의그림이다.
17 3. Export 섹션 Export 영역은내가다른프로그램을위한기능을제공하기위해노출한함수목록이들어있다. Import 영역과비슷한방법으로 IMAGE_NT_HEADER 의 Data Directory 를찾아서 0 번째인덱스 (IMAGE_DIRECTORY_ENTRY_EXPORT) 를찾으면 Export 섹션을구할수있다. 역시 RVA 를파일내의오프셋 (Pointer Of Raw Data) 로바꾸는작업이필요하다. IMAGE_EXPORT_DIRECTORY Export 섹션의첫번째는 IMAGE_EXPORT_DIRECTORY 구조체로되어있다. typedef struct _IMAGE_EXPORT_DIRECTORY { DWORD Characteristics; DWORD TimeDateStamp; WORD MajorVersion; WORD MinorVersion; DWORD Name; DWORD Base; DWORD NumberOfFunctions; DWORD NumberOfNames;
18 DWORD AddressOfFunctions; DWORD AddressOfNames; // RVA from base of image // RVA from base of image DWORD AddressOfNameOrdinals; // RVA from base of image } IMAGE_EXPORT_DIRECTORY, *PIMAGE_EXPORT_DIRECTORY; Name : DLL 의이름을나타내는 ASCII 문자열. RVA 값 Base : 아래에오는 Address Of Name Ordinals 의시작서수. AddressOfNameOridianals 의값은 Base 의값을뺀형태로저장. NumberOfFunctions : AddressOfFunctions 가가리키는 RVA 배열의수 NumberOfNames : AddressOfNames 가가리키는 RVA 배열의수 AddressOfFunctions : 함수의실제주소가담긴 RVA 값의배열. 배열의인덱스는아래 AddressOfNameOrdinals 에서구한값이거나서수에서 Base 값을뺀값 AddressOfNames : 함수의실제 Ascii 문자열이담긴 RVA 위치값의배열 AddressOfNameOrdinals : 함수의서수 (Ordinal) 값의배열위치. RVA 값이며배열은 WORD 크기. 실제해당함수의서수는 AddressOfNameOrdinals 에서 WORD 의값을얻은것에 Base 의값을더해야함 Import 섹션보다비교적직관적이고간단한구조로되어있음을알수있다. 이것을그림으로보면아래와같다. < 주의 : 여기서서수는함수순서에따라 1,2,3 순서로순차적으로할당되었다고, 함수순서라고생각해서는안된다. 이것은어디까지나우연일뿐이다. 실제함수중에서는같은이름의함수도있으므로서수는이것들을구별해주는고유의숫자이다. 실제로랜덤으로숫자가할당될수도있다.> 4. Relocation 섹션일단들어가기전에재배치 (Relocation) 이무엇인지알아보자. 재배치는코드에특정값을더해줘서다른메모리주소에서실행가능하게해주는것을말한다. 말그대로코드를다시배치하는과정인데, 왜이런걸해야하는걸까?
19 EXE 파일의경우윈도우에서는굳이재배치를할필요가없다. 왜냐하면로더가프로그램을로딩할때제일먼저 EXE 파일을위한메모리를할당해주기때문이다. IMAGE_OPTIONAL_HEADER 에 ImageBase 라는필드를기억할지모르겠다. 이것이바로 PE 파일이로딩될 Base 주소를의미한다. EXE 파일의경우가장먼저메모리를할당받으므로 ImageBase( 일반적으로 0x400000) 에로딩가능하다. DLL 의경우는어떨까? 실행파일이사용하는 DLL 이어디한두개일까? 여러개가로딩이되면당연히그중에몇몇 DLL 은 ImageBase 에로딩하지못하는경우도발생한다. 이때어쩔수없이다른메모리주소에서실행해야하는데이과정을재배치과정이라고하고재배치섹션의정보가사용되는것이다. 재배치정보는다른정보와마찬가지로 IMAGE_OPTIONAL_HEADER 의 Data Directory 에서찾을수있고 0x05 인덱스 (IMAGE_DIRECTORY_ENTRY_BASERELOC) 에서그 RVA 를구할수있다. IMAGE_BASE_RELOCATION 재배치섹션의처음시작은 IMAGE_BASE_RELOCATION 구조체로시작한다. typedef struct _IMAGE_BASE_RELOCATION { DWORD VirtualAddress; DWORD SizeOfBlock; // WORD TypeOffset[1]; } IMAGE_BASE_RELOCATION; typedef IMAGE_BASE_RELOCATION UNALIGNED * PIMAGE_BASE_RELOCATION; VirtualAddress : 재배치가수행될메모리상의 RVA. SizeOfBlock : 재배치영역의크기. IMAGE_BASE_RELOCATION 자신크기를포함한전체크기 Export 섹션보다더간단한구조를가진다. 이후에보면알겠지만재배치데이터같은경우 IMAGE_BASE_RELOCATION 구조체다음에 n 개의 WORD 형태로반복해서나타나고그중하위 0xFFF는 Offset 으로사용된다. 따라서재배치할영역이크고넓은경우 IMAGE_BASE_RELOCATION + n 개의 WORD 의형태가반복되어서나타나게된다. 마지막은역시데이터가 0 인가를이용하여판단한다. 그럼 IMAGE_BASE_RELOCATION 이후에존재하는 n 개의 WORD 는어떤식으로구성될까? 상위 4Bit 는재배치 Type 으로사용되며하위 12Bit 는 Offset 으로사용된다. 따라서코드를작성한다면아래와같이쓸수있을것이다. Type 과 Offset 은아래와같은의미를가진다.
20 Type : 재배치정보의타입. 사실거의의미가없고 0 일경우패딩데이터 Offset : 실제코드가재배치될영역. VirtualAddress 와더해져서수정해야할 RVA 값이됨 위에서보듯실제코드가수정되어야하는위치는 IMAGE_BASE_RELOCATION 의 VirtualAddress 와 Offset 을더한값이된다. 정말간단하다. 여기서알아두어야할점은 Offset 이최대 0xFFF 라는것이다. 즉 4Kbyte 까지커버가가능하므로 4Kbyte 이상이되면다시 IMAGE_BASE_RELOCATION 을만들어서접근해야한다. 재배치를수행하는과정은아주간단하다. 아래의순서대로수행하면된다. 1. 재배치가수행되야할곳의 DWORD 값을읽는다. 2. 읽은 DWORD 값에서현재 IMAGE_OPTIONAL_HEADER 의 ImageBase 를뺀다. 빼는순간코드는 0 을기본 Base 주소로하는코드로변한다. 3. 뺀값에실제로모듈이로딩된메모리주소를더한다. 더하는순간코드는실제모듈이로딩된위치에서정상적으로수행가능한코드로변한다. 단순한뺄셈과덧셈만으로재배치가가능하다. 5. Resource 섹션 PE 포멧내에서 resource 의구조는하드디스크의폴더구조와비슷한다. 폴더구조와똑같이항상 root 폴더가하나존재하고그밑으로서브폴더가존재한다. 그리고그런식으로내려다가보면맨마지막에는바로리소스데이터를찾을수있게된다. 이러한폴더구조체는다음과같다. IMAGE_RESOURCE_DIRECTORY typedef struct _IMAGE_RESOURCE_DIRECTORY { DWORD Characteristics; DWORD TimeDateStamp; WORD MajorVersion; WORD MinorVersion; WORD NumberOfNamedEntries; WORD NumberOfIdEntries; // IMAGE_RESOURCE_DIRECTORY_ENTRY DirectoryEntries[]; } IMAGE_RESOURCE_DIRECTORY, *PIMAGE_RESOURCE_DIRECTORY;
21 Characteristics : 실제로는리소스에대한특성플래그를가지고있을수있지만대부분항상 0 이다. NumberOfNamedEntries : 이름을구별자로사용하는요소들의개수 NumberOfIdEntries : 정수 ID 를구별자로사용하는요소들의개수 DirectoryEntires[] : 배열의개수는 NumberOfNamedEntires 와 NumberOfIdEntires 의합이다. 폴더의하위폴더를가르키거나실제리소스데이터를가르킨다. 실제로이멤버는 IMAGE_RESOURCE_DIRECTORY 의멤버는아니지만이구조체뒤에곧바로위치해있다. IMAGE_RESOURCE_DIRECTORY_ENTRY typedef struct _IMAGE_RESOURCE_DIRECTORY_ENTRY { union { struct { DWORD NameOffset:31; DWORD NameIsString:1; }; DWORD Name; WORD Id; }; union { DWORD OffsetToData; struct { DWORD OffsetToDirectory:31; DWORD DataIsDirectory:1; }; }; } IMAGE_RESOURCE_DIRECTORY_ENTRY, *PIMAGE_RESOURCE_DIRECTORY_ENTRY; Name : 만약폴더가이름으로구별될어질경우사용된다. 최상위 1 비트가 1 로셋팅되어있고, 나머지 31 비트는실제스트링문자열을가르키는오프셋이된다. 오프셋은이엔트리가속한 IMAGE_RESOURCE_DIRECTORY 의시작위치에서부터의오프셋이다. Id : 만약폴더가정수로구별질경우사용된다. 최상위 1 비트가 0 으로셋팅되고, 하위 16 비트가정수로사용된다.
22 OffsetToData : 만약구별자 (ID) 폴더 ( 아래설명 ) 일경우, 최상위비트는 0 으로셋팅되고, 나머지는오프셋으로실제리소스데이터를가르키게된다. 만약다른또다른폴더를가르킬경우, 최상외비트는 1 이고나머지오프셋은해당하위폴더를가르킨다. IMAGE_RESOURCE_DIRECTORY_STRING typedef struct _IMAGE_RESOURCE_DIRECTORY_STRING { WORD Length; CHAR NameString[ 1 ]; } IMAGE_RESOURCE_DIRECTORY_STRING, *PIMAGE_RESOURCE_DIRECTORY_STRING; 위구조체는폴더가이름으로구별될경우쓰이는스트링문자열구조체이다. 따로설명안해도이해할거라믿는다. 보통이러한 Resource 섹션구조에서는실제리소스데이터에접근하기위해서최소한 3 개의폴더구조를거쳐야한다. 첫번째는 Resource 섹션처음에찾을수있는 root 폴더이다. 다음이폴더의하위폴더로 PE 파일이가지고있는리소스를분류하는폴더들이있을수있다. 예를들어만약 PE 파일이몇몇의대화상자들와스트링테이블들과메뉴들을가지고있다면 3 개의하위폴더가있을수있겠다. 그리고이폴더밑에실제리소스데이터를가르키는구별자 (ID) 폴더가있을수있다. 각각의리소스는이러한구별자 (ID) 폴더와 1 대 1 대응이된다. 예를들어 3 개의대화상자가있다면대화상자폴더 (2 번째계층 ) 는 3 개의 ID 폴더를가지고있을것이다. 이러한 ID 폴더는각각의리소스를구별해줄문자열이름 ( MyDialog 같은것 ) 이나정수 ID 를가지고있을것이다. 아래그림은이때까지의내요을설명해준다.
23 6. TLS(Thread Local Storage) 섹션 섹션 TLS(Thread Local Storage) 는스레드별로고유한저장공간을가질수있는방법이다. 각각의스레드는고유한스택을갖기때문에스택변수 ( 지역변수 ) 는스레드별로고유하다. 예를들어서각각의스레드가같은함수를실행한다고해도그함수에서정의된지역변수는실제로서로다른메모리공간에위치한다는의미한다. 그러나정적변수나전역변수의경우에는프로세스내의모든스레드에의해서공유된다. TLS 를사용하는방법은 2 가지가있다. 한가지는 API 에서지원해주는방식을사용하는것이고, 다른하는 compiler 에서지원하는방식을사용하는것이다. 다들알겠지만 compiler 에서지원하는방식을 storage-class modifier 라하는데이방식을이용해야만 PE 포멧내에 TLS 섹셕이만들어진다. API 는그대로함수코드를이용해서스레드고유의공간을할당하는방식이다. compiler 에서 TLS 를사용하는방법은다음과같다. _declspec( thread ) int nwindows; 위와같이선언한경우변수 nwindows 는스레드고유변수가된다.
24 로더는 PE 파일로드시 DataDirectory 의 IMAGE_DIRECTORY_ENTRY_TLS 엔트리를검사한후, 크기가 0 이아니면 TLS 섹션의존재로간주하고힙에서스레드고유공간을위한메모리를할당하고 TLS 섹션의값들로초기화시킨다. TLS 섹션은다음과같은하나의 IMAGE_TLS_DIRECTORY 로이루어져있다. typedef struct _IMAGE_TLS_DIRECTORY64 { ULONGLONG StartAddressOfRawData; ULONGLONG EndAddressOfRawData; ULONGLONG AddressOfIndex; // PDWORD ULONGLONG AddressOfCallBacks; // PIMAGE_TLS_CALLBACK *; DWORD SizeOfZeroFill; DWORD Characteristics; } IMAGE_TLS_DIRECTORY64; typedef IMAGE_TLS_DIRECTORY64 * PIMAGE_TLS_DIRECTORY64; typedef struct _IMAGE_TLS_DIRECTORY32 { DWORD StartAddressOfRawData; DWORD EndAddressOfRawData; DWORD AddressOfIndex; // PDWORD DWORD AddressOfCallBacks; // PIMAGE_TLS_CALLBACK * DWORD SizeOfZeroFill; DWORD Characteristics; } IMAGE_TLS_DIRECTORY32; typedef IMAGE_TLS_DIRECTORY32 * PIMAGE_TLS_DIRECTORY32; StartAddressOfRawData : 새로운스레드의 TLS 공간을채우기위한데이터의시작번지. EndAddressOfRawData : 새로운스레드의 TLS 공간을채우기위한데이터의마지막번지. AddressOfIndex : 실행파일이로드되고 TLS 섹션이존재할경우로더는 TLS 핸들을이변수에할당한다. 스레드고유데이터를찾기위해이핸들이사용된다. AddressOfCallBacks : PIMAGE_TLS_CALLBACK 함수포인터의배열이다. 스레드가생성되고파괴될때함수들이차례차례호출된다. 배열의마지막은 0 으로되어있다. 보통비주얼 C++ 로생성된실행파일은이부분이비어있다. SizeOfZeroFill : 위의 TLS 범위뒤에 0 으로초기화시킬바이트크기. Characteristics : 예약된멤버.
25 여기서주소는 RVA 가아니라가상주소라는점을주의해야한다. 만약실행파일이원하는위치에로드를실패하면가상주소는수정될것이다. 그리고 IMAGE_TLS_DIRECTORY 구조체자체는.tls 섹션에있는것이아니라.rdata 섹션에위치한다.
목 차 1. 개요 2. PE(Portable Executable) 이란? 3. IMAGE_DOS_HEADER 4. IMAGE_NT_HEADER 1) IMAGE_FILE_HEADER 2) IMAGE_OPTIONAL_HEADER 3) IMAGE_DATA_DIRECTORY
작성자 : 한서대학교 H.I.S.L 동아리진선호 sunho104@msn.com 본보고서의전부나일부를인용시반드시 [ 자료 : 한서대학교정보보호동아리 (H.I.S.L)] 를명시하여주시기바랍니다. - 1 - 목 차 1. 개요 2. PE(Portable Executable) 이란? 3. IMAGE_DOS_HEADER 4. IMAGE_NT_HEADER 1) IMAGE_FILE_HEADER
More information<4D F736F F D20B0ADB5BFC7F65FB1E2BCFAB9AEBCAD5F4645B1B8C1B620B1E2BCFAB9AEBCAD5F66726F6D E6B5F66696E F2E646F63>
기술문서 08.10.24. 작성 PE 구조분석 Windows 계열 OS 의파일구성 (PE: Portable Executable) 작성자 : 동명대학교 THINK 강동현 (cari2052@gmail.com) 0. 시작하면서 -------------------------------------------------------------------------- p.02
More informationDeok9_PE Structure
PE Structure CodeEngn Co-Administrator!!! and Team Sur3x5F Member Nick : Deok9 E-mail : DDeok9@gmail.com HomePage : http://deok9.sur3x5f.org Twitter :@DDeok9 1. PE > 1) PE? 2) PE 3) PE Utility
More information연재순서 실행파읷속으로 필자소개 싞영짂 웰비아닶컴에서보안프로그래머로읷하고있다. 시스템프로그래밍에관심이많으며다수의 PC 보안프로그램개발에참여했다. 현재데브피아 Visual C++ 섹션시
윈도우프로그래머를위한 PE 포맷가이드 실행파읷속으로 목차 목차... 1 License... 1 소개... 1 연재가이드... 1 연재순서... 2 필자소개... 2 필자메모... 2 Introduction... 2 PE 포맷의젂체적읶구조... 3 DOS 헤더및스텁코드... 5 NT 헤더... 5 섹션헤더... 7 RVA와파읷오프셋... 10 익스포트정보...
More information< C6520B1B8C1B6BFCD20BEF0C6D0C5B7C0C720BFF8B8AE2E687770>
PE FILE 구조와 언패킹의원리 지선호 kissmefox@gmail.com - 1 - < PE FILE 이란 > -win32 운영체제에서이용되는파일형식 ( 현재사용되는대부분의 OS) -Portable executable, : exe, dll, ocx 이식가능한실행파일형식 - 윈도우의바이너리를분석하기위한가장기본이되는지식 : unpacking, API Hooking,
More informationWin32 실행파일 (PE) 의구조 Windows 운영체제실행파일의구조에대하여알아보자 Kali-KM
Win32 실행파일 (PE) 의구조 Windows 운영체제실행파일의구조에대하여알아보자. 2016.05.10 Kali-KM 2 목차 1. 개요... 5 2. PE 파일의전체구조... 6 3. PE 분석을위한개념정리... 8 (1) RVA (Relative Virtual Address)... 8 (2) Section... 8 (3) VAS (Virtual Address
More information목차 ⓵ VA and RVA 4p. ⓶ RVA to RAW 5p. ⓷ PE 7p. PE의개념. PE Header가생기는과정. PE의필요성. ⓷ DOS Header 8p. e_magic e_lfanew ⓸ DOS Stub 9p. 1
PE 구조 keybreak4855@tistory.com http://keybreak.tistory.com 목차 ⓵ VA and RVA 4p. ⓶ RVA to RAW 5p. ⓷ PE 7p. PE의개념. PE Header가생기는과정. PE의필요성. ⓷ DOS Header 8p. e_magic e_lfanew ⓸ DOS Stub 9p. 1 ⓹ NT Header 10p.
More informationPowerPoint 프레젠테이션
System Software Experiment 1 Lecture 5 - Array Spring 2019 Hwansoo Han (hhan@skku.edu) Advanced Research on Compilers and Systems, ARCS LAB Sungkyunkwan University http://arcs.skku.edu/ 1 배열 (Array) 동일한타입의데이터가여러개저장되어있는저장장소
More information악성코드분석을위한 실행압축 해제기법 1. 개요 이제목을보고 실행압축이뭐야? 하는이도있을테고, 실행하면자동으로압축이풀리는 ZIP 파일과비슷한거아냐? 하고떠올리는이도있을것이다. 그러나여기서설명하는실행압축은그대상이다르다. 흔히말하는 ZIP, RAR처럼데이터들을하나로묶어놓는압
악성코드 분석을 위한 실행압축 해제 기법 NCSC-TR04025 악성코드분석을위한 실행압축 해제기법 1. 개요 이제목을보고 실행압축이뭐야? 하는이도있을테고, 실행하면자동으로압축이풀리는 ZIP 파일과비슷한거아냐? 하고떠올리는이도있을것이다. 그러나여기서설명하는실행압축은그대상이다르다. 흔히말하는 ZIP, RAR처럼데이터들을하나로묶어놓는압축과는달리그대상이 notepad.exe처럼실행할수있는파일을압축한것으로,
More informationSRC PLUS 제어기 MANUAL
,,,, DE FIN E I N T R E A L L O C E N D SU B E N D S U B M O TIO
More information슬라이드 1
-Part3- 제 4 장동적메모리할당과가변인 자 학습목차 4.1 동적메모리할당 4.1 동적메모리할당 4.1 동적메모리할당 배울내용 1 프로세스의메모리공간 2 동적메모리할당의필요성 4.1 동적메모리할당 (1/6) 프로세스의메모리구조 코드영역 : 프로그램실행코드, 함수들이저장되는영역 스택영역 : 매개변수, 지역변수, 중괄호 ( 블록 ) 내부에정의된변수들이저장되는영역
More informationPoison 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 informationPowerPoint Presentation
FORENSICINSIGHT SEMINAR SQLite Recovery zurum herosdfrc@google.co.kr Contents 1. SQLite! 2. SQLite 구조 3. 레코드의삭제 4. 삭제된영역추적 5. 레코드복원기법 forensicinsight.org Page 2 / 22 SQLite! - What is.. - and why? forensicinsight.org
More information<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 informationMicrosoft PowerPoint - o8.pptx
메모리보호 (Memory Protection) 메모리보호를위해 page table entry에 protection bit와 valid bit 추가 Protection bits read-write / read-only / executable-only 정의 page 단위의 memory protection 제공 Valid bit (or valid-invalid bit)
More informationMicrosoft Word - PE Infection ? How to Inject a dll.doc
Black- out Frenzy [ B] (F) Security Researcher Center B0Frenzy.freehostia.com PE Infection How to Inject a dll www.mihanit.net Thank you to my friends who help me in this research (K053,Heli, L U C I F
More information디지털영상처리3
비트맵개요 BMP 파일의이해실제 BMP 파일의분석 BMP 파일을화면에출력 } 비트맵 (bitmap) 윈도우즈에서영상을표현하기위해사용되는윈도우즈 GDI(Graphic Device Interface) 오브젝트의하나 } 벡터그래픽 (vector graphics) 점, 선, 면등의기본적인그리기도구를이용하여그림을그리는방식 } 윈도우즈 GDI(Graphic Device
More informationMicrosoft PowerPoint - ch07 - 포인터 pm0415
2015-1 프로그래밍언어 7. 포인터 (Pointer), 동적메모리할당 2015 년 4 월 4 일 교수김영탁 영남대학교공과대학정보통신공학과 (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : ytkim@yu.ac.kr) Outline 포인터 (pointer) 란? 간접참조연산자
More information[ 마이크로프로세서 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 informationchap 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 프로그래밍프로젝트 Chap 13. 포인터와배열! 함께이해하기 2013.10.02. 오병우 컴퓨터공학과 13-1 포인터와배열의관계 Programming in C, 정재은저, 사이텍미디어. 9 장참조 ( 교재의 13-1 은읽지말것 ) 배열이름의정체 배열이름은 Compile 시의 Symbol 로서첫번째요소의주소값을나타낸다. Symbol 로서컴파일시에만유효함 실행시에는메모리에잡히지않음
More informationDeok9_Exploit Technique
Exploit Technique CodeEngn Co-Administrator!!! and Team Sur3x5F Member Nick : Deok9 E-mail : DDeok9@gmail.com HomePage : http://deok9.sur3x5f.org Twitter :@DDeok9 > 1. Shell Code 2. Security
More information설계란 무엇인가?
금오공과대학교 C++ 프로그래밍 jhhwang@kumoh.ac.kr 컴퓨터공학과 황준하 5 강. 배열, 포인터, 참조목차 배열 포인터 C++ 메모리구조 주소연산자 포인터 포인터연산 배열과포인터 메모리동적할당 문자열 참조 1 /20 5 강. 배열, 포인터, 참조배열 배열 같은타입의변수여러개를하나의변수명으로처리 int Ary[10]; 총 10 개의변수 : Ary[0]~Ary[9]
More informationBMP 파일 처리
BMP 파일처리 김성영교수 금오공과대학교 컴퓨터공학과 학습내용 영상반전프로그램제작 2 Inverting images out = 255 - in 3 /* 이프로그램은 8bit gray-scale 영상을입력으로사용하여반전한후동일포맷의영상으로저장한다. */ #include #include #define WIDTHBYTES(bytes)
More informationMicrosoft 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<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 information11장 포인터
누구나즐기는 C 언어콘서트 제 9 장포인터 이번장에서학습할내용 포인터이란? 변수의주소 포인터의선언 간접참조연산자 포인터연산 포인터와배열 포인터와함수 이번장에서는포인터의기초적인지식을학습한다. 포인터란? 포인터 (pointer): 주소를가지고있는변수 메모리의구조 변수는메모리에저장된다. 메모리는바이트단위로액세스된다. 첫번째바이트의주소는 0, 두번째바이트는 1, 변수와메모리
More informationMicrosoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt
변수와상수 1 변수란무엇인가? 변수 : 정보 (data) 를저장하는컴퓨터내의특정위치 ( 임시저장공간 ) 메모리, register 메모리주소 101 번지 102 번지 변수의크기에따라 주로 byte 단위 메모리 2 기본적인변수형및변수의크기 변수의크기 해당컴퓨터에서는항상일정 컴퓨터마다다를수있음 short
More informationhlogin2
0x02. Stack Corruption off-limit Kernel Stack libc Heap BSS Data Code off-limit Kernel Kernel : OS Stack libc Heap BSS Data Code Stack : libc : Heap : BSS, Data : bss Code : off-limit Kernel Kernel : OS
More informationMicrosoft 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 informationMicrosoft PowerPoint - chap06-2pointer.ppt
2010-1 학기프로그래밍입문 (1) chapter 06-2 참고자료 포인터 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 포인터의정의와사용 변수를선언하는것은메모리에기억공간을할당하는것이며할당된이후에는변수명으로그기억공간을사용한다. 할당된기억공간을사용하는방법에는변수명외에메모리의실제주소값을사용하는것이다.
More informationPowerPoint 프레젠테이션
Web server porting 2 Jo, Heeseung Web 을이용한 LED 제어 Web 을이용한 LED 제어프로그램 web 에서데이터를전송받아타겟보드의 LED 를조작하는프로그램을작성하기위해다음과같은소스파일을생성 2 Web 을이용한 LED 제어 LED 제어프로그램작성 8bitled.html 파일을작성 root@ubuntu:/working/web# vi
More informationPowerPoint 프레젠테이션
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 informationA 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 informationMicrosoft Word - 과목1.Reverse Engineering.doc
Table of Content Module 1 RCE 란?...1 1-1. RCE 란?...2 1-2. RCE 관련법규...4 1-3. RCE 응용분야...6 Module 2 RCE 기초...9 2-1. CPU 동작방식...10 2-2. CPU 레지스터...12 2-3. Assembly...17 2-4. STACK 구조...21 2-5. 함수호출규약 (Calling
More informationA 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<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>
리눅스 오류처리하기 2007. 11. 28 안효창 라이브러리함수의오류번호얻기 errno 변수기능오류번호를저장한다. 기본형 extern int errno; 헤더파일 라이브러리함수호출에실패했을때함수예 정수값을반환하는함수 -1 반환 open 함수 포인터를반환하는함수 NULL 반환 fopen 함수 2 유닉스 / 리눅스 라이브러리함수의오류번호얻기 19-1
More information금오공대 컴퓨터공학전공 강의자료
C 프로그래밍프로젝트 Chap 14. 포인터와함수에대한이해 2013.10.09. 오병우 컴퓨터공학과 14-1 함수의인자로배열전달 기본적인인자의전달방식 값의복사에의한전달 val 10 a 10 11 Department of Computer Engineering 2 14-1 함수의인자로배열전달 배열의함수인자전달방식 배열이름 ( 배열주소, 포인터 ) 에의한전달 #include
More informationuntitled
시스템소프트웨어 : 운영체제, 컴파일러, 어셈블러, 링커, 로더, 프로그래밍도구등 소프트웨어 응용소프트웨어 : 워드프로세서, 스프레드쉬트, 그래픽프로그램, 미디어재생기등 1 n ( x + x +... + ) 1 2 x n 00001111 10111111 01000101 11111000 00001111 10111111 01001101 11111000
More informationMicrosoft Word - FunctionCall
Function all Mechanism /* Simple Program */ #define get_int() IN KEYOARD #define put_int(val) LD A val \ OUT MONITOR int add_two(int a, int b) { int tmp; tmp = a+b; return tmp; } local auto variable stack
More information슬라이드 1
BMP 파일구조 김성영교수 금오공과대학교 컴퓨터공학부 학습목표 BMP 파일의구조및그특징을설명할수있다. 파일헤더및비트맵정보헤더의주요필드를구분하고그역할을설명할수있다. C언어를사용하여 BMP 파일을처리할수있다. 2 BMP 파일구조 File Header (BITMAPFILEHEADER) Bitmap Info. Header (BITMAPINFOHEADER) Headers
More informationC# 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 informationKNK_C_05_Pointers_Arrays_structures_summary_v02
Pointers and Arrays Structures adopted from KNK C Programming : A Modern Approach 요약 2 Pointers and Arrays 3 배열의주소 #include int main(){ int c[] = {1, 2, 3, 4}; printf("c\t%p\n", c); printf("&c\t%p\n",
More informationadfasdfasfdasfasfadf
C 4.5 Source code Pt.3 ISL / 강한솔 2019-04-10 Index Tree structure Build.h Tree.h St-thresh.h 2 Tree structure *Concpets : Node, Branch, Leaf, Subtree, Attribute, Attribute Value, Class Play, Don't Play.
More information(Asynchronous Mode) ( 1, 5~8, 1~2) & (Parity) 1 ; * S erial Port (BIOS INT 14H) - 1 -
(Asynchronous Mode) - - - ( 1, 5~8, 1~2) & (Parity) 1 ; * S erial Port (BIOS INT 14H) - 1 - UART (Univ ers al As y nchronous Receiver / T rans mitter) 8250A 8250A { COM1(3F8H). - Line Control Register
More informationPowerPoint 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 informationMicrosoft 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설계란 무엇인가?
금오공과대학교 C++ 프로그래밍 jhhwang@kumoh.ac.kr 컴퓨터공학과 황준하 6 강. 함수와배열, 포인터, 참조목차 함수와포인터 주소값의매개변수전달 주소의반환 함수와배열 배열의매개변수전달 함수와참조 참조에의한매개변수전달 참조의반환 프로그래밍연습 1 /15 6 강. 함수와배열, 포인터, 참조함수와포인터 C++ 매개변수전달방법 값에의한전달 : 변수값,
More informationMicrosoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100
2015-1 프로그래밍언어 9. 연결형리스트, Stack, Queue 2015 년 5 월 4 일 교수김영탁 영남대학교공과대학정보통신공학과 (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : ytkim@yu.ac.kr) 연결리스트 (Linked List) 연결리스트연산 Stack
More informationMicrosoft Word - ASG AT90CAN128 모듈.doc
ASG AT90128 Project 3 rd Team Author Cho Chang yeon Date 2006-07-31 Contents 1 Introduction... 3 2 Schematic Revision... 4 3 Library... 5 3.1 1: 1 Communication... 5 iprinceps - 2-2006/07/31
More informationPowerPoint 프레젠테이션
7-Segment Device Control - Device driver Jo, Heeseung HBE-SM5-S4210 의 M3 Module 에는 6 자리를가지는 7-Segment 모듈이아래그림처럼실장 6 Digit 7-Segment 2 6-Digit 7-Segment LED controller 16비트로구성된 2개의레지스터에의해제어 SEG_Sel_Reg(Segment
More informationMicrosoft PowerPoint - a10.ppt [호환 모드]
Structure Chapter 10: Structures t and Macros Structure 관련된변수들의그룹으로이루어진자료구조 template, pattern field structure를구성하는변수 (cf) C언어의 struct 프로그램의 structure 접근 entire structure 또는 individual fields Structure는
More information11장 포인터
Dynamic Memory and Linked List 1 동적할당메모리의개념 프로그램이메모리를할당받는방법 정적 (static) 동적 (dynamic) 정적메모리할당 프로그램이시작되기전에미리정해진크기의메모리를할당받는것 메모리의크기는프로그램이시작하기전에결정 int i, j; int buffer[80]; char name[] = data structure"; 처음에결정된크기보다더큰입력이들어온다면처리하지못함
More informationLab 3. 실습문제 (Single linked list)_해답.hwp
Lab 3. Singly-linked list 의구현 실험실습일시 : 2009. 3. 30. 담당교수 : 정진우 담당조교 : 곽문상 보고서제출기한 : 2009. 4. 5. 학과 : 학번 : 성명 : 실습과제목적 : 이론시간에배운 Singly-linked list를실제로구현할수있다. 실습과제내용 : 주어진소스를이용해 Singly-linked list의각함수를구현한다.
More informationIntroduce
Windows Hook Jerald Lee Contact Me : lucid7@paran.com 본문서는저자가 Windows Hook을공부하면서알게된것들을정리할목적으로작성되었습니다. 본인이 Windows System에대해아는것의거의없기때문에기존에존재하는문서들을짜집기한형태의문서로밖에만들수가없었습니다. 문서를만들면서참고한책, 관련문서등이너무많아일일이다기술하지못한점에대해원문저자들에게매우죄송스럽게생각합니다.
More informationPowerPoint 프레젠테이션
7-Segment Device Control - Device driver Jo, Heeseung HBE-SM5-S4210 의 M3 Module 에는 6 자리를가지는 7-Segment 모듈이아래그림처럼실장 6 Digit 7-Segment 2 6-Digit 7-Segment LED Controller 16비트로구성된 2개의레지스터에의해제어 SEG_Sel_Reg(Segment
More information[ 네트워크 1] 3 주차 1 차시. IPv4 주소클래스 3 주차 1 차시 IPv4 주소클래스 학습목표 1. IP 헤더필드의구성을파악하고요약하여설명할수있다. 2. Subnet ID 및 Subnet Mask 를설명할수있고, 각클래스의사용가능한호스트수와사설 IP 주소및네트
3 주차 1 차시 IPv4 주소클래스 학습목표 1. IP 헤더필드의구성을파악하고요약하여설명할수있다. 2. Subnet ID 및 Subnet Mask 를설명할수있고, 각클래스의사용가능한호스트수와사설 IP 주소및네트워크주소와 브로드캐스트주소를설명할수있다. 학습내용 1 : IP 헤더필드구성 1. Network Layer Fields 2. IP 헤더필드의구성 1)
More information슬라이드 1
/ 유닉스시스템개요 / 파일 / 프로세스 01 File Descriptor file file descriptor file type unix 에서의파일은단지바이트들의나열임 operating system 은파일에어떤포맷도부과하지않음 파일의내용은바이트단위로주소를줄수있음 file descriptor 는 0 이나양수임 file 은 open 이나 creat 로 file
More information컴파일러
YACC 응용예 Desktop Calculator 7/23 Lex 입력 수식문법을위한 lex 입력 : calc.l %{ #include calc.tab.h" %} %% [0-9]+ return(number) [ \t] \n return(0) \+ return('+') \* return('*'). { printf("'%c': illegal character\n",
More informationPowerPoint Presentation
자바프로그래밍 1 배열 손시운 ssw5176@kangwon.ac.kr 배열이필요한이유 예를들어서학생이 10 명이있고성적의평균을계산한다고가정하자. 학생 이 10 명이므로 10 개의변수가필요하다. int s0, s1, s2, s3, s4, s5, s6, s7, s8, s9; 하지만만약학생이 100 명이라면어떻게해야하는가? int s0, s1, s2, s3, s4,
More informationPowerPoint 프레젠테이션
7-SEGMENT DEVICE CONTROL - DEVICE DRIVER Jo, Heeseung 디바이스드라이버구현 : 7-SEGMENT HBE-SM5-S4210 의 M3 Module 에는 6 자리를가지는 7-Segment 모듈이아래그림처럼실장 6 Digit 7-Segment 2 디바이스드라이버구현 : 7-SEGMENT 6-Digit 7-Segment LED
More informationAdobe Flash 취약점 분석 (CVE-2012-0754)
기술문서 14. 08. 13. 작성 GNU C library dynamic linker $ORIGIN expansion Vulnerability Author : E-Mail : 윤지환 131ackcon@gmail.com Abstract 2010 년 Tavis Ormandy 에 의해 발견된 취약점으로써 정확한 명칭은 GNU C library dynamic linker
More informationScalable Network-based Buffer Overflow Attack Detection
사례연구 : 보안강화를위한다형성도구 (Polymorphic Tool) 개발 임을규 (imeg@hanyang.ac.kr) 핚양대학교정보통신대학 유무선네트워크보안연구실 2008-02-18 1 Contents 용어설명 PE format의구조 실행압축 UPX 소스코드분석 Yoda s Protector Morphine 기존방법의문제점 다형성도구의응용 향후연구방향 참고문헌
More informationISP 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 informationThe Pocket Guide to TCP/IP Sockets: C Version
인터넷프로토콜 5 장 데이터송수신 (3) 1 파일전송메시지구성예제 ( 고정크기메시지 ) 전송방식 : 고정크기 ( 바이너리전송 ) 필요한전송정보 파일이름 ( 최대 255 자 => 255byte 의메모리공간필요 ) 파일크기 (4byte 의경우최대 4GB 크기의파일처리가능 ) 파일내용 ( 가변길이, 0~4GB 크기 ) 메시지구성 FileName (255bytes)
More information임베디드시스템설계강의자료 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 informationMicrosoft 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학습목차 2.1 다차원배열이란 차원배열의주소와값의참조
- Part2- 제 2 장다차원배열이란무엇인가 학습목차 2.1 다차원배열이란 2. 2 2 차원배열의주소와값의참조 2.1 다차원배열이란 2.1 다차원배열이란 (1/14) 다차원배열 : 2 차원이상의배열을의미 1 차원배열과다차원배열의비교 1 차원배열 int array [12] 행 2 차원배열 int array [4][3] 행 열 3 차원배열 int array [2][2][3]
More informationChapter 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 information1. 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강의 개요
DDL TABLE 을만들자 웹데이터베이스 TABLE 자료가저장되는공간 문자자료의경우 DB 생성시지정한 Character Set 대로저장 Table 생성시 Table 의구조를결정짓는열속성지정 열 (Clumn, Attribute) 은이름과자료형을갖는다. 자료형 : http://dev.mysql.cm/dc/refman/5.1/en/data-types.html TABLE
More information<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>
#include "stdafx.h" #include "Huffman.h" 1 /* 비트의부분을뽑아내는함수 */ unsigned HF::bits(unsigned x, int k, int j) return (x >> k) & ~(~0
More informationPowerPoint Template
JavaScript 회원정보 입력양식만들기 HTML & JavaScript Contents 1. Form 객체 2. 일반적인입력양식 3. 선택입력양식 4. 회원정보입력양식만들기 2 Form 객체 Form 객체 입력양식의틀이되는 태그에접근할수있도록지원 Document 객체의하위에위치 속성들은모두 태그의속성들의정보에관련된것
More informationFrama-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목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2
제 8 장. 포인터 목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2 포인터의개요 포인터란? 주소를변수로다루기위한주소변수 메모리의기억공간을변수로써사용하는것 포인터변수란데이터변수가저장되는주소의값을 변수로취급하기위한변수 C 3 포인터의개요 포인터변수및초기화 * 변수데이터의데이터형과같은데이터형을포인터 변수의데이터형으로선언 일반변수와포인터변수를구별하기위해
More information<4D F736F F F696E74202D20C1A63132B0AD20B5BFC0FB20B8DEB8F0B8AEC7D2B4E7>
제14장 동적 메모리 할당 Dynamic Allocation void * malloc(sizeof(char)*256) void * calloc(sizeof(char), 256) void * realloc(void *, size_t); Self-Referece NODE struct selfref { int n; struct selfref *next; }; Linked
More information디지털포렌식학회 논문양식
Windows Transactional NTFS(TxF), Registry(TxR) 기능 연구 유 병 영, 방 제 완, 이 상 진 고려대학교 디지털포렌식연구센터 Analysis of Windows Transactional NTFS(TxF) and Transactional Registry(TxR) Byeongyeong Yoo, Jewan Bang, Sangjing
More information(Microsoft Word - ASEC Report 2007\263\3425\277\371\310\243.doc)
ASEC Report 5월 ASEC Report 2007. 6 I. ASEC 월간통계 2 (1) 5월악성코드통계 2 (2) 5월스파이웨어통계 11 (3) 5월시큐리티통계 14 II. ASEC Monthly Trend & Issue 16 (1) 악성코드 Autorun.inf 파일의정체에대하여 16 (2) 스파이웨어 국산스파이웨어의증가 21 (3) 시큐리티 디지털환경에따른트렌드의변화
More informationPowerPoint 프레젠테이션
(Host) set up : Linux Backend RS-232, Ethernet, parallel(jtag) Host terminal Target terminal : monitor (Minicom) JTAG Cross compiler Boot loader Pentium Redhat 9.0 Serial port Serial cross cable Ethernet
More informationJAVA PROGRAMMING 실습 08.다형성
2015 학년도 2 학기 1. 추상메소드 선언은되어있으나코드구현되어있지않은메소드 abstract 키워드사용 메소드타입, 이름, 매개변수리스트만선언 public abstract String getname(); public abstract void setname(string s); 2. 추상클래스 abstract 키워드로선언한클래스 종류 추상메소드를포함하는클래스
More informationMySQL-.. 1
MySQL- 기초 1 Jinseog Kim Dongguk University jinseog.kim@gmail.com 2017-08-25 Jinseog Kim Dongguk University jinseog.kim@gmail.com MySQL-기초 1 2017-08-25 1 / 18 SQL의 기초 SQL은 아래의 용도로 구성됨 데이터정의 언어(Data definition
More informationOPCTalk for Hitachi Ethernet 1 2. Path. DCOMwindow NT/2000 network server. Winsock update win95. . . 3 Excel CSV. Update Background Thread Client Command Queue Size Client Dynamic Scan Block Block
More informationAPI 매뉴얼
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 informationC 프로그래밍 언어 입문 C 프로그래밍 언어 입문 김명호저 숭실대학교 출판국 머리말..... C, C++, Java, Fortran, Python, Ruby,.. C. C 1972. 40 C.. C. 1999 C99. C99. C. C. C., kmh ssu.ac.kr.. ,. 2013 12 Contents 1장 프로그래밍 시작 1.1 C 10 1.2 12
More informationPowerPoint 프레젠테이션
Chapter 08 함수 01 함수의개요 02 함수사용하기 03 함수와배열 04 재귀함수 함수의필요성을인식한다. 함수를정의, 선언, 호출하는방법을알아본다. 배열을함수의인자로전달하는방법과사용시장점을알아본다. 재귀호출로해결할수있는문제의특징과해결방법을알아본다. 1.1 함수의정의와기능 함수 (function) 특별한기능을수행하는것 여러가지함수의예 Page 4 1.2
More information제20회_해킹방지워크샵_(이재석)
IoT DDoS DNS (jaeseog@sherpain.net) (www.sherpain.net) DDoS DNS DDoS / DDoS(Distributed DoS)? B Asia Broadband B Bots connect to a C&C to create an overlay network (botnet) C&C Provider JP Corp. Bye Bye!
More information강의10
Computer Programming gdb and awk 12 th Lecture 김현철컴퓨터공학부서울대학교 순서 C Compiler and Linker 보충 Static vs Shared Libraries ( 계속 ) gdb awk Q&A Shared vs Static Libraries ( 계속 ) Advantage of Using Libraries Reduced
More information02장.배열과 클래스
---------------- DATA STRUCTURES USING C ---------------- CHAPTER 배열과구조체 1/20 많은자료의처리? 배열 (array), 구조체 (struct) 성적처리프로그램에서 45 명의성적을저장하는방법 주소록프로그램에서친구들의다양한정보 ( 이름, 전화번호, 주소, 이메일등 ) 를통합하여저장하는방법 홍길동 이름 :
More informationMicrosoft PowerPoint - 8ÀÏ°_Æ÷ÀÎÅÍ.ppt
포인터 1 포인터란? 포인터 메모리의주소를가지고있는변수 메모리주소 100번지 101번지 102번지 103번지 int theage (4 byte) 변수의크기에따라 주로 byte 단위 주소연산자 : & 변수의주소를반환 메모리 2 #include list 8.1 int main() using namespace std; unsigned short
More informationPowerPoint 프레젠테이션
BOOTLOADER Jo, Heeseung 부트로더컴파일 부트로더소스복사및압축해제 부트로더소스는웹페이지에서다운로드 /working 디렉터리로이동한후, wget으로다운로드 이후작업은모두 /working 디렉터리에서진행 root@ubuntu:# cp /media/sm5-linux-111031/source/platform/uboot-s4210.tar.bz2 /working
More information1
1 1....6 1.1...6 2. Java Architecture...7 2.1 2SDK(Software Development Kit)...8 2.2 JRE(Java Runtime Environment)...9 2.3 (Java Virtual Machine, JVM)...10 2.4 JVM...11 2.5 (runtime)jvm...12 2.5.1 2.5.2
More informationDE1-SoC Board
실습 1 개발환경 DE1-SoC Board Design Tools - Installation Download & Install Quartus Prime Lite Edition http://www.altera.com/ Quartus Prime (includes Nios II EDS) Nios II Embedded Design Suite (EDS) is automatically
More informationPowerPoint 프레젠테이션
Chapter 10 포인터 01 포인터의기본 02 인자전달방법 03 포인터와배열 04 포인터와문자열 변수의주소를저장하는포인터에대해알아본다. 함수의인자를값과주소로전달하는방법을알아본다. 포인터와배열의관계를알아본다. 포인터와문자열의관계를알아본다. 1.1 포인터선언 포인터선언방법 자료형 * 변수명 ; int * ptr; * 연산자가하나이면 1 차원포인터 1 차원포인터는일반변수의주소를값으로가짐
More informationMicrosoft 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 informationUI 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 informationJAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각
JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( http://java.sun.com/javase/6/docs/api ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각선의길이를계산하는메소드들을작성하라. 직사각형의가로와세로의길이는주어진다. 대각선의길이는 Math클래스의적절한메소드를이용하여구하라.
More informationLab 4. 실습문제 (Circular singly linked list)_해답.hwp
Lab 4. Circular singly-linked list 의구현 실험실습일시 : 2009. 4. 6. 담당교수 : 정진우 담당조교 : 곽문상 보고서제출기한 : 2009. 4. 12. 학과 : 학번 : 성명 : 실습과제목적 : 이론시간에배운 Circular Singly-linked list를실제로구현할수있다. 실습과제내용 : 주어진소스를이용해 Circular
More information이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다. 2
제 17 장동적메모리와연결리스트 유준범 (JUNBEOM YOO) Ver. 2.0 jbyoo@konkuk.ac.kr http://dslab.konkuk.ac.kr 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다. 이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다.
More informationMPLAB C18 C
MPLAB C18 C MPLAB C18 MPLAB C18 C MPLAB C18 C #define START, c:\mcc18 errorlevel{0 1} char isascii(char ch); list[list_optioin,list_option] OK, Cancel , MPLAB IDE User s Guide MPLAB C18 C
More information