수안이의 컴퓨터 연구실

  • Mainpage
  • About Me
  • Tags
  • Metapage
  • Notice
  • Location
  • Keywords
  • Guestbook
  • Admin
  • Write an Article
  • Total | 1693938
  • Today | 289
  • Yesterday | 588

Programming/MFC2007/03/21 10:15

Dll Rebase 시키기

원본 : http://www.debuglab.com/knowledge/dllreabase.html

1.요약

Dll들에게 적당한 로딩 주소를 할당함으로써 충돌을 막는 방법을 알아봅니다.


2.본문

[ Dll Rebase란 무엇인가? ]

Dll Rebase란 말 그대로 Dll의 로딩 주소를 새로 설정한다는 말입니다.


[ 왜 새로 설정하는가? ]

이전 팁에서도 말씀드렸지만, dll은 exe와는 달리, 자신이 원하는 주소에 로드된다는 보장을 받을 수 없습니다.

자신이 선호하는 주소에 이미 다른 dll이 자리잡고 있다면 싫더라도 다른 주소를 찾아서 입주해야겠죠..

이 과정에서 어느 정도의 오버헤드가 발생한다는 점은 쉽게 예측할 수 있습니다.

기본적으로 위저드를 사용해 만든 Dll은 Visual Basic의 경우 0x11000000, Visual C++의 경우 0x10000000 에 로드되도록 설정되어있습니다.

John Robbins 아저씨는 그의 책에서 다음과 같은 말을 합니다.

"세상에 있는 dll 중에 절반은 0x10000000에 로드되려고 할 겁니다.."

이를 다시 번역하면 이렇게 되겠죠..

'세상에 있는 dll 중에 절반은 실행될때마다 새 주소를 찾느라 시간을 소비해야 합니다.."


[ 어떻게 rebase 시키는가? ]

크게 두 가지 방법이 있습니다.

1. Rebase.exe 유틸리티 사용하기.

동봉한 zip 파일에는 Rebase.exe가 들어있습니다.
Visual Studio나 Platform SDK를 설치하셔도 구하실 수 있구요..

Rebase를 사용하는 방법은 매우 간단합니다. 원하는 주소와 dll의 이름만 넘겨주면 되죠..

문제는 주소를 어떻게 배분해야 dll들이 싸우지 않고 잘 로드될 것인가 하는 점입니다.

이 점에 대해서는 John Robbins 아저씨의 제안을 받아들이기로 합니다.

바로 알파벳 순서로 주소를 나누는 거죠.

<< Dll First Letter >>    << Starting Address >> 



        A-C                   0x60000000 

        D-F                   0x61000000 

        G-I                   0x62000000 

        J-L                   0x63000000 

        M-O                   0x64000000 

        P-R                   0x65000000 

        S-U                   0x66000000 

        V-X                   0x67000000 

        Y-Z                   0x68000000 

dll 이름이 앞글자에 따라서 주소를 배분하는 방법입니다.
예를 들어서, APPLE.DLL, DUMPLING.DLL GINGER.DLL, GOOSERBERRIES.DLL 있다고 치고.. 위의 방법을 따른다면..

REBASE /b 0x60000000 APPLE.DLL 

REBASE /b 0x61000000 DUMPLING.DLL 

REBASE /b 0x62000000 GINGER.DLL GOOSEBERRIES.DLL 

마지막 줄처럼 DLL 을 여러 개 넣어주면, REBASE.EXE 는 영리하게 BASE 주소를 바꿔줍니다.

만약 그렇다면 모든 dll을 한 번에 넣어주는 것도 좋겠죠.
하지만 dll 들이 너무 가까이 붙어있게되면 충돌이 일어나는 경우가 있다고 하네요.

그래서 마지막 줄은 다음과 같이 하는 것이 더 좋겠죠

REBASE /b 0x62000000 GINGER.DLL 

REBASE /b 0x62100000 GOOSEBERRIES.DLL 


2. LINKER의 /BASE 옵션 사용하기

Project Setting 에서 Base Address 에디트 창에 값을 넣으시면 됩니다.


[ 정말 효과 만점인가? ]

역시나 마땅한 예제가 없어서. Active Tutor Recorder 3.0 을 가지고 실험을 해봤습니다.

AT 3.0 이 수많은 dll을 가지고 있다거나, 로딩 시간이 느린 어플리케이션이 아니므로 가시적인 효과는 느낄 수 없었습니다.

하지만.. 시작해서 빈 문서를 만들기까지 조사해본 결과로는 Page Fault가 약 100번 가량 줄어들었고(원래 2850 번 정도에서) 사용한 메모리도 약 500kb 정도 줄었습니다.(원래 9Mb에서)


3.예제



4.참고

Debugging Application, John Robbins ch2 Getting Started Debugging



- 2001.08.19 Smile Seo -
"MFC" 카테고리의 다른 글
  • DECLARE_DYNCREATE()와 IMPLEMENT_DYNCREATE() (0)2007/03/22
  • WaitCursor가 만들어지지 않는 경우 (0)2007/03/22
  • Dll Rebase 시키기 (0)2007/03/21
  • Delayload 적용시키기 (0)2007/03/21
  • MFC 라이브러리에 동적으로 링크된 정규 DLL (0)2007/03/21
2007/03/21 10:15 2007/03/21 10:15
Posted by webdizen
Tags Dll Rebase
No Trackback No Comment

Trackback URL : http://www.webdizen.net/blog/trackback/2720

Leave your greetings.

[로그인][오픈아이디란?]

«Prev  1 ... 529 530 531 532 533 534 535 536 537 ... 3009  Next»

RSS HanRSS
Blog Image
webdizen
이곳은 컴퓨터에 대해 연구하고, 공유하고, 소통하기 위한 연구실입니다. 개인적으로는 OLAP, Data Mining, Semantic Web, Data Modeling에 대해서 연구하고 있습니다.

