음...나도 stl을 쓰고 싶어서….

stl을 시작했다…

책에 이런 내용이 있어..나도 그대로 해보았다…

나도 그 흥분을 느끼고 싶어~~~


그대로 실행해 보았다.


그런데 왠걸~~!!!


에러만 나온다….


error C2679: binary '<<' : no operator found which takes a right-hand operand of type 'std::wstring' (or there is no acceptable conversion)


이 내용을 번역해보면….

이런 이런 std::wstring을 어떻게 처리해야 할지 모르겠다는 것 같군요…

뭐지???

a right-hand operand를 처리할 수 있는 operator가 없다고~~!!!


이런 이런 뭐지????


그래서...여기 저기 뒤져보며..이전에 STL을 사용했던 것을 기억해보니…

이전에도 이런 에러가 발생했던 것 같다…


결국  .c_str() 을 string에 붙여야 한다.

자. string 변수에 .c_str()함수를 붙여서 해보겠습니다.

.c_str() 함수를 붙여서 하니….에러없이 아주 잘 작동합니다.^^


자 보이시죠~~!!!!!!

흐...


뭐지...책이 잘못된 것일까????



책이 잘못된것 일까?

gcc는 될지 모르지...확인해보자..

linux gcc에서 말이다.


이렇게 하고 컴파일을 했습니다.

그랬더니….

뭐지~~

리눅스에서는 .c_str()을 붙이지 않아도….잘되네….

뭐지???

윈도우의 컴파일러 버전이 낮아서 그런가???

음… linux의 g++이라는 녀석의 cout에는 string을 처리할 수 있는 operator 가 있는가 보다.


새로운 버전인 Visual Studio 2015를 설치해보자…


그러고 보면….나는 아직도 string이라는 녀석을 모린다.


STL의 string말이다……


Visual Studio 2015를 웹으로 받아 설치하는데 시간이 조금 거리네요^^

그래서 이전에 노트북에 설치해 놓았던 Visual Studio 2013으로 테스트 해 보았습니다.


그랬더니~~!!!


해 보았더니~~!

에러가 발생하지 않네요….

잘되네요~~

그렇다면 결론은 Compiler 버전이 낮아서 발생한 문제였는가 보네요…

성공한 그림입니다. “test”라고 잘 찍혔습니다….


c_str()함수를 붙여야 했던 Visual Studio Version은 2008(9.0 Version)이였습니다.


그리고, .c_str()을 붙이지 않아도 됐던 Visual Studio Version은…2013(12.0)이였습니다.


음. 아무튼 최신 C++에서는 붙이지 않아도 되는 것 같습니다.

오늘은 여기끼자..

다음에는 string에 대해서 좀더 자세히 뜯어 먹어봅시다.

다들 추석 명절 잘 보내세요~~!


추석 명절에도 저에게 블로깅 할 수 있는 기회가 생길기 모르겠습니다.

주님께 기도해보겠습니다.

할렐루야~~!









오늘은 6명이 왔다….


그리고 나는 시스템 부분에 대해서 이야기 해주는 거라고 말하면서…

이런 저런 이야기.. CPU에 대한 이야기등을 말하기 시작했다…


나는 OS라는 녀석을 만들고 싶었다.

왜냐하면, 그 당시 2005년 당시에도 OS만 만들어도….뭔가 알아 주는 때였다……


그래서 나는 OS라는 녀석을 만들고 나의 실력을 인정받고 싶었다….


그래서, 나는 어디에서 주어 들은 “프로텍티드”모드에 대해서 사람들에게 말하기 시작했고….


프로텍티드 모드로 전환하기 위해서는 어떻게 해야 하죠?


고수에게 물어보니...아주 당연하다는 듯이 이렇게 말씀하셨다…..


“씨알 쓰리” 레지스터를 건들어줘야 쥐라고~~!!!

“씨알 쓰리가 뭔가요?”라고 물어보고 싶었지만, 그것도 모르냐는 소리를 들을 까봐 두려워 물어보지 못했다……..


그리고, 인터넷을 뒤져보았다…


씨알이라는 것은…..인텔 CPU의 아주 중요한 녀석이였습니다.


