C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[74732] Re:Re:컴파일러 고수 분. RAD 10.2 64비트 디버거 버그인가요?
기영테크 [] 3279 읽음    2018-01-13 14:41
답변 감사합니다

말씀해주신대로 nasm 어셈블러 소스코드 다운받아 보고있는데요

제가 어지간한 소스코드는 분석할 수 있을 정도로 공부가 되어있다고 자부하고 있었는데

어떻게 손을 대야할지 눈 앞이 캄캄합니다.



그래도 프로그래밍 경력 20년이 넘는데 지금까지 헛 배웠나봐요. 흑흑

dwarf 문서도 다운 받아보았는데 내용 이해하기도 힘드네요. 흑흑


빌더(TWx) 님이 쓰신 글 :
: 기영테크 님이 쓰신 글 :
: :
: :
: : 안녕하세요
: :
: : RAD 10.2.2 토쿄 버전 쓰고있는데요
: : 64비트 스타트업 코드부터 소스레벨 디버깅 해보려고
: :
: : nasm -t -f elf64 -g -F dwarf -D_MT -D_MBCS -D_MBC_USE_MACROS -DCONSOLE c0nt64.nasm -o c0x64.o
: :
: : 위와 같이 -g -F dwarf 디버깅 옵션 줘서 컴파일 링크해 보았는데요
: :
: : c0nt64.nasm 의 스타트업 코드에 int3 브레이크 코드를 넣어서 컴파일 링크하니까
: : 어셈블러 스타트업 코드에서 브레이크가 걸리더군요.
: :
: : 그런데 dwarf 디버깅 정보 옵션을 주었는데도 기계어 레벨로만 디버깅이 되고
: : 소스레벨 디버깅이 안되더군요
: :
: : 심지어 C++ 소스레벨 디버깅도 덩달아 같이 먹통 되던데요
: :
: : 제가 옵션을 잘못 준 걸까요?
: : 아님 64비트 디버거 버그인 건가요?
: :
: : 어떻게 해야 어셈블러 스타트업 코드를 소스레벨에서 디버깅 할 수 있을까요
: :
: : 물론 C++ 소스코드레벨 디버깅이 먹통되는 희안한 현상도 막으면서 말이죠
: :
: : 컴파일러 고수 분
: : 알려주시면 고맙겠습니다
:
:
:
: 답변:
:
:
: C++ 빌더의 64 비트 컴파일러는 디버깅 포맷으로 dwarf 포맷을 사용하고 있고
: nasm 어셈블러 옵션도 아주 훌륭하게 설정되어 있습니다.
:
: 옵션을 제대로 설정했음에도 불구하고... 
: Start-up 코드인 c0nt64.nasm 소스레벨 디버깅이 안되는 이유는...
:
: dwarf 디버깅 포맷의 버전이 다르기 때문 입니다.
:
:
: C++빌더의 64비트 C++ 컴파일가 생성하는 dwarf 디버깅 포맷 버전은 나온지 오래된 dwarf v2 버전이고
: nasm 어셈블러가 생성하는 dwarf 디버깅 포맷 버전은 dwarf v3을 코드베이스로 사용하기 때문 입니다.
:
: 엠바 애들이 매너리즘에 빠져있는 건지, 아님 게을러 터진 건지...
: 몇년 째 계속 clang 포팅 C++ 컴파일러도 3.3 코드베이스에 머물러 있고 (clang/llvm 헤드는 7.0),
: 현재 dwarf v5 디버깅 포맷이 사용되고 있는데 엠바 애들은 아직까지 dwarf v2 를 사용하고 있습니다.
:
:
: c0nt64.nasm 파일의 소스레벨 디버깅을 가능하게 하려면...
:
: nasm 어셈블러 프로그램을 dwarf v2 디버깅 포맷으로 생성하도록 프로그램을 수정해야 합니다.
: dwarf 포맷이 복잡하긴 하지만 다루어 본 경험이 있으면 코드 수정이 어렵진 않을 겁니다.
:
: 그리고...
:
: dwarf 2 포맷으로 생성하도록 nasm 어셈블러를 수정하더라도
: C++ 소스레벨 디버깅 까지 포함해서 가능하게 하려면 엠바 C++ 64 비트 컴파일러를 해킹해서
: 표준 스펙을 벗어난 디버깅 정보 Internal 을 알아내야 할 지도 모릅니다.
:
: 링크 과정에서 링커가 오브젝트 파일들과 라이브러리 파일들의 디버깅 정보를 하나의 단일 단위로
: 묶어서 머지를 할텐데, 포맷의 상이함이 발견되면 머지를 하지 않을 수도 있기 때문이죠.
:
: 여튼 뭐...
:
: dwarf 디버깅 포맷이 복잡하긴 하지만, 다루어 본 경험이 있으면 nasm 어셈블러를 수정해서 작업하면 됩니다.
: nasm 어셈블러가 오픈소스 이니...
:

+ -

관련 글 리스트
74728 컴파일러 고수 분. RAD 10.2 64비트 디버거 버그인가요? 기영테크 3268 2018/01/12
74731     Re:컴파일러 고수 분. RAD 10.2 64비트 디버거 버그인가요? 빌더(TWx) 3336 2018/01/12
74732         Re:Re:컴파일러 고수 분. RAD 10.2 64비트 디버거 버그인가요? 기영테크 3279 2018/01/13
74736             Re:Re:Re: 64비트 c0nt64.nasm 소스레벨 디버깅 가능하게 하기 빌더(TWx) 3757 2018/01/15
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.