Categories

전체 (3009)
Webdizen (141)
Life (6)
Diary (16)
Blog (9)
IDEA (2)
Travel (10)
Book (16)
Photo (7)
Movie (8)
Music (14)
Leisure Sports (10)
Funny (6)
Hardware (121)
Software (120)
Windows (5)
Unix & Linux (120)
Installation (5)
Kernel (10)
System (34)
Develop (22)
X-Window (0)
Applicaton (31)
Security (4)
Framework (2)
Hadoop (2)
Programming (804)
Algorithm & Data Structure (1)
Assembly (38)
UNIX/Linux C (95)
C++ (128)
STL (4)
Java (38)
Win32 API (92)
ATL/COM (44)
MFC (151)
.NET (26)
WCF/WPF (4)
C# (28)
Network Programming (17)
Database Programming (12)
OpenGL / DirectX (13)
Multimedia Programming (0)
Game Programming (21)
Parallel Distributed Progra... (0)
Reverse Engineering (0)
Debugging (9)
Python (1)
Ruby (1)
Ruby on Rails (1)
QT (4)
GTK (0)
JSP (0)
PHP (6)
ASP.NET (6)
ASP (2)
Development (28)
Useful Library (2)
Data Modeling (0)
Database (105)
Oracle (4)
MSSQL (41)
MySQL (2)
Data Warehouse (2)
Data Mining (4)
Network (66)
Web (79)
DHTML (4)
XHTML (1)
Javascript (1)
CSS (1)
AJAX (9)
XML (11)
Flex (1)
Silverlight (3)
Security (91)
DoS (1)
Kernel (10)
Scanning (3)
Sniffing (0)
Spoofing (4)
Overflow (28)
Web (11)
Shell (10)
Format String (14)
Window (2)
Embedded (70)
Multimedia (27)
Mobile (14)
Graphic (24)
Management (633)
Knowledge (581)
Hadoop (0)

Notice

  • 메타 블로그 사이트에 등록
  • 새해 맞이 블로그의 변화
  • 블로그 명칭 변경
  • 도메인(www.webdizen.net) 구...
  • TEXTCUBE 1.6.1로 업그레이드...

Tags

  • FastCGI
  • ASCII Character Codes
  • Semapores
  • 올블로그
  • ADODB
  • 서암관
  • XCANVAS
  • Sp_OA
  • High-Performance
  • 자석 윈도우
  • evoCore
  • KLM
  • 기회
  • 게스트하우스
  • 구본관
  • MIDI
  • Photoshop
  • 윈도우즈 로그오프
  • 강대라이크
  • system()

Recent Articles

  • 트위터(Twitter)의 시작!.
  • 청년 리더의 조건.
  • 애플의 타블렛 PC - 아이패드....
  • 미래의 인터페이스 - 육감 기....
  • 기초발성법 동영상 강좌.

Recent Comments

  • 학교 과제물중 쓰레드에 대하....
    장진혁 03/17
  • 관리자만 볼 수 있는 댓글입....
    비밀방문자 03/12
  • 상대방의 이야기를 열심히 경....
    DoNuts 03/03
  • Lots of students know techn....
    Bobbi35Shannon 02/25
  • 좋은글 잘 보고 갑니다..
    Und_hacker 01/08

Recent Trackbacks

  • printf,scanf를 이용한 형식....
    yundream의 프로그래밍 이야기 03/10
  • 파일 열기/저장하기 CFileDialog.
    은마군의 나태블록 2009
  • World IT Show 2008.
    상우 :: Oranzie's BLOG 2008
  • cvs서버 설치하기.
    3인3색 2008
  • 속속 공개되는 Google Chart....
    PHP와 Web 2.0 2007

Archive

  • 2010/02 (1)
  • 2010/01 (6)
  • 2009/12 (5)
  • 2009/09 (3)
  • 2009/08 (1)

Calendar

«   2010/03   »
일 월 화 수 목 금 토
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      

Bookmarks

    • Administration
      • IIS.NET
      • NTFAQ
      • OS의 모든 것
      • 리눅스포털
    • Database
      • SQL Server Central
      • SQL Team
    • Development
      • .NET Heaven
      • ASP Alliance
      • ASP.NET 2.0
      • Bullog.net
      • C# Corner
      • C++ (C PlusPlus.com)
      • C++ Reference
      • CodeGuru
      • CodePlex
      • DebugLab
      • Dev Articles
      • Devpia
      • DotNet Junkies
      • DotNet Zone
      • Driver Online
      • GOSU.NET
      • HOONS 닷넷
      • Joinc 팀블로그
      • KOSR
      • MSDN Home Page
      • OSR Online
      • Sky.ph - 개발자 커뮤니...
      • TAEYO.NET
      • The Code Project
      • WindowsClient.net
      • 김상욱의 개발자 Side
      • 조인시 위키
    • Human Networks
      • belief21c's e-space
      • I think I can
      • Invisible Rover's Blog :D
      • Rodman®
      • ■ Feel So Good~! ■
      • 까만 나비
      • 나를 가꾸는 시간.
      • 나만의 즐거움~~!
      • 단녕
      • 상우 :: Oranzie's BLOG
    • Information Technology
      • Microsoft TechNet
      • 지디넷코리아 - 글로벌...
    • Security
      • FoundStone
      • milw0rm
      • NewOrder
      • OpenRCE
      • Phrack.org
      • Reverse Engineering b1...
      • Reverse Engineering Team
      • RootKit
      • SecurityFocus
      • SecurityXploded by Nag...
      • Wow Hacker
      • Zone-H
Textcube
Louice Studio Inc.
Powered by Textcube. Original designed by Tistory.