위키에도 있더라구요~~~(https://en.wikipedia.org/wiki/Control_register)

Control Register라는 녀석을 말하는 것이였어요


CR (콘트롤 레지스터) 인텔 CPU에만 있는 녀석 같아요~~

다른 ARM이니.. 다른 CPU에는 없는 것 같아요~~~!!!


A control register is a processor register which changes or controls the general behavior of a CPU or other digital device. Common tasks performed by control registers include interrupt control, switching the addressing mode, paging control, and coprocessor control.

출처 : https://en.wikipedia.org/wiki/Control_register

위키에 이렇게 쓰여져 있어요~~!

프로세서 레지스터이다….프로세서 레지스터는 뭐 특별한 것일까?


변경하거나(changes) 콘트롤(controls)을 하는 것이다….뭐를?

the general behavior of a CPU or other digital device….

CPU의 일반적인 비해이비어(behavior)  

음….아니면. 어더 디지털 디바이스의 제너럴 비헤이비어(일반적인 behavior)를 변경하거나 콘트롤 하는 프로세서 레지스터!!!

뭔말이야~~!!

CR이...즉 CPU의 온각 설정을 세팅하는 것입니다…..


음….위 두문장이 굉장히 중요하구나~!!!


Common tasks performed by control registers include interrupt control, switching the addressing mode, paging control, and coprocessor control.

이 문장 해석 가능하겠죠^^?

ㅎㅎㅋㅋ

일반적인 테스트들은 퍼폼드….퍼폼드…. 실행된…. 콘트롤 레지스터들에 의해…..

포함해요….

아..이제 해석되는군요…


콘트롤 레지스터에 의해 실행되는 Common tasks는


  1. 인터럽트 콘트롤

  2. 어드레싱 모드 스위칭

  3. 페이징 콘트롤

  4. 코프로세서 콘트롤

이다. 즉.. CR(Control Register)가지고 할 수 있는 것들을 말한다~~!


인터럽트, 어드레싱, 페이징, 코프로세서까지...말이다!!!

이것을 CR이 하는 것이다!!! 씨알이 말이다!!!





프로세스에 대한 이야기를 하다 말았다…


프로세스에 대해서 좀더 썰을 풀고 싶었지만….생각 나는 것이 없었다…


프로세스는 환경을 만드는 것이다...라고 말해 주었다……


프로세스…




오늘은 여기 까지~~!!


포인터에 대해서..글을 써야 한다.


일단…

포인터에 대한 글을 써야 한다….


마소에 연재하는 것이다.


포인터를 내가 접한것은..대학교2학년…


그때는 도스라는 녀석을 가지고 개발을 했을때이다.


포인터의 주소가 실제 물리메모리의 주소와 같았다.


그런데, 지금은그렇지 않다…


C나 C++에서 포인터가 가르키고 있는 주소는

더이상 물리 메모리 주소는 아닌것이다.


뭐...당연한 것이다….


하지만, ….


음……..

이 포인터에 대한 글을 써야 한다…

이런..



음……….


음…………………..


음…..그렇다…..


주소…….


주소에 대해서 이야기 해보자….

메모리 주소…


요즘은 실제 메모리를 직접 쓰는 OS는 없다…

모두다...가상메모리라는 개념을 만들고…

물리메모리를 아주 효과적으로 사용하고 있는 것 같다…


아주 효과적으로 말이다!!!


간만에 글을 쓰니..어색하군요…..


포인터를 알아?

모르면 모른다고해~~~~!!


니들이 게맛을 알아?

아니 포인터를 알아?



포인터는…….

포인터는 뭐지?

포인터 변수가 있지….


결국 주소를 가르치는 곳이지…..


메모리의 주소


메모리의 역할을 데이타를 저장하는 역할을 하지…


데이타를!!!!


데이타를 저장하는 역할을 한다…


저장시킬려면…


포인터변수를 선언하고….


그곳에 저장을 하면...결국


값이 메모리에 저장이되는 것이다…..


자...테스트를 해보자…


음…


cData라고 하는 녀석을 만들고…

자료형은… CHAR….


그리고, ‘a’를 저장한다….


그리고 cData라고 하는 녀석의 메모리 주소값을 알아낸다.


메모리 주소값…..


&


&&&&&

이 녀석을 이용하면…


메모리의 주소값을 알주 있쥐~



&은 뭐라고 읽어야 하는가?



메모리의 주소를 알아내어…


그 주소를 저장하는 곳이


포인터 변수랍다…


CHAR cData = ‘a’;


&cData; ← 이러게 하면… cData의 메모리 주소를 알 수 있죠~!


당연한거지만...말입니다.


이 주소를 알아서 뭘할 수 있을까요???


일단 이 주소가 뭔지나  알아봅시다.





int _tmain(int argc, _TCHAR* argv[])

{

char cData;

printf("0x%08X", &cData);


return 0;

}


이렇게 하면…

이렇게 화면에 찍히죠~~!!

흐~~



음...저 메모리 주소가…


char cData; 라는 변수가 살고 있는 곳이죠~!

ㅎㅎ

cData라는 변수의 주소이죵~~!!


메모리 주소!!


메모리 주소~!!!


뭐죠?

메모리 주소…

그럼 뭐가 필요한거죠?



메모리 주소가 얼마나 중요한 건데~~~!






미친감자가..갑자기..

포인터가 먹을  수 있는 거냐고 물어봅니다…


이상한가?

흐흐흐






음...어떻게 풀어가볼까?

흐…

이렇게 글을 써도 되는것일까?


죄송합니다.



흐..성령님…

죄송해요…

이렇게 무식함으로 글을 써가는것..죄인가요?



모르겠다…

살려보자…


다음장면은..

먹어버리는거쥐~~~

포인터를


음…


포인터를 먹어버리는 미친감자?^^;


모르겠다…

20일까지 …

보내줘야 하는데…

모르겠다…


음…


음..

음…

포인터변수는 메모리 주소값을 저장하는 변수인데..



음...여러분 어떻게 했으면 좋겠어요?


이중 포인터는 뭘까요?


포인터의 포인터값을 가지고 있으니..


주소안으로 가면 또다른 주소가 나오는 거쥐뭐~~!!


보통 2차원 배열같은경우 이런거죠~~!


실제값은 주소의 주소값을 가야 나오는 거져~~!!

그렇죠^^?


흐흐흐

포인터를 먹던 미친감자

스스로 이게 뭐하는 짓인가 생각이 들어

눈물을 흘리는 장면이다.


하지만 미친감자 군대가기전 정말 이러고 살았던 적이 있다.

컴퓨터와 진정한 대화를 나눈다고..

기계어로 대화를 시도하였고…

포인터정도 먹는것은 아무 이상한 짓도 아니였다.

지금 나이먹어 사람답게(?) 변한것이다.

ㅎㅎㅎ

이전에는 아니 내가 포인터를 먹고 소화해내다니..하고 기쁨의 눈물을 흘렸을 것이다.~!



자 자 포인터에 대한 설명 들어갑니다.


메모리 주소값을 저장하기 위한 자료형이다라고

설명해보았습니다!!!


맞죠^^?


포인터는 자료형 맞죠^^?


자료의 형태


주소값을 저장하는 자료형태…


그러면…


메모리 주소는 뭔가요?


메모리에도 주소가 있는 건가요?


야..메모리는 너의 주소는 어떻게 되니~!


나는 0x0101abcd 야..


너는 주소가 어떻게 되니?

이따가 놀러가고 싶은데~~!!


나 오늘 그 금방에 놀러갈 일이 있거든~~!!


그것 아닌것 같은데;;

이상한 헛소리를 하고 있습니다.


발차기 들어갑니다~~(너무 폭력적인가요?;;;;;;)


음..사랑으로 감싸줄까요^^?

그럽시다…

내가 중보기도해줄께..

너가 정신차리고...올바른 소리를 할 수 있도록 말이야~!




이런 정말 쓸대없는 그림으로 공백을

채워가고 있습니다.

죄송합니다.


제가 무식하고 창의력도 없어서….흐~

성령님 도와주소서~!























이번달은 포인터에 대해서 썰을 풀어야 한다.


포인터….

포인터는 무엇인가?


포인터…..pointer


가리키는 놈……………..


가리키는 녀석….


구글에서 ..이렇게 검색을 해보았다.


pointer



과연 뭐가 검색결과로 나올줄 아세요???


과연 개발자가 원하는 그 결과가 나올까요???


흐흐흐흐



결과는~~~!!!


개가 나오는 군요…


아….


‘포인터’

개였군요…


영어로 ‘pointer’로 검색하면

개의 한 종이 나오는 것이군요!!


‘포인터’종은 이렇게 몸에 포인터가 많죠~!

ㅋㅋ



사냥개였군요…

영국개군요….


성격이 있네요.~오~

침착하고 쾌활하며 충성스러우며 부드러우면서 활동적이며 애정이 풍부한 성격~

음..아주 훌륭한 성격인데요~~!!



자 이번엔 한글로 ‘포인터’를 검색해보니…

음...

3가지를 보여주는 군요..구굴은 말이죠~

그런데, 씨언어의 포인터가 가장먼저 나오고

그다음 개~

그 다음은 프레젠테이션시 사용하는 포인터~!

ㅎㅎㅎ


그래도, 개발자가 원하는 포인터를 먼저 보여주는 군요…….

ㅎㅎㅎㅎ



암튼….


포인터는

점이 많은 녀석이던가?

아니면...뭔가를 가르키는 것을 말하는 것 같군요…


그렇죠?


가르키는 것~~


손가락 같은 것으로~~!!


이런 것~~~!!


음..컴퓨터에서 많이 보던것인데..

인것도 결국 뭔가를

가르킬때 사용하는 것 맞네요~~~!!



아니면

레이즈 포인터~~



컴퓨터 프로그램 C언어나 C++언어에서

포인터는 결국 메모리를 가르키는

녀석이지용~~


메모리 주소를 말이죠~~!!!


음...컴퓨터에서 메모리를 정말 중요하죠~

그렇죠?

당연하죠~!

ㅋㅋㅋ


메모리에는 0번부터 주소가 부여가 되고요..


내가 원하는 정보가 데이타가

어느 주소에 저장되어 있는지를 알려주는 거죠~~!!!


메모리 주소는 0번부터 시작한다…..


그리고………..

CPU라는 녀석의 메모리 주소역량에 따라…

결정되죵

다들 아시죠^^?


보통 32비트 CPU는 메모리 주소도 32비트

보통 64비트 CPU이면…..당연히 메모리 주소도 64비트


이 녀석은..32비트 CPU~~

이녀석의 스팩문서를 보면..

이런 문구가 있죠~~!



Address bus...32비츠( bits)라고 젹혀있죠~~

음….32비트 컴퓨터라는 말이죵….

물론 데이타 버스도 확인해  봐야 하죵…


암튼….


어드레스 버스….~~~!!!!


음..어르레스 버스가 32비트!!


32비트 ….어드레스 버스입니다.흐~~~


이런것은 아니죠?


흐흐흐

미안합니다.

음...엉뚱한 이야기나 하고 미안합니당~~!!


알면 됐어~~!



알면 됐어~!


자 64비트 CPU는 ???


음… AMD가 만든 32비트 호환 64비트 CPU~~!!

이 녀석은...어드레스 버스가 64비트죵~~!






64비트 어드레스 버스가 나가신다~~!!

비끼시용~~!!



음...암튼…


32비트 어드레스 버스이면…

보통 4Gbyte의 메모리를 접근 가능하고


64 비트이며…~~


너무 커서 말씀 드릴 수 가 없을 것 같군요…

기억이 나질 않았어…

알았었는데..


바로 검색하면...이렇게 나와용~~!

16엑사바이트~~




2의 64승~~이면…

64-bit는 2의 64승, 18446744073709551616BYTE, 18EB (1EB = 1000TB)



18446744073709551616BYTE

18EB (1EB = 1000TB)

18


https://technet.microsoft.com/ko-kr/library/cc700734(TechNet.10).aspx



바이트 크기

SI 접두어

전통적 용법

이진 접두어

기호(이름)

기호

기호(이름)

V값

kB (킬로바이트)

10001 = 103

KB

10241 = 210

KiB (키비바이트)

210

MB (메가바이트)

10002 = 106

MB

10242 = 220

MiB (메비바이트)

220

GB (기가바이트)

10003 = 109

GB

10243 = 230

GiB (기비바이트)

230

TB (테라바이트)

10004 = 1012

TB

10244 = 240

TiB (테비바이트)

240

PB (페타바이트)

10005 = 1015

PB

10245 = 250

PiB (페비바이트)

250

EB (엑사바이트)

10006 = 1018

EB

10246 = 260

EiB (엑스비바이트)

260

ZB (제타바이트)

10007 = 1021

ZB

10247 = 270

ZiB (제비바이트)

270

YB (요타바이트)

10008 = 1024

YB

10248 = 280

YiB (요비바이트)



엑사 바이트….

10의 18승~!!


TB를 지나.. PB(페타바이트)를 지나…

EB(엑사 바이트)가 나오는 군요…


이게 ...암튼. ..64비트로 표현할수 있는 메모리의 크기 라는 점…


암튼..이정도로 사용하기 불가능하다는 점…


거의 무한의 메모리 주소르 느껴진다는 점….


무한~~!!


명수 형님~~

10엑사바이트 입니당~~!!


음…..

안녕하세요^^ 미친감자입니다.

Hi I’m CrazyPotato.


Today, I want to study about the registry.

오늘은 레지스트리에 대해서 알아볼것입니다.

아니 알아보지 몰고 레지스트리와 같이 놀아봐요~~!!


어떻게 놀수 있죠? 레지스트리와?

모르겠네요..어려서 부터 저는 레지스트리와 같이 놀아본적이 없어셔….


이렇게 놀아야 하나? 그림으로 표현해 보겠습니당~~!(그림도 못그리는것이 계속 그리네요 ㅋ~!)









Registry를 가지고 놀때도...하나님 타령을 하고 있는 미친감자때문에 레지스트리는 미칠려고 합니다.

자..그래도, 레지스트리에 대해서 계속 알아보아요~!




registry 를 가지고 놀려면…먼저~~!RegOpenKeyEx()

이 함수로..키라고 하는 것을 열어야 합니다.

그러면, 핸들을 넘겨주십니다.



그러면, 이 핸들을 가지고 읽고 쓰고 맛보고 ㅋㅋ 하면됩니당~!



RegOpenKeyEx()의 인자값들을 확인해보자..


그런데, 인자값들, 그러니까...저 함수에게 쳐먹일 인자값을 확인하기 전에,

도대체 레지스트리라는 말은 무슨말이지나 알고 지나갑시다….  사전적 의미나 찾아보아요…




등기소라는 의미를 가지고 있다…음..등기소라 하면……..땅 등기같은 것일까요?

이런 무식쟁이 미친감자여...무슨 헛소린가?

드런데 말이 되는 것 같기도 하고...ㅋㅋㅎㅎㅎㅎ


땅을 소유하기 위해서는 등기를 국가에 등록해야 합니다. 그래야, 인정해주는 것입니다.

아시죠^^ ‘땅 등기’요~


이런게 소위 땅기라고 하는 것입니다.

그런디...코딩하면서...이게 뭐냐?

땅 등기는 왜 보여주는가 말입니다요~!

역쉬 미친감자 정신 없는 장의 스타일인것입니다용~!

ㅋㅋㅋ


암튼...레지스트리란~!

컴퓨터 아니 윈도우즈 등리소라 말입니다.


알것죠~~!!


등기소 가면 저렇게 생겼을 것입니다.

사진은 구글링해서 붙였습니다.

(사진에 대해서 저작권을 행사하시고자

하시는 분은 열락주시가 바랍니다.

바로 내리던지 바꾸던지 하겠습니덩)



자...윈도우 등기소 한번 구경해 볼까요^^?


다 아는 내용일 수 있으나..

윈도우키 + R 키 누르고…

‘regedit’를 입력하고 엔터를

힘차게 쳐주면 되용~~!!


엔터를 힘차게 쳐야 되요

힘차게…

만일 힘차지 않으면

실행 되어요…(이게 뭔소리여~!, 말이여 막걸리여~

막걸리네 ㅋㅋㅋㅋ)

그러면, 비스타의 이상의 정품 윈도우를 가지고 있으신분들은

권한상승창이 나타나고…

그리고 나서

등기소가 나오는 것입니다.(뭐..아는 내용으로 글을 다 채우고 있네요...ㅋㅋㅋㅋ;;;이런;;;;)


이 녀석입니당~~!

ㅋㅋㅋㅋ

이게 윈도우 등기소~!!

제 마음대로...명명합니당~~!!

이것 완전….

야매...강의입니당~~!!!

죄송합니다.

야매는 아니어야 겠기에…

열심히라도 하겠습니당~~!


저 등기소라는 곳등록된

녀석의 값을 읽어 보도록

해보자고용~!!!


자장~!!



암튼…등기소든… 레지스트리든...에서 값을 읽기 위해서는


RegOpenKeyEx()함수를 사용하면 됩니다. 끝에 Ex()가 있다는 것은 RegOpenKey();도 있다는 말인데…

귀찮으니...그냥 RegOpenKeyEx()먼저 사용해보도록 하겠습니다. 이유는 없습니다.

그냥 입니다. 나이키 카피아시죠 Just do it!!!!!!! .이유같은 것 없습니다.

그냥 그렇게 하고 싶으니까..하는 거였습니다…ㅋㅋㅋㅋㅋㅋㅋㅋ안되는데..그냥하면 안되는데…..위험한데...이유와 명분이 있어야 하는데...그렇습니다.이유는...레지스트리에 대해서 학습해야 하니까…? 왜 전 우주적으로 가장 훌륭한 시스템 프로그래머가 되어야 하니껭~~!!

참말로 말많네~~!!


자...코드를 짜보아요~~!


어떻게 짜냐고요???


이렇게 짜면 되는거에요~~


이런식으로….짭니다…


미친소릴 했네요…


코드를 짭시다…;;



자 실제로 짜 보겠습니다.




#include "stdafx.h"

#include <windows.h>


int _tmain(int argc, _TCHAR* argv[])

{

HKEY hKey = NULL;

LONG lResult;


lResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE,

L"SYSTEM\\CurrentControlSet\\Control",

0,

KEY_READ,

&hKey);

if ( ERROR_SUCCESS != lResult )

{//에러라고..탈출하라고~!

goto quit;

}

DWORD dwType = REG_SZ;

wchar_t szData[256] = L"";

DWORD dwSize = 256;

RegQueryValueEx( hKey,

L"CurrentUser",

NULL,

&dwType,

(LPBYTE)szData,

&dwSize);


quit:

return 0;

}






