64 비트윈도우커널분석 IA64 Operand들이약간생소해보이지만이것역시천천히살펴보면의미를대강추측할수있다. adds의경우 f( 상수 )+r0( 레지스터 ) 의결과를 ret0( 레지스터 ) 에대입하라는뜻으로이해할수있다. movl의경우 e `ffa00000( 상
|
|
- 요섭 태
- 6 years ago
- Views:
Transcription
1 실 전! 강 의 실 개발자를위한실전 64 비트! 64 비트윈도우커널탐구 3 연 + 재 + 순 + 서 1회 비트시대를향한첫걸음, 커널모드드라이버포팅 2회 비트윈도우커널분석 AMD64 3회 비트윈도우커널분석 IA64 연 + 재 + 가 + 이 + 드운영체제 64비트윈도우 XP, 64비트윈도우 2003 개발도구 윈도우 DDK 최신판기반지식 윈도우커널모드드라이버개발응용분야 응용프로그램및드라이버 64비트포팅 김성현 shkim@ahnlab.com 안철수연구소에서 V3, 스파이제로개발에참여하고있는커널모드드라이버개발자이다. 우리나라에서도평생소트프웨어엔지니어로살아가면서식구들을먹여살릴수있는날이올수있다는꿈을안고그길을닦아나가고있다. 올해의목표로 Code Complete 2nd Edition Windows Internals 4th Edition 읽기, 몸무게 10kg 증량하기, 당구 250 만들기, 외국식당에서영어로원하는거주문하기등을가지고있다. 개발자를위한실전 64비트! 64비트윈도우커널탐구 3 64비트윈도우커널분석 IA64 지난호에살펴본 AMD64용커널에이어 IA64용커널에대해알아보자. AMD64를이해하는것은크게어렵지않은일인반면에 IA64를이해하는것은쉽지않은작업이다. 다양한종류의 CPU에익숙하면그렇지않겠지만 x86에만익숙한사람들에게는새로운도전이될수있을것이다. 이번에다루게될내용은 IA64 CPU의레지스터셋과명령어의이해, IA64 모듈함수테이블소개, IA64용 NT 커널의서비스디스크립터테이블의동작방식분석, CPU에서가상메모리주소가물리메모리주소로변환되는과정인가상주소변환에대한것이다. 는레지스터셋이 x86이나 AMD64와확연히다르다고이미첫번째연재부터설 IA64 명했다. CPU를이해하는가장기본적인스텝이레지스터의이해인만큼어떻게다른지그림으로한번살펴보자. < 그림 1> 은 Intel Itanium Architecture Software Developer s Manual 에나온 IA64 레지스터셋이다 ( 참고자료 ). 일단 x86에서봤던 EAX, EBX, ESP 등의익숙한레지스터이름들이전혀보이지않는다. 당황스러울수있으나정신을가다듬고다시한번살펴보자. 이름들을자세히보면그의미들을약간은이해할수있을것같다. 각그림의왼쪽에아래로나열되어있는알파벳과숫자가붙은명칭들이레지스터의이름이다. 범용레지스터 (General Register) 는 gr0, gr1,, gr127이라는이름으로존재한다. 64비트레지스터가 128개존재한다는것을알수있다. 몇개만더설명하면부동소수점레지스터 (Floating-point Register) 는 fr0, fr1,, fr127이라는이름을가지고명령포인터 (Instruction Pointer) 레지스터는 IP라는이름을가진다. 나머지레지스터에대해서는필자도아직이해하지못하는부분이많기때문에설명을생략하니, 궁금한독자들은 IA64 매뉴얼을참고해서각자공부해보기바란다. 이번기사에서는주로범용레지스터가사용되는상황들에대한예만보일것이다. IA64 명령어구조 IA64의디스어셈블리코드를본적이있는가? < 리스트 1> 은 WinDbg에서보여주는 IA64의디스어셈블리코드이다. 참고로 IA64 레지스터셋중 gr 레지스터들은 WinDbg에서 r로표시되고 br 레지스터들은 b로표시된다. < 리스트 1> 의코드샘플에서보여주고있는명령어들은 adds, movl, nop.m, mov, br.cond.sptk. few이다. IA64 명령어역시처음보면다소당황스럽다. 하지만다행히도명령어들을가만히살펴보면 x86의 add, mov, nop, jmp 등과같은의미라고추측할수있다. 명령어다음에보이는
2 64 비트윈도우커널분석 IA64 Operand들이약간생소해보이지만이것역시천천히살펴보면의미를대강추측할수있다. adds의경우 f( 상수 )+r0( 레지스터 ) 의결과를 ret0( 레지스터 ) 에대입하라는뜻으로이해할수있다. movl의경우 e `ffa00000( 상수 ) 라는값을 r2( 레지스터 ) 에대입하라는뜻으로이해할수있다 ( 여기서 r0는레지스터셋에서봤던범용레지스터 gr0이고 r2는 gr2이다 ). br.cond.sptk.few은아주복잡해보이는데처음의 br만보면 branch의약자이므로 jmp를의미한다는것을알수있다. br 명령은뒤에붙는옵션들에따라서여러가지의미를가지는데방금보았던 br.cond는 jmp를, br.call은 call, br.ret는 ret 를의미한다. 그뒤의옵션들은동작방식에약간의차이를주기는하지만여기서는중요하지않으므로설명하지않는다. < 리스트 1> 과같은코드들이처음에는굉장히 생뚱맞은 코드로보이지만조금만익숙해지면더듬더듬읽을수있는상태가되므로처음부터너무주눅 들지않아도된다. 시스템프로그래밍을하다보면명령어의구조를이해하고작업해야할경우도있기때문에이번기회에 IA64 명령어의구조에대해좀더자세히알아보고넘어가자. IA64의명령어 (instruction) 구조는 < 그림 2> 와같다. < 리스트 1> IA64 디스어셈블리코드 e `8402ecc0 adds ret0=f, r0 e `8402ecc4 movl r2=e `ffa00000 ;; e `8402ecd0 nop.m 0 e `8402ecd4 mov b6=r2, +0 e `8402ecd8 br.cond.sptk.few b6 ;; < 그림 1> IA64 레지스터셋 gr0 gr1 gr2 Application Register Set General Registers Floating-point Registers Predicates Branch Registers 63 0 nats fr pr0 1 fr pr1 fr2 pr2 br0 br1 br2 0 application registers 63 0 ar0 KR0 ar7 KR7 gr16 gr31 gr32 gr127 fr31 fr32 fr127 pr15 pr16 pr63 br7 Instruction Pointer 63 0 IP Current Frame Maker 37 0 CFM User Mask 5 0 ar16 ar17 ar18 ar19 ar21 ar24 ar25 ar26 ar27 ar28 ar29 ar30 RSC BSP BSPSTORE RNAT FCR EFLAG CSD SSD CFLG FSR FIR FDR ar32 CCV ar36 UNAT Advanced Load Adress Table cpuid0 cpuid1 Processor Identifiers 63 0 Perfomance Monitor Data Registers 63 0 pmd0 pmd1 ar40 ar44 ar64 ar65 FPSR ITC PFS LC cpuid n pmd m ar66 EC ar127 마이크로소프트웨어 271
3 실 전! 강 의 실 개발자를위한실전 64 비트! 64 비트윈도우커널탐구 3 세개의명령어가 128비트 (16바이트) 의번들형태로구성된다. 번들은 41비트명령어슬롯 (instruction slot) 3개와 5비트템플릿으로구성된다. x86에서는 Opcode, Operand의길이가명령어마다제각기다르지만 IA64는 RISC 구조를따르기때문에명령어들이고정된크기를가진다. 대부분의명령어들이 41비트의크기를가지므로명령어슬롯에하나씩들어가고번들은 3개의명령어를포함하는단위가된다. 어떤명령어는명령어슬롯을 2개차지하는경우도있다. < 리스트 1> 을보면 16바이트단위로 2줄또는 3줄로명령어들을보여주고있다. 번들이 3개의명령어슬롯을가지므로대부분 WinDbg는 16 바이트마다 3줄로디스어셈블리한내용을보여준다. 두줄로보이는부분은 movl 같이 2개의슬롯을차지하는특별한명령어인경우에만나타난다. 번들이라는구조때문에오해하기쉬운것이 WinDbg가명령어의주소를보여주는부분인데 < 리스트 1> 을보면코드를읽는사람은 e `8402ecc4 위치에 movl 명령어가존재한다고생각할수있다. 하지만엄밀히따지자면 movl은 16바이트번들구조에서 41비트라는애매한경계에걸쳐서존재하기때문에 e `8402ecc4에서시작하지않는다. WinDbg는명령어의주소표시를비트단위로할수없으므로그냥세줄을 0, 4, 8 단위로의미없이나누어보여주고있는것뿐이다. 16바이트마다번들이새로시작한다는것만정확한의미를갖는다. IA64 명령어구조때문에나타나는또하나의부작용은, 같은소스코드라도 IA64용으로컴파일한바이너리는파일크기가 x86이나 AMD64용에비해 2~3배정도증가한다는점이다. RISC 기반이기 < 그림 2> IA64 명령어구조 instruction slot 2 instruction slot 1 instruction slot 0 template < 그림 3> adds 명령어구조 때문에파일크기가증가하는몇가지이유는있겠지만이상하게도 IA64용코드를분석하다보면명령어들사이에 nop가쓸데없이많이들어가있는것을발견할수있다. 물론컴파일러가알아서잘집어넣은것이라고십분이해해줘도코드공간의낭비가심한게사실이고결과적으로컴파일된파일크기는 x86에비해평균 3배정도로커진다. 나중에라도 IA64용바이너리를빌드한후에놀라지말기바란다. adds 명령어구조슬롯에들어가는각명령어의구조는명령어마다다른데 adds 명령어를예로살펴보면 < 그림 3> 과같다. 명령어는 41비트로크기가제한되어있으므로 41비트를알뜰하게쪼개서 Opcode, Operand를모두표현한다. 41비트가쪼개지는형태는명령어마다다르다. adds 명령어의경우최상위 4비트에 8이라는 Opcode가존재한다. Operand는 r1 = imm14, r3으로표현되는데그림만가지고설명하면다소혼란스러울수있으므로 < 리스트 1> 의첫번째명령어를보면서설명하기로한다. 다음과같이보이는디스어셈블리코드와 < 그림 3> 을일치시켜보자. e `8402ecc0 adds ret0=f, r A4 8 5 X 2a V e imm 6d r 3 imm 7b r 1 qp < 그림 3> 에서보이는 Operands r1 = imm14, r3과 ret0 = f, r0이일치해야하므로 6~12비트영역인 r1에는 ret0 레지스터를나타내는값이들어있고 20~16비트영역인 r3에는 r0 레지스터를나타내는값이들어있다. 다음에는 imm14를찾아야하는데 imm14가명령어구조그림에서보이지않는다. imm14는 14 비트가연속적으로구성되지않고 1비트, 6비트, 7비트로나누어져있기때문이다. 이제그림을다시보면나누어진비트가보일것이다. 결국 imm14가명령어는 s, imm6d, imm7b로쪼개져서명령어구조상에존재하는것이다. 이제부터어떤값들이들어있길래 adds ret0=f, r0와같은명령어로해석되었는지실제코드영역메모리에있는데이터를보면서확인해보자 kd> dq e `8402ecc0 e `8402ecc0 00ffa100`003c4005 intsruction operands opcode x 2a extension v e ` adds addp4 r 1 =imm 14, r 이제우리는이데이터를보면서이 것은 16 바이트짜리번들이라는것을
4 64 비트윈도우커널분석 IA64 이해할수있다. < 리스트 1> 을보면이번들에는 adds, movl이들어있다는것을확인할수있다. 우리의관심사는첫번째명령어인 adds 이므로명령어슬롯 0을확인해봐야한다. 앞의 128비트데이터중에서 5~45비트의데이터만취해서비트로표시하면다음과같다. MSB LSB op Imm6d r3 imm7b r1 qp 여기서 6~12비트인 r1은 으로 8이다. 8은범용레지스터 8을의미하는것이므로 r8 레지스터를가리킨다. 왜 ret0이아니라 r8 일까? < 그림 1> 에서눈을씻고찾아봐도 ret0이라는레지스터는존재하지않는다. ret0은 r8 이맵핑된다른이름일뿐이다. IA64에서는범용레지스터중몇개를특수한목적으로사용하면서특별한이름으로맵핑해놓았다. 어셈블리코드에서보이는 ret0~ret3 레지스터는실제로는 r8~r11 레지스터이다. < 표 1> 에서몇가지맵핑된레지스터를예로들고있다. 20~26비트는 으로 0이다. 0은범용레지스터 0을의미하는것이므로 r0 레지스터를가리킨다. imm14를구하기위해서 36비 트, 27~32비트, 13~19비트를살펴보면 0, , 이다. 14비트값으로계산하면 로 f이다. 따라서명령어슬롯의데이터를분석하면정확히 adds ret0=f, r0으로해석되는것을확인할수있다. 이해를돕기위해서명령어메모리를해석하여 imm14에해당하는값을구하는과정을코드로쓰면다음과같다. ULONG GetImm14FromAdds(ULONG_PTR pfunction) { ULONGLONG bundle; ULONGLONG slot0; ULONG_PTR imm14; // 번들의하위 64비트 => 00ffa100`003c4005 bundle = *(ULONGLONG*)pFunction; < 표 1> 범용레지스터의맵핑 맵핑된이름 원래이름 용도 ret0 ~ ret3 r8 ~ r11 정수리턴값 rp b0 리턴포인터 gp r1 글로벌포인터 sp r12 스택포인터 [ IA64 디버그부트옵션설정 ] 보통 WinDbg 로커널디버깅을하려면디버그타겟 ( 디버기 ) 의 C:\boot.ini를수정하여디버그부트옵션을설정하는데 IA64 시스템의 C:\ 에는 boot.ini가없다. 그렇다면디버그부트옵션을어떻게설정할까? OS가제공하는 bootcfg.exe라는툴이그해답이다. bootcfg.exe를이용해서디버그부트옵션을설정하는방법은다음과같다. 명령창에서 bootcfg.exe 실행 C:\>bootcfg Boot Options Timeout: 30 Defulat: \Device\HarddiskVolume3\Windows CurrentBootEntryID: 1 Boot Entries Boot entry ID: 1 Os Friendly Name: Windows Server 2003, Enterprise OsLoadOptions: /noexecute=optout Boot entry ID: 3 OS Friendly Name: CD/DVD ROM/Pci(1F 1)/Ata(Primary,Master)/CDROM(Entry0) 현재사용중인윈도우 OS의 Boot entry ID를확인 ( 여기서는 1) bootcfg.exe로디버그부트옵션설정 C:\>bootcfg /Debug ON /PORT COM2 /BAUD /ID 1 SUCCESS: The OS load options have been changed for the BootID: 1. bootcfg 명령으로확인 C:\>bootcfg Boot Entries Boot entry ID: 1 Os Friendly Name: Windows Server 2003, Enterprise OsLoadOptions: /noexecute=optout /debug /debugport=com2 /baudrate= Boot entry ID: 2 OS Friendly Name: Red Hat Linux Advanced Server OsLoadOptions 가변경되어있는것을확인할수있다. 리부팅하면적용된다. 마이크로소프트웨어 273
5 실 전! 강 의 실 개발자를위한실전 64 비트! 64 비트윈도우커널탐구 3 // 템플릿 5비트를제거하고 41비트를취한다. slot0 = (bundle >> 5) & 0x1FFFFFFFFFF; // adds 명령포맷에서 imm7b 7bit, imm6d 6bit, s 1bit로 imm14를만든다. imm14 = ((slot0 >> 13) & 0x7F) (((slot0 >> 27) & 0x3F) << 7) (((slot0 >> 36) & 0x1) << 13); return (ULONG)imm14; } 다른명령어들도이내용을참고하면어렵지않게분석할수있다. 여러가지명령어들의구조는 IA64 매뉴얼을참고하여확인해보기바란다. 이다. < 리스트 2> 는 MyDrv.sys가 NT 커널의 RtlZeroMemory 함수를호출했을때의예를코드로나타내고있다. 코드가자연스럽게분석되는가? 이코드를지금자세히설명하려면복잡하므로그림으로먼저설명하고자세히분석하도록한다. 지금은이코드가자신의임포트테이블 (Import Table) 을참조하여 NT 커널의 RtlZeroMemory 함수로점프하는코드라고만생각하자. 여기에서 x86이나 AMD64에는없는어떤테이블이등장하는데이기사에서는이것을 IA64 모듈함수테이블 이라고정의한다 ( 이정의는공식적인용어는아니라는점을밝혀둔다 ). 이테이블의명칭을알기위해조사해보았지만아직정확한명칭을찾지못해서필자나름대로정의한용어이다. < 그림 4> 를단계별로나누어서설명하면다음과같다. IA64 모듈함수테이블어떤모듈에서다른모듈의익스포트함수를호출할때 x86이나 AMD64에서는볼수없었던재미있는개념이 IA64에있다. 이것은유저모드모듈이나커널모드모듈이나모두동일하게적용되는내용 < 그림 4> 모듈간함수호출흐름 MyDrv.sys Call RtlZeroMemory < 리스트 2> MyDrv.sys 가 NT 커널함수를호출하는코드 e `de3d38c0 addl r2=ffffffff`ffe020b8, gp ;; e `de3d38c4 ld8 r2=[r2] e `de3d38c8 nop.i 0 ;; e `de3d38d0 ld8 r3=[r2], 8 ;; e `de3d38d4 ld8 gp=[r2] e `de3d38d8 mov b6=r3, +0 e `de3d38e0 nop.m 0 e `de3d38e4 nop.i 0 e `de3d38e8 br.cond.sptk.few b6 NT 커널 IA64 모듈함수테이블 xxxxxxxx f e80000 xxxxxxxx f e80000 xxxxxxxx f e80000 xxxxxxxx f e80000 실제함수위치 xxxxxxxx :. xxxxxxxx MyDrv.sys에서 RtlZeroMemory 호출 MyDrv.sys에서 RtlZeroMemory를호출하는내부코드는 NT 커널의 IA64 모듈 함수테이블을참조 MyDrv.sys에서 NT 커널 IA64 모듈함수테이블의함수포인터참조 NT 커널의함수포인터로점프 x86이나 AMD64였다면 1번에서바로 4번으로진행되었을것이다. 하지만여기서는중간에 IA64 모듈함수테이블을참조하는과정이 들어간다. IA64에서는이와같이어떤모듈이다른모듈의함수를호 출할때반드시 IA64 모듈함수테이블을거쳐야한다. 코드를작성하 는프로그래머입장에서는 RtlZeroMemory의함수주소를직접호출 했다고생각하지만내부의코드는 NT 커널에서 IA64 모듈함수테이 블을참조해서실제 RtlZeroMemory의함수주소를얻고나서야함 수가호출되는것이다. 이미예상했겠지만 IA64 모듈함수테이블에 는그모듈이제공하는모든익스포트함수들에대한함수주소들이 들어있다. 도대체왜이런테이블이존재하는것일까? 전체흐름을 생각하면서다시 < 리스트 2> 의코드를차근차근분석해보자. e `de3d38c0 addl r2=ffffffff`ffe020b8, gp ;; // Step 1 e `de3d38c4 ld8 r2=[r2] // Step 2 e `de3d38c8 nop.i 0 ;; e `de3d38d0 ld8 r3=[r2], 8 ;; // Step 3 e `de3d38d4 ld8 gp=[r2] // Step 4 e `de3d38d8 mov b6=r3, +0 e `de3d38e0 nop.m 0 e `de3d38e4 nop.i 0 e `de3d38e8 br.cond.sptk.few b6 // Step
6 64 비트윈도우커널분석 IA64 step 1) addl은 ffffffff`ffe020b8와 gp 레지스터를더해서 r2 레지스터에저장한다. step 2) ld8 명령어는 8바이트로드명령어이므로 r2 레지스터에있는포인터를 8바이트읽어서 r2에저장한다. step 3) ld8 명령어마지막에보이는 8이로드후에 r2 에 8을더하라는의미이므로 r2 레지스터에있는포인터를 8바이트읽고 r2 레지스터값을 8 증가시킨다. step 4) 여기서또 8바이트를읽어서 gp 레지스터에저장한다. step 5) b6 에저장된포인터로점프한다. < 그림 4> 의과정을이해했으므로코드의내용을다음과같은의미로해석할수있다. step 1) MyDrv.sys는임포트테이블위치를계산한다. step 2) 임포트테이블을참조하여 nt!rtlzeromemroy 주소를구한다. 구해진 nt!rtlzero Memroy의주소는사실함수포인터가아니라 nt 커널모듈의 IA64 모듈함수테이블주소이다. step 3) nt!rtlzeromemroy 함수테이블을참조하여실제 nt!rtlzeromemory 함수포인터를구한다. step 4) nt!rtlzeromemroy 함수포인터다음에저장된포인터를 gp 레지스터에저장한다. step 5) nt!rtlzeromemroy 함수포인터로점프한다. 이제는 < 리스트 2> 를보면 < 그림 4> 가떠오르면서마지막으로해석한내용들이자연스럽게이해돼야한다. 그런데이렇게한단계씩그림의흐름과맞춰보면함수호출의흐름은대충알겠는데 Step 4는도대체무엇을하는것인지모르겠다. gp 레지스터에저장되는내용은뭘까? gp가궁금하다. 기때문에글로벌포인터값은각모듈마다서로다른고유의값을가지고있다는것이다. MyDrv.sys는 MyDrv.sys 고유의글로벌포인터값을가지고있고 NT 커널은 NT 커널고유의글로벌포인터값을가지고있다. 자신의글로벌포인터를정확히알고있어야자신의전역변수를참조할수있다. Step 1을예로살펴보면 MyDrv.sys 모듈내의임포트테이블을참조할때도 gp 레지스터 + 임포트테이블옵셋으로참조하는것을볼수있다. 이제 Step 4에서하는일이무엇인지알아보자. Step 4에서함수포인터다음에저장된포인터를 gp 레지스터에저장하는동작을볼수있다. gp를변경하고있는것이다. Step 4까지는 gp 레지스터에 MyDrv.sys의글로벌포인터가저장되어있었는데 NT 커널모듈로진입하기위해서 NT 커널모듈의글로벌포인터를구해서 gp 레지스터에저장하는것이다. 이렇게모듈과모듈사이에호출이나점프가일어나는경우는반드시대상모듈의글로벌포인터를알아내서 gp 레지스터에저장해주고대상모듈로진입해야만호출된함수가정상동작할수있다. 따라서대상모듈의글로벌포인터를쉽게얻을수있는방법이필요한데여기서알게된사실은 IA64 모듈함수테이블에는함수포인터다음에그함수가존재하는모듈의글로벌포인터가저장되어있다는것이다. Winnt.h를살펴보면 IA64만을위해정의해놓은구조체중에 PLABEL_DESCRIPTOR라는것을볼수있는데지금설명하고있는 IA64 모듈함수테이블은바로이 PLABEL_ DESCRIPTOR의배열로구성된테이블이다. typedef struct _PLABEL_DESCRIPTOR { ULONGLONG EntryPoint; ULONGLONG GlobalPointer; } PLABEL_DESCRIPTOR, *PPLABEL_DESCRIPTOR; gp 레지스터와 PLABEL_DESCRIPTOR gp 레지스터는실제로는 r1 레지스터를의미한다. < 표 1> 에서도이미 gp 레지스터의맵핑에대해서표시했다. r1 레지스터를어셈블리상에서는 gp 레지스터로표시하는데이것은 r1 레지스터가항상글로벌포인터를저장하는특별한목적으로사용되기때문이다. 그렇다면글로벌포인터란또무엇이란말인가? IA64에서는모듈내부에서전역변수를참조하는경우항상다음과같은형식으로참조하게된다. 글로벌포인터 + 전역변수옵셋 (Offset) 전역변수를절대주소로직접참조하는경우는절대없다. 전역변수는모두글로벌포인터 (gp 레지스터값 ) 에각전역변수의옵셋을더해서참조한다. 여기서반드시기억해야하는개념이나오는데이렇 EntryPoint에함수포인터가들어가고 GlobalPointer에그모듈의글로벌포인터가들어간다. 이구조체의내용이모든익스포트함수들에대해만들어지고테이블로구성된다. < 그림 4> 를보면좀더명확하게확인할수있다. < 그림 4> 에서 IA64 모듈함수테이블을보면함수주소와글로벌포인터들이있는데 PLABEL_DESCRIPTOR들이나열되어있는것이다. 여기에서글로벌포인터들은모두같은값을가지는것을볼수있다. 이글로벌포인터는모두 NT 커널모듈의글로벌포인터값이므로당연히모두같은값을가지게되는것이다. 메모리낭비인것같기도하지만이렇게구성할수밖에없어보이기도한다. 이제야 IA64 모듈함수테이블이도대체왜존재하는가에대한의문이풀리는것같다. IA64에서는글로벌포인터라는개념이도입되어모든모듈이항상이값을참조할수있어야한다. gp 레지스터는 마이크로소프트웨어 275
7 실 전! 강 의 실 개발자를위한실전 64 비트! 64 비트윈도우커널탐구 3 이글로벌포인터를항상가지고있는용도로사용되고있는것이다. 그렇기때문에수행중인모듈이변경될때마다 gp 레지스터의값도변경되어야하는데다음에수행될모듈의글로벌포인터를쉽게얻기위한방법을제공하는것이바로 IA64 모듈함수테이블인것이다. IA64 서비스테이블분석이제 IA64 서비스테이블에대해살펴보자. 분석에사용된 OS는윈도우서버 비트에디션이다. 서비스테이블에대한기본개념은이전호에서설명했으므로생략하고 IA64에해당하는내용만살펴본다. 이번에도역시 NT 커널에서익스포트된 KeServiceDescriptor Table을참조하면서시작한다. kd> dq KeServiceDescriptorTable e `842cda80 e `8428e1f ` e `842cda90 001efe10` e `8428eb34 64비트로데이터를봐야하므로 dq 명령어를사용했다. 이내용의이해를돕기위해지난호에서도소개했던구조체를다시보자. struct ServiceDescriptorTable { PVOID ServiceTableBase; PVOID ServiceCounterTable; ULONG NumberOfServices; PVOID ParamTableBase; } 이구조체가 64비트로빌드되어사용되는것이메모리상에서이와같이보이는것이다. 독자들은첫번째와네번째포인터가여기서살펴봐야할핵심내용이라는사실을파악하고있을것이다. 이것들을설명하기전에세번째필드인 NumberOfService만잠깐짚고넘어가면 ULONG 타입이므로 0x128만유효만값이라는점에착오가없어야한다. 상위 4바이트, 0x001efe0은 8바이트정렬을위한패딩 (padding) 공간일뿐이므로그냥쓰레기값을보여주고있는것이다. 이제 ServiceTableBase를살펴보자. 이첫번째포인터는 nt!kiservicetable을가리킨다. kd> dq e `8428e1f0 e `8428e1f0 e `844c47e3 e `842f6263 e `8428e200 e `84006f13 e `843154f9 e `8428e210 e `842fb229 e `842ff9a9 e `8428e220 e `842f4865 e `84327d93 e `8428e230 e ` e `84328d62 e `8428e240 e `842fb004 e `842fb2d2 e `8428e250 e `df09fa80 e `8431a585 e `8428e260 e `84353d05 e `df09f980 8바이트단위로함수포인터들이기록되어있는것을볼수있다. 이제는독자들도 AMD64를분석하던기억을되살려서함수포인터의최하위비트를살펴보고있을것같다. 그런데포인터의하위 4비트가 AMD64처럼 1과 0으로나열되는형태는아니다. 그렇다면모두정상적인함수포인터라는생각이든다. AMD64에서는 1과 0을플래그로사용하려고포인터를손상시키는 꽁수 를썼지만 IA64에서는그런작업을하지않는것으로보인다. 함수를확인해보기위해서이중두개만골라서살펴보면다음과같이나온다. kd> u e `844c47e3 nt!ntmapuserphysicalpagesscatter+0x3: e `844c47e3???????? e `844c47f0 adds r3=ffffffff`ffffe000, sp ;; e `844c47f4 ld8.nta r31=[r3] e `844c47f8 mov r57=pr e `844c4800 addl r3=ffffffff`ffffdcc0, r0 ;; e `844c4804 add sp=r3, sp e `844c4808 dep r58=ffffffff`ffffffff, r0, 0, 33 ;; kd> u e `843154f9 nt!ntreadfile+0x9: e `843154f9???????? e ` adds sp=ffffffff`ffffff60, sp e ` adds r64=0, r0 e ` adds r60=1, r0 ;; e ` ld8.nta r3=[sp] e ` mov r58=pr e ` adds r66=78, sp 두개다 NT 커널함수의특정옵셋으로나오면서 WinDbg가명령어해석을제대로하지못하고있다. 이것을제대로보려면마지막 4 비트를클리어해서 0으로만들면된다. 실제함수주소는 e ` 844c47e0, e `843154f0인데서비스테이블에는마지막 4비트에 AMD64에서와같이어떤정보를표시하고있는것이다. 이것이어떤정보인지를알기위해서필자는이번에도 DDK 도움말을뒤져가면서일일이서비스테이블에있는함수포인터에해당하는커널서비스함수의함수원형 ( 프로토타입 ) 을살펴보았다. 그결과필자는이정보가그함수의파라미터개수를나타낸다는것을알게되었다. 앞의예에서보면 NtMapUserPhysicalPagesScatter는파라미터가
8 64 비트윈도우커널분석 IA64 개, NtReadFile는파라미터가 9개라는뜻이다. 이것들을이번에는또어떻게사용하는것일까? 그런데 AMD64에서는최하위에표시한비트로파라미터개수를판단해서동작하는코드를확인할수있었지만안타깝게도 IA64에서는왜이런트릭을사용하는지는확인할수없었다. 잘못된포인터를그대로사용하면오류가발생할테니 AMD64처럼마지막비트들을 0으로클리어해서정상적인함수포인터를만들고호출해주는코드가시스템콜핸들러 (System Call Handler) 에있을줄알았는데이런코드가없었다는말이다. 그렇다면이렇게변형된함수포인터를시스템콜핸들러가그냥호출해도정상적으로호출이될까? 확인해본결과정답은 그렇기도하고아니기도하다 이다. 일단함수테이블을참조해서커널함수를호출하는코드를살펴보자. 시스템콜핸들러에서함수테이블을참조해서 NtCreateFile을호출하는경우의예이다. kd> u e `842404f0 nt!kisystemserviceteb+0xf0: e `842404f0 (p2) lfetch [r17] e `842404f4 nop.i 0 e `842404f8 (p11) br.cond.sptk.few b6 // nt!ntcreatefile+a (e ` a) < 그림 5> IA64 가상주소변환 VRN Unknown page Directory Pointer Index Page Directory Pointer Table PPE Page Directory Index Page Directory Table 기위해디버거로세번째라인 e `842404f8(nt!kisystem ServiceTeb+0xf8) 을수행하기직전에예외핸들러 (Exception Handler) 에브레이크포인트를설정하고한스텝을진행시켜봤다. 브레이크포인트가걸리면서나타난다음의콜스택에서필자가추측한것이사실임을확인할수있었다. PDE Page Table Index Page Table PTE Page Byte Offset 8 Kbyte Physical Page Physical address 세번째라인에서 NtCreateFile+a로점프하는것을볼수있다. b6 레지스터에는서비스테이블에서구한 NtCreateFile 서비스함수의포인터 nt!ntcreatefile+a (e ` a) 가들어있다. NtCreateFile의파라미터가 10개이므로함수포인터마지막에 a가더해진형태로보이고있다. 이것이문제없이호출되는지확인해보기위해디버거로한스텝을진행시켜보면다음과같이함수의정확한위치로진입하는것을볼수있다. nt!ntcreatefile+a(e ` a) 가아닌 nt!ntcreatefile (e ` ) 로정확하게진입한다는것이다. Child-SP Child-BSP RetAddr Call Site e `dfe08120 e `dfe0a548 e `84015cf0 nt!kidispatchinterrupt e `dfe08120 e `dfe0a4e8 e `840041b0 nt!kicheckforsoftwareinterrupt+0xb0 e `dfe08120 e `dfe0a4c0 e ` nt!kiexternalinterrupthandler+0x2a0 e `dfe08460 e `dfe0a488 e `845a4740 nt!kethawexecution+0x288 e `dfe08460 e `dfe0a440 e `840a7860 nt!kdexitdebugger+0x80 e `dfe08460 e `dfe0a318 e `8407b520 nt!kdptrap+0xc40 e `dfe08580 e `dfe0a260 e ` nt!kidispatchexception+0x440 e `dfe090e0 e `dfe0a238 e `84003c50 nt!kiexceptiondispatch+0x190 e `dfe09280 e `dfe0a230 e `842404f8 nt!kigenericexceptionhandler+0x330 e `dfe095c0 e `dfe0a1e `6b01afd0 nt!kisystemserviceteb+0xf8 nt!ntcreatefile: e ` alloc r41=ar.pfs, a, 0, 8, 0 e ` mov r40=rp e ` adds sp=ffffffff`ffffff90, sp 그러므로일차정답은 정상적으로호출이된다 이다. 어떻게점프할주소는 nt!ntcreatefile+a (e ` a) 인데 nt!ntcreatefile (e ` ) 로진입이일어난것일까? 이진행과정에는중간과정이있다. 필자는메모리정렬에도맞지않는이런주소로점프하는명령어가수행즉시예외 (Exception) 를발생시킬것이라고생각했다. 그리고이예외는 OS에의해정확한주소로보정된후에다시호출되는것이라는가정을했다. 이것을확인해보 nt!kisystemserviceteb+0xf8에서호출한주소때문에예외가발생하여예외핸들링이되고있음을볼수있다. 핸들링의내용을구체적으로확인하지는않았지만함수주소를조정하여정확한주소로점프할수있게조정해주는역할을하는것으로예상할수있다. 그러므로두번째정답은 정상적인호출이아니다 인것이다. 정상적으로호출되기보다는특별한핸들링에의해서호출되는과정이기때문이다. 서비스테이블에대한나머지내용은 x86이나 AMD64와동일하기때문에더이상설명하지않는다. 궁금한부분이더있다면독자여러분이터득한서비스테이블에대한지식을이용해서스스로탐구해보기바란다. 마이크로소프트웨어 277
9 실 전! 강 의 실 개발자를위한실전 64 비트! 64 비트윈도우커널탐구 3 IA64 가상주소변환 가상주소변환 (Virtual Address Translation) 은가상메모리주소로부터물리메모리주소로변환되는과정을말하는것이다. 가상주소변환이라는용어와기본개념은역시 AMD64 분석기사에서이미소개했으므로여기서는생략한다. IA64에서가상주소변환은다음과같이동작한다. < 그림 6> IA64 의 PTE(Page Table Entry) E Page frame number (37bits) cw W NX O D A V Exception Reserved Copy on write Reserved Write Execute Owner Dirty Accessed Cache Reserved Valid < 그림 5> 의내용은어떤자료로부터참조한내용이아니라 x86, AMD64 구조를응용하여추정한것이다. 다행히추정한대로적용해보니정확히일치했다. IA64 매뉴얼에서는앞과같은식으로설명하지않는다. x86, AMD64 의가상주소구성과유사성을찾다가알아낸내용을필자가나름대로정리한것이다. 최상위비트인 VRN은 Virtual Region Number의약자이고 3비트로 8개의영역 (Region) 을나타낸다. 각영역마다 61비트주소공간을가진다고이해하면된다. IA64 윈도우에서는영역 0 이유저모드영역으로사용되므로유저모드가상주소의형태는 0xxxxxxx xxxxxxxx가되고영역 7이커널모드영역으로사용되므로커널모드가상주소의형태는 exxxxxxx xxxxxxxx가된다. 43~60비트영역은대부분 0으로채워져있어서사용되지않는것처럼보였다. 확실치않으므로여기서는 Unknown 으로표시했다. [ WinDbg 리모트디버깅 ] IA64는대부분서버장비이다. 크기도크고소음도작지않기때문에일반사무실에서운영하기에는다소무리가있다 ( 하드웨어에욕심이많은개발자들은가끔이런오기를부리기도한다 ). 그래서대체로별도의서버실이나테스트실에두고사용하게되는데이런경우커널디버깅을하려면매번노트북등을가지고들어가서작업해야하므로여간불편한게아니다. 이럴때 WinDbg 리모트디버깅을유용하게사용할수있다. 먼저테스트실에서사용하던 IA64와노트북의디버깅환경은그대로유지한채개발자자리로돌아온다. 이제부터개발자자리에서테스트실의노트북을경유하여 IA64 를디버깅하도록설정해보자. 총 3대의컴퓨터가사용되는것이다. 테스트실 IA64( 디버거 ) 디버그모드로부팅 테스트실노트북 WinDbg 설정 ( 디버거 ) IA64에커널디버그모드로연결한상태에서.server 명령으로리모트디버깅활성화 - 하나의포트를열어놓을경우 ( 포트번호는마음대로설정 ) - 포트범위를지정하여열어놓을경우 ( 다음예는 1000~1005까지지정 ).server tcp:port=1000:1005 개발자 PC WinDbg 설정 ( 리모트디버거 ) File 메뉴의 Connect to Remote Session을선택후다음과같이입력 - 컴퓨터이름으로특정포트에연결할때 ( 컴퓨터이름은앞에 \\ 를붙이지않아야한다 ) tcp:server=testroom_notebook,port= IP 주소로포트범위에대해서연결할때 ( 비어있는포트로연결됨 ) tcp:server= ,port=1000:1005 개발자 PC에서노트북으로 WinDbg 연결이성공하면개발자 PC의 WinDbg는마치테스트실노트북의 WinDbg인것처럼동작한다. 사실실제디버깅제어는테스트실노트북의 WinDbg가다하는것이고개발자 PC의 WinDbg는명령어를보내고결과를받아서뿌려주는터미널역할만하는것이지만매번테스트실에들락날락하지않아도되니대단히유용한기능이라고할수있다..server tcp:port=
10 64 비트윈도우커널분석 IA64 이다음의하위비트부터 AMD64 설명에서접했던 Page Directory Pointer Index가나오기시작한다. 이것은 Page Directory Pointer Table에나열되어있는 Page Directory Pointer Entry(PPE) 중에어떤것인지가리키는인덱스이다. 64비트가상주소에서 33비트부터 42비트까지 10비트를차지한다. 10비트인덱스를가지므로 1024개의 PPE가존재함을알수있다. 각각의 PPE에는 Page Directory Table을가리키는포인터가존재한다. 이포인터가가리키는테이블에는마찬가지로 Page Directory Entry(PDE) 들이나열되어있는데역시 64비트단위의배열이라고보면된다. 이 PDE의인덱스로사용되는것이 23비트부터 32비트까지의 10비트이다. 이역시 10 비트이므로하나의테이블에 1024개의 PDE가존재함을알수있다. 이후부터는 32비트에서 PTE부터찾아가는방법과동일하게처리된다. AMD64와의차이점이몇가지보이는데첫번째는테이블을따라가는단계가하나줄었다는점이다. 두번째는 AMD64에서는각테이블이 9비트인덱스로 512개의엔트리를가졌는데 IA64에서는 10비트인덱스로 1024개의엔트리를가진다는점이다. 세번째는 x86, AMD64에서 4KB였던한페이지의크기가 IA64에서는 8KB이므로 13비트의페이지바이트옵셋 (Page Byte Offset) 을가진다는점이다. 각엔트리들의구조를이해하기위해서대표적으로 PTE 구조를살펴보자. < 그림 6> 은 Windows Internals 4th Edition 에서발췌한 PTE 구조이다 ( 참고자료 ). 페이지속성을나타내는 0~12비트까지의각플래그들에대한의미는각자알아서확인해보기바란다. 여기서는 13~49비트까지가 PTE가가리키는물리주소를나타낸다는것만알아두자. 가상주소에서물리주소까지디버거를이용해서가상주소부터물리주소까지따라가보자. 이번에도 AMD64에서다뤘던 Ntfs!LfsReleaseLch 함수를살펴본다. 이번에는이함수의가상주소가 e `c8455a30이다. kd> u e `c8455a30 Ntfs!LfsReleaseLch: e `c8455a30 alloc r34=ar.pfs, 4, 0, 1, 0 e `c8455a34 mov r33=rp e `c8455a38 addl r36=ffffffff`ffe02310, gp e `c8455a40 adds r35=0, gp e `c8455a44 nop.m 0 e `c8455a48 nop.f 0 e `c8455a50 adds r32=38, r32 e `c8455a54 nop.m 0 e `c8455a58 nop.b 0 ;; 이가상주소를가상주소의구조대로쪼개보면다음과같이 PPE 인덱스, PDE 인덱스, PTE 인덱스, 페이지옵셋이나온다. 가상주소 : e `c a 3 0 2진수표시 : 인덱스 : 0b a 1a bit 10bit 10bit 13bit PPE Index PDE Index PTE Index Page Offset x86, AMD64에서는최초테이블의물리주소를구하기위해서 CR3 레지스터를참조하면서시작했지만 IA64에서는이에해당하는정보가어디에있는지찾지못했다. 그래서 Page Directory Pointer Table의물리주소는구할수없었다. 이렇게되면나머지과정을진행하기가어려워진다. 하지만필자는분석을계속진행하기위해다른방법을사용하기로했다. 윈도우커널이제공하는페이지테이블맵핑주소를이용하기로한것이다. IA64에서도역시윈도우커널은물리주소에존재하는각페이지테이블에대해서가상주소로맵핑한주소를제공하고있다. IA64에서의페이지테이블맵핑주소는 < 표 2> 와같다. 여기서문제가하나있는데 Windows Internals 4th Edition 에적혀있는값들과 WinDbg가보여주는값들이다르다는점이다. < 표 2> 에있는값들은 WinDbg가보여주는것이다. WinDbg는디버거라서현재시스템의상태를그대로보여줄테니이값이맞는것같은데책에는다른값이적혀있으니그것은또무슨우여곡절이있는것인지도무지알수없는노릇이었다. 한참을고민하다가결국 MS 뉴스그룹에서얻은답변은 IA64 초기버전과업그레이드된버전의테이블맵핑주소가변경되었다는사실이었다. MS 엔지니어는책에있는주소가 IA64 초기버전소스코드에기록되어있는값이라고설명해주었고현재는그렇지않다고했다. 그러므로 WinDbg가 < 표 2> 에서보여주고있는값이현재윈도우서버 비트에디션의정확한페이지테이블맵핑주소이다. 이제다시!pte 명령을이용해서가상주소와물리주소의관계를알아보자. kd>!pte e `c8455a30 VA e c8455a30 PPE at FFFFFFFF PDE at FFFFFE C80 PTE at FFF < 표 2> IA64 페이지테이블맵핑주소 테이블이름 가상주소 Page-Directory-Pointer Table Base FFFFFFFF Page-Directory Table Base FFFFFE Page Table Base FFF 마이크로소프트웨어 279
11 실 전! 강 의 실 개발자를위한실전 64 비트! 64 비트윈도우커널탐구 3 contains contains F2661 contains AC0221 pfn 2391 E--DAKWV pfn a379 E--DAKWV pfn 4560 E---AKRV!pte 명령은 PPE, PDE, PTE가맵핑된가상주소를보여주고그내용을해석해서보여준다. PPE at FFFFFFFF 라고나오는부분이 PPE의가상주소가 FFFFFFFF 에위치함을표시하는것이다. 그밑줄의 contains는그메모리의내용을보여주고그밑줄은메모리내용을해석해서표시하고있다. 가상주소 FFFFFFFF 의메모리를디버거로직접보면!pte 명령이보여주는내용과같음을확인할수있다. kd> dq FFFFFFFF ffffffff` ` ` PPE Table Base가 FFFFFFFF 인것과 PPE 인덱스가 0x0b2인것을고려하여계산해보면다음과같은결과이다. kd> dq FFFFFFFF (b2 * 8) ffffffff` ` ` 이메모리의내용은이미!pte 명령이해석해서잘보여줬다. 하위 13비트가속성이고 E-DAKWV로표시하고있다. 그위의비트들에서 PDE Table Base 물리주소를알수있다. 13~49비트만취하면 0x2391이라는값이얻어지는데!pte 명령에서 pfn이라는값으로보여주고있다. Page frame number(pfn) 은페이지크기 (8KB) 로나누어진값이기때문에정확한물리주소를구하려면 pfn 값에페이지크기를다시곱해줘야한다. pfn 0x2391에페이지크기를곱해서계산하면 0x 이라는 PDE Table Base 물리주소가구해진다. PDE 인덱스가 0x390이므로 PDE의물리주소는다음과같다. < 그림 7> 맵핑된영역의메모리영역 FFFFF (PTE Base 맵핑 ) FFFFF6FB (PDE Base 맵핑 ) FFFFF6FB7DBED000 (PPE Base 맵핑 ) kd> dq FFFFFE (b2 * 8 * 400) + (390 * 8) fffffe00`00165c `146f `146f4661 PDE Table을참조하는데 PPE 인덱스까지고려하는이유는이미 AMD64에서설명한바와같이 PDE Table에는 PPE가가리킬수있는모든 PDE들이들어있기때문이다. PPE 인덱스에 0x400을곱하는이유는인덱스가 10비트이므로테이블하나에들어가는엔트리의개수가 1024(0x400) 이기때문이다. < 그림 7> 을참고해서조금만생각해보면쉽게이해할수있을것이다. 계속해서 PDE 내용을가지고 PTE Table Base의물리주소를구해보자 `146f2661에서 13~49비트를취하여 pfn 0xa379를얻을수있고여기에페이지크기를곱한값이 PTE Table Base인 0x146f2000이다. PTE 인덱스가 0x22a이므로 PTE의물리주소는다음과같다. kd> dq /p 146f (22a * 8) `146f `08ac `08ac2221 PTE(0) PTE(1) PTE(1024) for PPE(0), PDE(0) PTE(0) PTE(1) PTE(1024) for PPE(0), PDE(1) PTE(0) PTE(1) PTE(1024) for PPE(0), PDE(2) PDE(0) PDE(1) PDE(1024) for PPE(0) PDE(0) PDE(1) PDE(1024) for PPE(1) PDE(0) PDE(1) PDE(1024) for PPE(2) PPE(0) PPE(1) PPE(1024) 이것도!pte 가보여주는 PTE 가상주소의내용과일치한다. kd> dq /p (390 * 8) `04723c `146f `146f4661 kd> dq FFF fff80000` `08ac `08ac2221!pte 가보여주는 PDE 가상주소의내용과일치한다. kd> dq FFFFFE C80 fffffe00`00165c `146f `146f4661 PDE Table Base가 FFFFFE 인것과 PPE, PDE 인덱스를고려하여계산하면다음과같은결과가도출된다. PTE Table Base가 FFF 인것과 PPE, PDE, PTE 인덱스를고려하여계산하면다음과같다. kd> dq FFF (b2 * 8 * 400 * 400) + (390 * 8 * 400) + (22a * 8) fff80000` `08ac `08ac2221 결국이페이지의물리주소는이내용에서 13~49 비트를취하여
12 64 비트윈도우커널분석 IA64 pfn 0x4560을얻고여기에페이지크기를곱한값인 0x8ac0000이다. 이제이페이지주소에가상주소의마지막 13비트인페이지옵셋 0x1a30을더하면물리주소를정확히구하게된다. kd> dq /p 8AC a `08ac1a ` ` `08ac1a ` e ` `08ac1a `40e ` `08ac1a `4800f ` `08ac1a `3c20f80a f0`e `08ac1a ` ` `08ac1a ` e `e042008c `08ac1aa ` ` `08ac1a50이라는물리주소가바로가상주소 e `c8455a30가가리키는실제메모리주소이다. 가상주소 e `c8455a30을디스플레이해보면그내용이정확히일치하는것을확인할수있다. kd> dq e `c8455a30 e `c8455a ` ` e `c8455a ` e ` e `c8455a `40e ` e `c8455a `4800f ` e `c8455a `3c20f80a f0`e e `c8455a ` ` e `c8455a ` e `e042008c e `c8455aa ` ` pphysicalpage = GetPhysicalPage( ppte ); // PTE에서페이지의물리주소를구한다. pphysicaladdr = pphysicalpage + npage_offset; // 페이지주소 + 페이지옵셋 64 비트를준비하는설렘과흥분 64비트시대를준비한다는미명아래시작되었던이번 64비트커널탐구연재는무려 5개월동안이나필자를밤새우게만들었던프로젝트이다. 여름새벽시원한공기에의지해원고를작성하던기억이아직남아있는데어느덧찬바람을맞으며이프로젝트를마무리하고있다. 나름대로는 64비트장비를아직접해보지못한독자들이많을것같아서새롭게경험한내용들을빨리독자들에게전하려고두서없이작업에몰두했던것같다. 연재를마치고나니과연독자들이이해하기쉽게내용을잘정리한것인지에대한의문이생기기도한다. 난해한내용들이많았을것으로생각하지만필자에게는 AMD64, IA64 를처음들여다보는과정이굉장히재미있고흥분되는작업이었기때문에독자들이그느낌을그대로전달받았기를바라는마음뿐이다. 기술에대한설렘을먹고사는사람들이바로개발자들아니던가? 이번연재를통해서 64비트환경을이해하고이에대한준비를본격적으로시작하는독자들이많아진다면필자에게그것보다더좋은결실은없을것이다. m a s o 정리 김세미 semsem@imaso.co.kr 만약가상주소를가지고물리주소를구하는프로그램을작성한다면가상주소로맵핑된 PTE Table Base와 PPE 인덱스, PDE 인덱스, PTE 인덱스, 페이지옵셋만가지고구현할수있다. 이과정을간단하게프로그램코드로적어보면다음과같다. #define IA64_PTE_BASE 0xFFF #define SIZE_PTE 8 // bytes #define SIZE_10BIT 1024 // 0x400 nppe_index = GetPPEIndex( pvirtualaddr ); // pvirtualaddr에서 33~42비트를취한다. npde_index = GetPDEIndex( pvirtualaddr ); // pvirtualaddr에서 23~32비트를취한다. npte_index = GetPTEIndex( pvirtualaddr ); // pvirtualaddr에서 13~22비트를취한다. npage_offset = GetPageOffset( pvirtualaddr ); // pvirtualaddr에서 0~12비트를취한다. ppte = (IA64_PTE_BASE + (nppeindex * SIZE_PTE * SIZE_10BIT * SIZE_10BIT) + (npdeindex * SIZE_PTE * SIZE_10BIT) + (npteindex * SIZE_PTE)); 참 + 고 + 자 + 료 MSDN Magazine, November 2000, UNDER THE HOOD, Programming for 64-bit Windows Windows Internals 4th Edition, Microsoft Press. Intel Itanium Architecture Software Developer s Manual, INTEL. 마이크로소프트웨어 281
Microsoft 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 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 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 informationMicrosoft PowerPoint - chap06-2pointer.ppt
2010-1 학기프로그래밍입문 (1) chapter 06-2 참고자료 포인터 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 포인터의정의와사용 변수를선언하는것은메모리에기억공간을할당하는것이며할당된이후에는변수명으로그기억공간을사용한다. 할당된기억공간을사용하는방법에는변수명외에메모리의실제주소값을사용하는것이다.
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 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 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 informationChapter ...
Chapter 4 프로세서 (4.9절, 4.12절, 4.13절) Contents 4.1 소개 4.2 논리 설계 기초 4.3 데이터패스 설계 4.4 단순한 구현 방법 4.5 파이프라이닝 개요*** 4.6 파이프라이닝 데이터패스 및 제어*** 4.7 데이터 해저드: 포워딩 vs. 스톨링*** 4.8 제어 해저드*** 4.9 예외 처리*** 4.10 명령어 수준
More informationMicrosoft 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실 전! 강 의 실 개발자를 위한 실전 64비트! 64비트 윈도우 커널 탐구 2 AMD64 명령어 대부분의 AMD64 명령어(Instructions) 역시 x86 명령어들과 같다 고 보면 된다. 다음의 예제 코드를 보면서 얼마나 비슷한지 느껴보자. mov [rbp-0x
실 전! 강 의 실 개발자를 위한 실전 64비트! 64비트 윈도우 커널 탐구 2 연 + 재 + 순 + 서 1회 2005. 9 64비트 시대를 향한 첫걸음, 커널모드 드라이버 포팅 2회 2005. 10 64비트 윈도우 커널분석 AMD64 3회 64비트 윈도우 커널분석 IA64 연 + 재 + 가 + 이 + 드 운영체제 64비트 윈도우 XP, 64비트 윈도우 2003
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 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 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 information슬라이드 1
명령어집합 주소지정모드 (addressing mode) 내용 명령어는크게연산자부분과이연산에필요한주소부분으로구성 이때주소부분은다양한형태를해석될수있으며, 해석하는방법을주소지정방식 ( 모드 )(addressing mode) 라한다. 즉피연산자정보를구하는방법을주소지정방식이라고함 명령어형식 주소지정 명령어형식에있는주소필드는상대적으로짧다. 따라서지정할수있는위치가제한된다.
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 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 information다른 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<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 information11장 포인터
누구나즐기는 C 언어콘서트 제 9 장포인터 이번장에서학습할내용 포인터이란? 변수의주소 포인터의선언 간접참조연산자 포인터연산 포인터와배열 포인터와함수 이번장에서는포인터의기초적인지식을학습한다. 포인터란? 포인터 (pointer): 주소를가지고있는변수 메모리의구조 변수는메모리에저장된다. 메모리는바이트단위로액세스된다. 첫번째바이트의주소는 0, 두번째바이트는 1, 변수와메모리
More informationMicrosoft Word - [Windows Hook] 6.HideProcess.doc
Hide Process Last Update : 2007 년 6 월 11 일 Written by Jerald Lee Contact Me : lucid78@gmail.com 본문서는 SSDT Hook을이용한프로세스를감추는기술에대해정리한것입니다. 제가알고있는지식이너무짧아가급적이면다음에언제보아도쉽게이해할수있도록쓸려고노력하였습니다. 기존에나와있는여러훌륭한문서들을토대로짜집기의형태로작성되었으며기술하지못한원문저자들에게매우죄송할따름입니다.
More informationMicrosoft PowerPoint - 30.ppt [호환 모드]
이중포트메모리의실제적인고장을고려한 Programmable Memory BIST 2010. 06. 29. 연세대학교전기전자공학과박영규, 박재석, 한태우, 강성호 hipyk@soc.yonsei.ac.kr Contents Introduction Proposed Programmable Memory BIST(PMBIST) Algorithm Instruction PMBIST
More information<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슬라이드 1
-Part3- 제 4 장동적메모리할당과가변인 자 학습목차 4.1 동적메모리할당 4.1 동적메모리할당 4.1 동적메모리할당 배울내용 1 프로세스의메모리공간 2 동적메모리할당의필요성 4.1 동적메모리할당 (1/6) 프로세스의메모리구조 코드영역 : 프로그램실행코드, 함수들이저장되는영역 스택영역 : 매개변수, 지역변수, 중괄호 ( 블록 ) 내부에정의된변수들이저장되는영역
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 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 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 information커알못의 커널 탐방기 이 세상의 모든 커알못을 위해서
커알못의 커널 탐방기 2015.12 이 세상의 모든 커알못을 위해서 개정 이력 버전/릴리스 0.1 작성일자 2015년 11월 30일 개요 최초 작성 0.2 2015년 12월 1일 보고서 구성 순서 변경 0.3 2015년 12월 3일 오탈자 수정 및 글자 교정 1.0 2015년 12월 7일 내용 추가 1.1 2015년 12월 10일 POC 코드 삽입 및 코드
More informationMicrosoft 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금오공대 컴퓨터공학전공 강의자료
C 프로그래밍프로젝트 Chap 13. 포인터와배열! 함께이해하기 2013.10.02. 오병우 컴퓨터공학과 13-1 포인터와배열의관계 Programming in C, 정재은저, 사이텍미디어. 9 장참조 ( 교재의 13-1 은읽지말것 ) 배열이름의정체 배열이름은 Compile 시의 Symbol 로서첫번째요소의주소값을나타낸다. Symbol 로서컴파일시에만유효함 실행시에는메모리에잡히지않음
More information설계란 무엇인가?
금오공과대학교 C++ 프로그래밍 jhhwang@kumoh.ac.kr 컴퓨터공학과 황준하 6 강. 함수와배열, 포인터, 참조목차 함수와포인터 주소값의매개변수전달 주소의반환 함수와배열 배열의매개변수전달 함수와참조 참조에의한매개변수전달 참조의반환 프로그래밍연습 1 /15 6 강. 함수와배열, 포인터, 참조함수와포인터 C++ 매개변수전달방법 값에의한전달 : 변수값,
More information<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 informationIoT 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 informationWinDbg 사용법
WinDbg 사용법 본사이트내에서취득한모든문서나이미지, 기타정보의소유권은 하제소프트에있으며동의없는타사이트에의게재나배포, 상업적이용은불가합니다. 자료사용에관한문의는 webmaster@hajesoft.co.kr 로해주시기바랍니다. hajesoft Corp. 2005. Seoul. All Rights Reserved. 프로그램개발에서디버깅은전체개발의 50% 이상의비중을차지할정도로중요하다.
More information슬라이드 제목 없음
ETOS-DPS-X Guide AC&T SYSTEM 1 ETOS-DPS-X 개요 ETOS-DPS-X Field Bus Network 중 Profibus-DP Network 에연결되는장비. ProfiBus-DP Network 시스템에 DP 통신을지원하지않는현장장비에대한통신서버기능구현. Profibus-DP Slave 동작하기때문에반드시 DP-Master 모듈이있는시스템에서적용가능.
More informationMicrosoft 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 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 information금오공대 컴퓨터공학전공 강의자료
C 프로그래밍프로젝트 Chap 14. 포인터와함수에대한이해 2013.10.09. 오병우 컴퓨터공학과 14-1 함수의인자로배열전달 기본적인인자의전달방식 값의복사에의한전달 val 10 a 10 11 Department of Computer Engineering 2 14-1 함수의인자로배열전달 배열의함수인자전달방식 배열이름 ( 배열주소, 포인터 ) 에의한전달 #include
More information목차 윈도우드라이버 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 informationINTRO Basic architecture of modern computers Basic and most used assembly instructions on x86 Installing an assembly compiler and RE tools Practice co
Basic reverse engineering on x86 This is for those who want to learn about basic reverse engineering on x86 (Feel free to use this, email me if you need a keynote version.) v0.1 SeungJin Beist Lee beist@grayhash.com
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 informationAPI 매뉴얼
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 informationMicrosoft Word - building the win32 shellcode 01.doc
Win32 Attack 1. Local Shellcode 작성방법 By 달고나 (Dalgona@wowhacker.org) Email: zinwon@gmail.com Abstract 이글은 MS Windows 환경에서 shellcode 를작성하는방법에대해서설명하고있다. Win32 는 *nix 환경과는사뭇다른 API 호출방식을사용하기때문에조금복잡하게둘러서 shellcode
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 informationPowerPoint 프레젠테이션
1. data-addressing mode CHAPTER 6 Addressing Modes 2. use of data-address mode to form assembly language statements 3. op of program memory address mode 4. use of program memory address mode to form assembly
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 informationhlogin7
0x07. Return Oriented Programming ROP? , (DEP, ASLR). ROP (Return Oriented Programming) (excutable memory) rop. plt, got got overwrite RTL RTL Chain DEP, ASLR gadget Basic knowledge plt, got call function
More informationMicrosoft 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 informationMicrosoft PowerPoint - ch10 - 이진트리, AVL 트리, 트리 응용 pm0600
균형이진탐색트리 -VL Tree delson, Velskii, Landis에의해 1962년에제안됨 VL trees are balanced n VL Tree is a binary search tree such that for every internal node v of T, the heights of the children of v can differ by at
More informationMicrosoft Word - 1. ARM Assembly 실습_xp2.doc
ARM asm 의구조 ARM Assembly 실습 1. 기본골격 AREA armex,code, READONLY ;Mark first instruction to execute start MOV r0, #10 MOV r1,#3 ADD r0, r0, r1 ; r0 = r0 + r1 stop NOP NOP B stop ; Mark end of file 위의 asm의구조를이해하고실행해보세요.
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 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 informationNo Slide Title
Copyright, 2017 Multimedia Lab., UOS 시스템프로그래밍 (Assembly Code and Calling Convention) Seong Jong Choi chois@uos.ac.kr Multimedia Lab. Dept. of Electrical and Computer Eng. University of Seoul Seoul, Korea
More information임베디드시스템설계강의자료 6 system call 1/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과
임베디드시스템설계강의자료 6 system call 1/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과 시스템호출개요 리눅스에서는사용자공간과커널공간을구분 사용자프로그램은사용자모드, 운영체제는커널모드에서수행 커널공간에대한접근은커널 ( 특권, priviledged) 모드에서가능 컴퓨팅자원 (CPU, memory, I/O 등 ) 을안전하게보호 커널수행을안전하게유지
More informationJVM 메모리구조
조명이정도면괜찮조! 주제 JVM 메모리구조 설미라자료조사, 자료작성, PPT 작성, 보고서작성. 발표. 조장. 최지성자료조사, 자료작성, PPT 작성, 보고서작성. 발표. 조원 이용열자료조사, 자료작성, PPT 작성, 보고서작성. 이윤경 자료조사, 자료작성, PPT작성, 보고서작성. 이수은 자료조사, 자료작성, PPT작성, 보고서작성. 발표일 2013. 05.
More informationComputer Architecture
명령어의구조와주소지정방식 명령어세트명령어의형식주소지정방식실제명령어의형태 이자료는김종현저 - 컴퓨터구조론 ( 생능출판사 ) 의내용을편집한것입니다. 2.4 명령어세트 (instruction set) 어떤 CPU 를위하여정의되어있는명령어들의집합 명령어세트설계를위해결정되어야할사항들 2 연산종류 (operation repertoire) CPU 가수행할연산들의수와종류및복잡도
More informationMicrosoft PowerPoint - a2.ppt [호환 모드]
마이크로컴퓨터의기본구조 2 장 x86 프로세서구조 ALU: 산술논리연산제어장치 (CU): 실행순서제어클럭 : 구성요소들의동작동기화 CPU + memory + I/O + bus 어셈블리언어 2 클럭 (Clock) CPU 와 Bus 동작은클럭에동기되어동작을한다. 메모리읽기사이클과대기상태 1 클럭사이클동안간단한동작을수행한다. 기계어명령어수행에적어도 1 클럭사이클이필요함
More information<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A634C0CFC2F72E BC8A3C8AF20B8F0B5E55D>
뻔뻔한 AVR 프로그래밍 The 4 th Lecture 유명환 ( yoo@netplug.co.kr) 1 시간 (Time) 에대한정의 INDEX 2 왜타이머 (Timer) 와카운터 (Counter) 인가? 3 ATmega128 타이머 / 카운터동작구조 4 ATmega128 타이머 / 카운터관련레지스터 5 뻔뻔한노하우 : 레지스터비트설정방법 6 ATmega128
More informationKEY 디바이스 드라이버
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 informationPowerPoint Presentation
GPU-based Keylogger Jihwan yoon 131ackcon@gmail.com Index Who am I Keylogger, GPU GPU based Keylogging - Locating the keyboard buffer - Capturing KEYSTROKES Demo About me Who am I 윤지환 CERT-IS reader BOB
More information슬라이드 1
Software Verification #3 정적분석도구, 단위 / 시스템테스트도구 Software Verification Team 4 강 정 모 송 상 연 신 승 화 1 Software Verification #3 정적분석도구, 단위 / 시스템테스트도구 CONTENTS 01 Overall Structure 02 Static analyzer SonarQube
More informationIDA 5.x Manual 07.02.hwp
IDA 5.x Manual - Manual 01 - 영리를 목적으로 한 곳에서 배포금지 Last Update 2007. 02 이강석 / certlab@gmail.com 어셈블리어 개발자 그룹 :: 어셈러브 http://www.asmlove.co.kr - 1 - IDA Pro 는 Disassembler 프로그램입니다. 기계어로 되어있는 실행파일을 어셈블리언어
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 informationData Structure
Function & Pointer C- 언어의활용을위한주요기법 (3) Dong Kyue Kim Hanyang University dqkim@hanyang.ac.kr 함수의인자전달 함수의인자전달 함수의인자전달방식 인자전달의기본방식은복사다. 함수호출시전달되는값을매개변수를통해서전달받는데, 이때에값의복사가일어난다. int main(void) int val = 10;
More informationMicrosoft PowerPoint - hy2-12.pptx
2.4 명령어세트 (instruction set) 명령어세트 CPU 가지원하는기계어명령어들의집합 명령어연산의종류 데이터전송 : 레지스터 / 메모리간에데이터이동 산술연산 : 덧셈, 뺄셈, 곱셈및나눗셈 논리연산 : 비트들간의 AND, OR, NOT 및 XOR 연산 입출력 (I/O) : CPU( 레지스터 ) 와외부장치들간의데이터이동 프로그램제어 : 분기, 서브루틴호출
More information이 장에서 사용되는 MATLAB 명령어들은 비교적 복잡하므로 MATLAB 창에서 명령어를 직접 입력하지 않고 확장자가 m 인 text 파일을 작성하여 실행을 한다
이장에서사용되는 MATLAB 명령어들은비교적복잡하므로 MATLAB 창에서명령어를직접입력하지않고확장자가 m 인 text 파일을작성하여실행을한다. 즉, test.m 과같은 text 파일을만들어서 MATLAB 프로그램을작성한후실행을한다. 이와같이하면길고복잡한 MATLAB 프로그램을작성하여실행할수있고, 오류가발생하거나수정이필요한경우손쉽게수정하여실행할수있는장점이있으며,
More informationPowerPoint 프레젠테이션
Text-LCD Device Control - Device driver Jo, Heeseung M3 모듈에장착되어있는 Tedxt LCD 장치를제어하는 App 을개발 TextLCD 는영문자와숫자일본어, 특수문자를표현하는데사용되는디바이스 HBE-SM5-S4210 의 TextLCD 는 16 문자 *2 라인을 Display 할수있으며, 이 TextLCD 를제어하기위하여
More information<4D F736F F D20C0CCBEBEC1A6BEEE5FC3A5BCD2B0B35F >
이씨제어 한글기술서적소개 1. SIMATIC S7-300/400 초급과정교육교재 S7-300/400 에대한초급교육에사용되는한글판교육교재. * 참고영어원문 : Programming with STEP 7, Automating with STEP 7 in STL and SCL A4 단면 280 쪽, 파워포인트컬러판 2. SIMATIC S7-300/400 중급과정교육교재
More informationMango-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디지털영상처리3
비트맵개요 BMP 파일의이해실제 BMP 파일의분석 BMP 파일을화면에출력 } 비트맵 (bitmap) 윈도우즈에서영상을표현하기위해사용되는윈도우즈 GDI(Graphic Device Interface) 오브젝트의하나 } 벡터그래픽 (vector graphics) 점, 선, 면등의기본적인그리기도구를이용하여그림을그리는방식 } 윈도우즈 GDI(Graphic Device
More informationvi 사용법
유닉스프로그래밍및실습 gdb 사용법 fprintf 이용 단순디버깅 확인하고자하는코드부분에 fprintf(stderr, ) 를이용하여그지점까지도달했는지여부와관심있는변수의값을확인 여러유형의단순한문제를확인할수있음 그러나자세히살펴보기위해서는디버깅툴필요 int main(void) { int count; long large_no; double real_no; init_vars();
More informationIP 심화 라우팅프로토콜적용시 라우팅테이블에서 이니셜이있는네트워크를설정하는것 : onnected 직접연결된네트워크를의미한다. 그러므로라우팅은 나는이런네트워크와연결되어있다. 를직접연결된라우터들에게알려주는것 1>en 1#conf t 1(config)#router rip 1
IP 심화 º 각 P 의게이트웨이는해당네트워크의마지막주소를사용한다. - P1 (210.220.10.1/26) 의게이트웨이 (5의 Fa0/0) : 210.220.10.63 /26 = 255.255.255.192 호스트비트수 : 32-26 = 6 비트 => = 64 그러므로 P1의 IP 210.220.10.1 중서브넷마스크에의거 26비트는변함이없고, 나머지 6비트가호스트비트로변하므로
More informationAPOGEE Insight_KR_Base_3P11
Technical Specification Sheet Document No. 149-332P25 September, 2010 Insight 3.11 Base Workstation 그림 1. Insight Base 메인메뉴 Insight Base Insight Insight Base, Insight Base Insight Base Insight Windows
More information네이버블로그 :: 포스트내용 Print VMw are 에서 Linux 설치하기 (Centos 6.3, 리눅스 ) Linux 2013/02/23 22:52 /carrena/ VMware 에서 l
VMw are 에서 Linux 설치하기 (Centos 6.3, 리눅스 ) Linux 2013/02/23 22:52 http://blog.naver.com /carrena/50163909320 VMware 에서 linux 설치하기 linux 는다양한버전이존재합니다. OS 자체가오픈소스이기때문에 redhat fedora, 우분투, centos 등등 100 가지가넘는버전이존재함
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 informationMicrosoft PowerPoint - System Programming Lab Week1.ppt [호환 모드]
System Programming Lab Week 1: Basic Skills for Practice Contents vi Editor 사용법 GCC 컴파일러사용법 Makefile 사용법 GDB 사용법 VI Editor Usage vi 모드 입력모드 : 실제문서를편집하는모드. 명령모드 : 키입력이바로명령이되는모드로서쓴내용을삭제하거나, 복사할때사용. ex 명령모드
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 informationWINDOW FUNCTION 의이해와활용방법 엑셈컨설팅본부 / DB 컨설팅팀정동기 개요 Window Function 이란행과행간의관계를쉽게정의할수있도록만든함수이다. 윈도우함수를활용하면복잡한 SQL 들을하나의 SQL 문장으로변경할수있으며반복적으로 ACCESS 하는비효율역
WINDOW FUNCTION 의이해와활용방법 엑셈컨설팅본부 / DB 컨설팅팀정동기 개요 Window Function 이란행과행간의관계를쉽게정의할수있도록만든함수이다. 윈도우함수를활용하면복잡한 SQL 들을하나의 SQL 문장으로변경할수있으며반복적으로 ACCESS 하는비효율역시쉽게해결할수있다. 이번화이트페이퍼에서는 Window Function 중순위 RANK, ROW_NUMBER,
More informationMicrosoft PowerPoint 웹 연동 기술.pptx
웹프로그래밍및실습 ( g & Practice) 문양세강원대학교 IT 대학컴퓨터과학전공 URL 분석 (1/2) URL (Uniform Resource Locator) 프로토콜, 호스트, 포트, 경로, 비밀번호, User 등의정보를포함 예. http://kim:3759@www.hostname.com:80/doc/index.html URL 을속성별로분리하고자할경우
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 informationMicrosoft PowerPoint - 권장 사양
Autodesk 제품컴퓨터사양 PRONETSOFT.CO 박경현 1 AutoCAD 시스템사양 시스템요구사양 32 비트 AutoCAD 2009 를위한시스템요구사항 Intel Pentium 4 프로세서 2.2GHz 이상, 또는 Intel 또는 AMD 듀얼 코어프로세서 16GH 1.6GHz 이상 Microsoft Windows Vista, Windows XP Home
More informationSecure Programming Lecture1 : Introduction
Malware and Vulnerability Analysis Lecture1 Malware Analysis #1 Agenda 악성코드정적분석 악성코드분석 악성코드정적분석 정적분석 임의의코드또는응용프로그램을실행하지않고분석 ASCII 문자열 (ex. URL) API 리스트 Packing VT 기타등등 정적분석 : 파일식별 악성으로의심되는파일의형태식별 file
More informationSQL Developer Connect to TimesTen 유니원아이앤씨 DB 기술지원팀 2010 년 07 월 28 일 문서정보 프로젝트명 SQL Developer Connect to TimesTen 서브시스템명 버전 1.0 문서명 작성일 작성자
SQL Developer Connect to TimesTen 유니원아이앤씨 DB 팀 2010 년 07 월 28 일 문서정보 프로젝트명 SQL Developer Connect to TimesTen 서브시스템명 버전 1.0 문서명 작성일 2010-07-28 작성자 김학준 최종수정일 2010-07-28 문서번호 20100728_01_khj 재개정이력 일자내용수정인버전
More informationSNU =10100 =minusby by1000 ÇÁto0.03exÇÁto0.03exÇÁ=10100 =minusby by1000 ·Îto0.03ex·Îto0.03ex·Î=10100 =minusby by1000 ±×to0.
프로그래밍 원리 (Principles of Programming) Part IV Prof. Kwangkeun Yi 차례 1 안전하게프로그래밍하기 : 손수 vs 자동 2 맞는지확인하기쉽게프로그램하기 3 대형프로그래밍을위한기술 : 모듈프로그래밍 다음 1 안전하게프로그래밍하기 : 손수 vs 자동 2 맞는지확인하기쉽게프로그램하기 3 대형프로그래밍을위한기술 : 모듈프로그래밍
More informationBMP 파일 처리
BMP 파일처리 김성영교수 금오공과대학교 컴퓨터공학과 학습내용 영상반전프로그램제작 2 Inverting images out = 255 - in 3 /* 이프로그램은 8bit gray-scale 영상을입력으로사용하여반전한후동일포맷의영상으로저장한다. */ #include #include #define WIDTHBYTES(bytes)
More information64 비트시대를향한첫걸음, 커널모드드라이버포팅 이없기때문에무조건 64비트로포팅해야한다고이미말했다. 그렇다면드라이버를사용하는제품에서유저모드모듈들도모두 64비트로포팅해야할까? 물론모두 64비트로포팅하면아주좋겠지만, 일반적인제품들은드라이버모듈의수보다유저모드모듈의수가월등히많을
실 전! 강 의 실 개발자를위한실전 64 비트! 64 비트윈도우커널탐구 연 + 재 + 순 + 서 1회 2005. 9 윈도우커널모드드라이버 64비트포팅 2회 64비트윈도우커널분석 AMD64 3회 64비트윈도우커널분석 IA64 연 + 재 + 가 + 이 + 드운영체제 64비트윈도우 XP, 64비트윈도우 2003 개발도구 윈도우 DDK 최신판기반지식 윈도우커널모드드라이버개발응용분야
More informationOCW_C언어 기초
초보프로그래머를위한 C 언어기초 4 장 : 연산자 2012 년 이은주 학습목표 수식의개념과연산자및피연산자에대한학습 C 의알아보기 연산자의우선순위와결합방향에대하여알아보기 2 목차 연산자의기본개념 수식 연산자와피연산자 산술연산자 / 증감연산자 관계연산자 / 논리연산자 비트연산자 / 대입연산자연산자의우선순위와결합방향 조건연산자 / 형변환연산자 연산자의우선순위 연산자의결합방향
More information-. Data Field 의, 개수, data 등으로구성되며, 각 에따라구성이달라집니다. -. Data 모든 의 data는 2byte로구성됩니다. Data Type는 Integer, Float형에따라다르게처리됩니다. ( 부호가없는 data 0~65535 까지부호가있는
Dong Yang E&P 인버터 Modbus Monitoring Protocol 2018. 08. 27 Sun Spec (Modbus-RTU) -. Modbus Protocol 각 Field에대한설명 Frame갂의구별을위한최소한의시갂 BaudRate 9600에서 1bit 젂송시갂은 Start 0.104msec, (3.5 character Times, 1 Character
More information설계란 무엇인가?
금오공과대학교 C++ 프로그래밍 jhhwang@kumoh.ac.kr 컴퓨터공학과 황준하 5 강. 배열, 포인터, 참조목차 배열 포인터 C++ 메모리구조 주소연산자 포인터 포인터연산 배열과포인터 메모리동적할당 문자열 참조 1 /20 5 강. 배열, 포인터, 참조배열 배열 같은타입의변수여러개를하나의변수명으로처리 int Ary[10]; 총 10 개의변수 : Ary[0]~Ary[9]
More informationInsertColumnNonNullableError(#colName) 에해당하는메시지출력 존재하지않는컬럼에값을삽입하려고할경우, InsertColumnExistenceError(#colName) 에해당하는메시지출력 실행결과가 primary key 제약에위배된다면, Ins
Project 1-3: Implementing DML Due: 2015/11/11 (Wed), 11:59 PM 이번프로젝트의목표는프로젝트 1-1 및프로젝트 1-2에서구현한프로그램에기능을추가하여간단한 DML을처리할수있도록하는것이다. 구현한프로그램은 3개의 DML 구문 (insert, delete, select) 을처리할수있어야한다. 테이블데이터는파일에저장되어프로그램이종료되어도사라지지않아야한다.
More informationiii. Design Tab 을 Click 하여 WindowBuilder 가자동으로생성한 GUI 프로그래밍환경을확인한다.
Eclipse 개발환경에서 WindowBuilder 를이용한 Java 프로그램개발 이예는 Java 프로그램의기초를이해하고있는사람을대상으로 Embedded Microcomputer 를이용한제어시스템을 PC 에서 Serial 통신으로제어 (Graphical User Interface (GUI) 환경에서 ) 하는프로그램개발예를설명한다. WindowBuilder:
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 informationMicrosoft Word - Reverse Engineering Code with IDA Pro-2-1.doc
Reverse Engineering Code with IDA Pro By Dan Kaminsky, Justin Ferguson, Jason Larsen, Luis Miras, Walter Pearce 정리 : vangelis(securityproof@gmail.com) 이글은 Reverse Engineering Code with IDA Pro(2008년출판
More information취약점분석보고서 [Photodex ProShow Producer v ] RedAlert Team 안상환
취약점분석보고서 [Photodex ProShow Producer v5.0.3256] 2012-07-24 RedAlert Team 안상환 목 차 1. 개요... 1 1.1. 취약점분석추진배경... 1 2. Photodex ProShow Producer Buffer Overflow 취약점분석... 2 2.1. Photodex ProShow Producer Buffer
More information목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2
제 8 장. 포인터 목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2 포인터의개요 포인터란? 주소를변수로다루기위한주소변수 메모리의기억공간을변수로써사용하는것 포인터변수란데이터변수가저장되는주소의값을 변수로취급하기위한변수 C 3 포인터의개요 포인터변수및초기화 * 변수데이터의데이터형과같은데이터형을포인터 변수의데이터형으로선언 일반변수와포인터변수를구별하기위해
More informationPowerPoint 프레젠테이션
DEVELOPMENT ENVIRONMENT 2 MAKE Jo, Heeseung MAKE Definition make is utility to maintain groups of programs Object If some file is modified, make detects it and update files related with modified one 2
More informationMicrosoft Word doc
TCP/IP 구조 1. I.P 구조설명 2. ARP 구조설명 3. TCP 구조설명 4. UDT 구조설명 5. RIP 구조설명 6. BOOTP 구조설명 7. TFTP 구조설명 destination addr source addr type data CRC 6 6 2 46-1500 4 type 0X0800 IP datagram 2 46-1500 type 0X0806
More informationMicrosoft PowerPoint - ch07.ppt
chapter 07. 시스코라우터기본동작 한빛미디어 -1- 학습목표 시스코라우터외적, 내적구성요소 시스코라우터부팅단계 시스코라우터명령어모드 한빛미디어 -2- 시스코라우터구성요소 라우터외부구성요소 (1) [ 그림 ] 2600 라우터전면도 인터페이스카드 전원부 LED 라우터조건 한빛미디어 -3- 시스코라우터구성요소 라우터외부구성요소 (2) [ 그림 ] VTY 를이용한라우터접속
More information1. What is AX1 AX1 Program은 WIZnet 사의 Hardwired TCP/IP Chip인 iinchip 들의성능평가및 Test를위해제작된 Windows 기반의 PC Program이다. AX1은 Internet을통해 iinchip Evaluation
1. What is AX1 AX1 Program은 WIZnet 사의 Hardwired TCP/IP Chip인 iinchip 들의성능평가및 Test를위해제작된 Windows 기반의 PC Program이다. AX1은 Internet을통해 iinchip Evaluation Board(EVB B/D) 들과 TCP/IP Protocol로연결되며, 연결된 TCP/IP
More information비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2
비트연산자 1 1 비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2 진수법! 2, 10, 16, 8! 2 : 0~1 ( )! 10 : 0~9 ( )! 16 : 0~9, 9 a, b,
More information이도경, 최덕재 Dokyeong Lee, Deokjai Choi 1. 서론
이도경, 최덕재 Dokyeong Lee, Deokjai Choi 1. 서론 2. 관련연구 2.1 MQTT 프로토콜 Fig. 1. Topic-based Publish/Subscribe Communication Model. Table 1. Delivery and Guarantee by MQTT QoS Level 2.1 MQTT-SN 프로토콜 Fig. 2. MQTT-SN
More information