for(int i = 0;i < checkedListBox1->Items->Count;i++){
				checkedListBox1->SetItemChecked(i,true);
			}

for(int i = 0;i < checkedListBox1->Items->Count;i++){ checkedListBox1->SetItemChecked(i,false); }

checkeditems에 get enumerator가 있길레 Ienumerator로 어떻게 해볼려고 했는데,
listbox의 items형으로 반환받는 법을 모르겠다.
items[int] 밖에 없다 enumerator로는 참조불가.
그리고 기본 제공되는 enumerator형으로는 chekeditems의 string밖에 참조가 안되서...
그래서 그냥 위와같이함.

이올린에 북마크하기
2012/03/21 11:18 2012/03/21 11:18

debug 모드와 release 모드의 바이너리를 둘다 가지고 있으면,
용량 비교만하면 되니 매우 간편 하지만, 하나만 가지고 있는 경우 정확히 알수가 없다.

이럴때 .net 컴파일러로 만들어 진 경우는 .net reflecter로 debugged 플래그가 있다고 한다.
http://blog.naver.com/PostView.nhn?blogId=techshare&logNo=100150127754
해당 내용은 이쪽을 참조하면되고,

나의 경우는 c++ 로 만들어진 바이너리 였기에 다른 방법이 필요했다.
그래서 로드되는 dll을 비교해보니 debug와 release 가 사용하는 msvcr이 다르다는 것을 확인하였다.

dependancy walker(http://www.dependencywalker.com/)로 로드되는 dll을 조사하여,

MSVCR90D.DLL
MFC90UD.DLL

가 포함되면 debug 빌드이다.
release 의 경우 D가 빠진

MSVCR90.DLL
MFC90U.DLL

이 로드된다. (뒤의 숫자는 빌드환경에 따라 달라질 수 있다.)

이올린에 북마크하기(0) 이올린에 추천하기(0)
2012/02/27 16:25 2012/02/27 16:25

보안솔루션 관점에서 이야기하는건 어짜피 병림픽이니, 제하고

외부 프로그램들은 항상 고정위치의 값을 변조하고나 읽어가서 악용하는 경우가 많다.

메모리풀을 만들때, 메쏘드에 얼록외에 추가로 보호얼록 같은걸 만들어서,
기존 풀의 랜덤한 영역에 할당해주는 것도 도움이 되지 않을까 싶다.
리눅스에는 os가 지원하는 기능으로 알고 있다.

추가로 변수 완전하게 추상화가 가능하면, 실제 저장 영역은 바이트 단위로 쪼개서 랜덤한 영역에 분포시키고, 오버라이드된 오퍼레이터 ( = ) 에서 합쳐서 돌려주는 식으로 구현하는 것도 괞찮을 듯 하다.

이올린에 북마크하기
2012/01/27 09:34 2012/01/27 09:34
memory read 방어 :: 2012/01/27 09:34 공부/etc
openclose