Friday, March 2, 2012

NSIS - Silent Install / uninstall

http://nsis.sourceforge.net/Docs/Chapter4.html#4.12

Call stack이 안 보일경우에도 crash된 코드 줄 찾는 방법



dump된 파일 정보로 부터 crash된 부분의 콜스텍을 찾을 경우에
pdb파일과 심볼이 안맞아 주소만 보일때가 있다.
이럴경우 어느부분에서 crash가 낳는지 찾는게 쉽지않다.

--------------------------
  00000000()
  aaaa.dll!44024e33()
  [Frames below may be incorrect and/or missing, no symbols loaded for abcdefg.dll]
  aaaa.dll!4402e95b()
  aaaa.dll!44025394()
  aaaa.dll!4401ebd2()
  aaaa.dll!4401ef59()
  aaaa.dll!4402e95b()
  aaaa.dll!44019b8c()
  aaaa.dll!4400df08()
  aaaa.dll!44057adb()
  aaaa.dll!4400ff33()
  bbbb.dll!100449d5()
----------------------------

그러나, map 파일을 이용하면 각 콜스텍이 가리키고 있는 주소형식(44024e33())을 이용하여
어느 함수에서 crash가 발생한지 추적이 가능하다.
(map파일이 없다면, 해당버젼의 소스(aaaa.dll 소스) 코드를 가지고 map파일을 생성하면 된다.)

map 파일이 생성되었다면, aaaa.map파일을 열어 보면, 아래와 같은 형식으로 구성되어 있는것을 볼수있다.

---------------------
 Address         Publics by Value              Rva+Base       Lib:Object

 0000:00000000       __except_list              00000000     <absolute>
 0000:00000093       ___safe_se_handler_count   00000093     <absolute>
 0000:00000000       ___ImageBase               44000000     <linker-defined>
 0001:00000000       ??1Idddddd@@UAE@XZ 44001000 f i afdafa.obj
 0001:00000010       ??_cccccc@@UAEPAXI@Z 44001010 f i afdafa.obj
 0001:00000010       ??_ggggggg@@UAEPAXI@Z 44001010 f i afdafa.obj
0001:00000010       ??_kkkkkkkk@@UAEPAXI@Z 44002010 f i afdafa.obj
..........................................
-----------------------

여기서 Rva+Base 의 주소를 찾고하여,
만약  aaaa.dll!44001f33()이 어떤 함수부분인지 찾고자 한다면,
44001f33과 가장 근접하게 큰 주소를 map파일에서 찾은후,
그 앞에 있는 함수를 참고하면 된다.
위의 map 파일 예제의 경우는 gggggg의 함수에서 crash난것으로 판단이 가능하다.

Messenger service running—on a massive scale


Keeping the Messenger service running—on a massive scale

http://windowsteamblog.com/windows_live/b/windowslive/archive/2010/03/02/keeping-the-messenger-service-running-on-a-massive-scale.aspx

Remote Debugging 하기


visual studio 2008
msvsmon.exe 필요

- Remote PC
msvsmon.exe 실행 (visual studio 설치 폴더 참조)
tool > option에 Authentication mode 설정 (no authentication으로 하면 성능 향상 효과, but vulnerable from outside)

- Host pc
visual stdio 실행하여 tool>Attach process 선택
Transport 옵션은 Remote
Qualifier는 remote pc ip 기입

process 리스트에서 찾아서 attach하면 디버깅 가능.

rich edit control



Dialog 로 만들때 rich edit control을 추가하였다면,
AfxInitRichEdit() 를 initinstance에 추가해야한다.

안하면 domodal시 실패 떨어짐. ~~~

__asm nop


퍼옴: http://cafe.naver.com/devctrl.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=1700&

VC에서 아무일도 안하면서 break point를 걸고 싶을 때 간단히 다음 구문을 추가하면 된다.

__asm nop

예를 들어 다음과 같은 구문에서

if (some_condition)
{
    //  아직 만드는 중
    // '여기'에 들어오는지 확인하고 싶다.
}
else
{
    do_something();
}

' 여기'에
__asm nop를 적어주고 break point를 걸어주면 된다.

if (some_condition)
{
    //  아직 만드는 중
    __asm nop;
}
else
{
    do_something();
}

MacOS에서 rm시 operation not permitted 발생 오류


=====
MacBook-Pro:ppp$ rm -rf .svn/
rm: .svn//all-wcprops: Operation not permitted
rm: .svn//entries: Operation not permitted
rm: .svn//text-base/***.h.svn-base: Operation not permitted
rm: .svn//text-base/***.h.svn-base: Operation not permitted
rm: .svn//text-base/***.h.svn-base: Operation not permitted
rm: .svn//text-base/***.h.svn-base: Operation not permitted
rm: .svn//text-base/***.h.svn-base: Operation not permitted
rm: .svn//text-base/***.h.svn-base: Operation not permitted
rm: .svn//text-base/***.h.svn-base: Operation not permitted
rm: .svn//text-base/***.h.svn-base: Operation not permitted
rm: .svn//text-base/***.h.svn-base: Operation not permitted
rm: .svn//text-base/***.h.svn-base: Operation not permitted
rm: .svn//text-base/***.h.svn-base: Operation not permitted
rm: .svn//text-base: Directory not empty
rm: .svn/: Directory not empty
MacBook-Pro:ppp$ chflags -R nouchg .svn/
MacBook-Pro:ppp$ rm -rf .svn/

=====

Hello,

Technology
computer
languages
tips
rumors 
Technic
...
that I am going to deal with...

Let's have fun~