Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 
(연관된 글이 2개 있습니다.)

windbg - .NET 4.0 이상의 환경에서 모든 DLL에 대한 심벌 파일을 로드하는 파이썬 스크립트

지난 글에서 .NET 4.0 이상의 환경에서 DLL에 대한 심벌 파일 로드에 대해 알아봤습니다.

windbg - .NET 4.0 이상의 환경에서 DLL의 심벌 파일 로드 방법
; https://www.sysnet.pe.kr/2/0/11330

그런데, 규모가 좀 있는 프로그램이라면 DLL이 꽤나 많을 텐데 언제 저런 작업을 하고 있겠습니까? ^^

그래서 예전에 소개한 pykd를 이용해,

windbg에서 python 스크립트 실행하는 방법 - pykd
; https://www.sysnet.pe.kr/2/0/11227

다음과 같은 확장 스크립트(symbol_net.py)를 만들었습니다.

from pykd import *

def getItem(text, key):
    result = text
    for line in text.splitlines():
        if key in line:
            result = line.split(":")[1].strip()
    return result

def getAddress(text):
    return text.split("(")[0].strip()

outputText = pykd.dbgCommand("!name2ee *!enumerate_all_dlls")

for line in outputText.split("--------------------------------------"):
    moduleAddress = getItem(line, "Module:")
    moduleName = getItem(line, "Assembly:")

    if moduleName == "":
        continue

    moduleInfo = pykd.dbgCommand("!dumpmodule " + moduleAddress)

    moduleStartAdderss = getItem(moduleInfo, "MetaData start address")
    hInstance = long(getAddress(moduleStartAdderss), 16)

    hInstance = hInstance & 0xFFFFFFFFFFFF0000

    dprintln(moduleName + ": " + hex(hInstance).strip('L'))
    cmdText = ".reload /f " + moduleName + "=" + hex(hInstance).strip('L')
    dprintln("\t" + cmdText)
    pykd.dbgCommand(cmdText)

사용법은 간단합니다. pykd를 로드하고 그냥 실행만 하면 됩니다.

// 물론 사전에 sos.dll이 로드되어 있어야 함.

0:000> .load d:\pykd\x64\pykd.dll

0:000> !py d:\pykd\symbol_net.py
mscorlib.dll: 0x7ff962690000
    .reload /f mscorlib.dll=0x7ff962690000
ConsoleApp1.exe: 0x1eae1220000
    .reload /f ConsoleApp1.exe=0x1eae1220000
ClassLibrary1.dll: 0x1eae1550000
    .reload /f ClassLibrary1.dll=0x1eae1550000

그럼 위와 같이 !name2ee 명령어로 출력되던 모든 닷넷 어셈블리에 대해 MetaData start address 값에서 64KB 단위의 정렬로 가정한 주소로 매핑시켜 줍니다. (이 가정은 마이크로소프트의 구현에 따라 달라질 수 있다는 점을 유의하세요.)

제법 큰 예제 프로젝트를 통해 모든 DLL들이 64KB 정렬되었다는 가정이 잘 통했으므로 이 정도 선에서 ^^ 마무리합니다.




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]

[연관 글]






[최초 등록일: ]
[최종 수정일: 6/28/2021]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




... 46  47  48  49  50  51  [52]  53  54  55  56  57  58  59  60  ...
NoWriterDateCnt.TitleFile(s)
12333정성태9/20/20208267.NET Framework: 941. C# - 전위/후위 증감 연산자에 대한 오버로딩 구현 (2)
12332정성태9/18/202010320.NET Framework: 940. C# - Windows Forms ListView와 DataGridView의 예제 코드파일 다운로드1
12331정성태9/18/20209484오류 유형: 651. repadmin /syncall - 0x80090322 The target principal name is incorrect.
12330정성태9/18/202010549.NET Framework: 939. C# - 전위/후위 증감 연산자에 대한 오버로딩 구현 [2]파일 다운로드1
12329정성태9/16/202012461오류 유형: 650. ASUS 메인보드 관련 소프트웨어 설치 후 ArmouryCrate.UserSessionHelper.exe 프로세스 무한 종료 현상
12328정성태9/16/202012668VS.NET IDE: 150. TFS의 이력에서 "Get This Version"과 같은 기능을 Git으로 처리한다면?
12327정성태9/12/202010254.NET Framework: 938. C# - ICS(Internet Connection Sharing) 제어파일 다운로드1
12326정성태9/12/20209748개발 환경 구성: 516. Azure VM의 Network Adapter를 실수로 비활성화한 경우
12325정성태9/12/20209268개발 환경 구성: 515. OpenVPN - 재부팅 후 ICS(Internet Connection Sharing) 기능이 동작 안하는 문제
12324정성태9/11/202010539개발 환경 구성: 514. smigdeploy.exe를 이용한 Windows Server 2016에서 2019로 마이그레이션 방법
12323정성태9/11/20209405오류 유형: 649. Copy Database Wizard - The job failed. Check the event log on the destination server for details.
12322정성태9/11/202010386개발 환경 구성: 513. Azure VM의 RDP 접속 위치 제한 [1]
12321정성태9/11/20208770오류 유형: 648. netsh http add urlacl - Error: 183 Cannot create a file when that file already exists.
12320정성태9/11/20209978개발 환경 구성: 512. RDP(원격 데스크톱) 접속 시 비밀 번호를 한 번 더 입력해야 하는 경우
12319정성태9/10/20209707오류 유형: 647. smigdeploy.exe를 Windows Server 2016에서 실행할 때 .NET Framework 미설치 오류 발생
12318정성태9/9/20209194오류 유형: 646. OpenVPN - "TAP-Windows Adapter V9" 어댑터의 "Network cable unplugged" 현상
12317정성태9/9/202011530개발 환경 구성: 511. Beats용 Kibana 기본 대시 보드 구성 방법
12316정성태9/8/20209953디버깅 기술: 170. WinDbg Preview 버전부터 닷넷 코어 3.0 이후의 메모리 덤프에 대해 sos.dll 자동 로드
12315정성태9/7/202012240개발 환경 구성: 510. Logstash - FileBeat을 이용한 IIS 로그 처리 [2]
12314정성태9/7/202010827오류 유형: 645. IIS HTTPERR - Timer_MinBytesPerSecond, Timer_ConnectionIdle 로그
12313정성태9/6/202011979개발 환경 구성: 509. Logstash - 사용자 정의 grok 패턴 추가를 이용한 IIS 로그 처리
12312정성태9/5/202015900개발 환경 구성: 508. Logstash 기본 사용법 [2]
12311정성태9/4/202011072.NET Framework: 937. C# - 간단하게 만들어 보는 리눅스의 nc(netcat), json_pp 프로그램 [1]
12310정성태9/3/202010327오류 유형: 644. Windows could not start the Elasticsearch 7.9.0 (elasticsearch-service-x64) service on Local Computer.
12309정성태9/3/202010081개발 환경 구성: 507. Elasticsearch 6.6부터 기본 추가된 한글 형태소 분석기 노리(nori) 사용법
12308정성태9/2/202011335개발 환경 구성: 506. Windows - 단일 머신에서 단일 바이너리로 여러 개의 ElasticSearch 노드를 실행하는 방법
... 46  47  48  49  50  51  [52]  53  54  55  56  57  58  59  60  ...