szData에..값을 읽어오면 되는 거죵~

여러분 뜨게질한다고 생각하고

코드를 짜셨어용^^?


이렇게하면..레지스트리에 있는 값을 아주 잘 읽어올 수 있습니당..

예외처리가 되다 말았지만…

그건 다음에 해요..너무

귀찮아 살겠으니까용~~!!

나는 천상개발자가 아닌가? 긴가? 나도 모르겠당...ㅎㅎㅎ

나의 친구는 컴퓨터였어;;;

앞으로 나의 친구는 컴퓨터일것인가?

아니다.

아의 진짜 친구는 예수님이시다..

부활을 하지 않은 존재와는

나는 친구가 될 수 없는 것인가?

ㅎㅎㅎ

부활은 해야 나의 진짜 친구가 될수 있는 것이당

부활을 아는가?

Resurrection.

죽었다 살아는것!

그것도 더 훨실 좋은 몸으로 부활해야하는 것!




랩으로 하루에 약5~10분정도 아주 짭게 스터디를 하고 있습니다.
인터널스 책 내용을 씹어먹습니다.^^~!!

맛있게 씹어 먹었습니다. 랩으로 

아주 즐겁게~~!

여러분들의 시스템 프로그래밍 권법 익히시는대 도움이 되길 바랍니다.



흐...아침마다
약 10분씩 우린 랩으로 윈도우즈 인터널스를 읊어대지~~ 

랩으로 하니.. 글자들이 살아 움직이는 것 같다~!

 그래서 우린 계속해서 이렇게 10분정도 읊어댄다~~!!! 랩으로 ~~랩으로~~


나는 이것을 권법이라고 명명하겠다...

이전 무술영화에선...뭔가를  학습해가는 과정을 권법을 익히다라고 표현했던것 같다..

그래서 난~~ 권법을 익히는 과정으로 생각하겠다.~

뭘?

기술을 익히는 것을 말이다.

기술을 연마해 가는 과정은

무술영화의 권법을 익히는 과정과 같다고 생각한다.



+ Recent posts