2012-04-11 14 views
8

मुझे अपने प्रोग्राम के साथ स्थापित DLL फ़ाइलों के समूह को पुनर्जीवित करने की आवश्यकता है, क्योंकि यह 32-बिट प्रोग्राम है और पता स्थान अभी अभी बहुत खंडित है। डीएलएल की पूरी तरह से समस्या को ठंडा बूट पर रैम में मांगने की समस्या है ताकि कुछ डीएलएल के साथ बेस एड्रेस टकराव के कारण लोडर उन्हें रिबेस कर सके। कुछ डीएलएल वे हैं जिन्हें हमने संकलित किया है; अन्य तीसरे पक्ष से हैं।REBASE.EXE के लिए प्रतिस्थापन क्या है?

मैं क्या करना चाहता हूं कि उपकरण डीएलएल के दिए गए सेट को रीबेस करें, ताकि डीएलएल के समूह में स्मृति का एक संगत ब्लॉक हो। यह उपकरण तब सेटअप प्रोग्राम के संकलन से ठीक पहले चलाया जाएगा, और पुन: स्थापित डीएलएल एप्लिकेशन की निजी निर्देशिका में स्थापित किया जाएगा।

जो मैं समझता हूं उससे, विंडोज एसडीके के साथ शामिल REBASE.EXE उपकरण ठीक/करता है। इसे कुछ डीएलएल दें, और यह उन्हें रीबेस करता है।

दुर्भाग्य से ... Windows Software Development Kit (SDK) for Windows 8 Consumer Preview का कहना है:

उपकरण कई अप्रचलित या पदावनत उपकरण विंडोज एसडीके से हटा दिया गया है। निम्नलिखित उपकरण हटा दिया गया है:

< स्निप> ReBase.exe

मैं क्या करूं? मैं ऐसे उपकरण का उपयोग शुरू नहीं करना चाहता हूं जो स्पष्ट रूप से अप्रचलित है और विंडोज के अगले संस्करण में जाने जा रहा है। मान लीजिए कि मैं यह सही पढ़ रहा हूं, ReBase.exe का उपयोग करने के लिए प्रतिस्थापन क्या है? मैं अपने आप को तीसरे पक्ष के टूल पेश करने और/या अपना खुद का रिबेस कोड लिखने के बजाय विंडोज एसडीके और/या विजुअल स्टूडियो के साथ आने वाले टूल्स का उपयोग करने के लिए प्रतिबंधित करना चाहता हूं।

या, क्या मैं इस पूरी समस्या को गलत तरीके से देख रहा हूं?

+1

आप रीबेस का उपयोग कर ले सकते हैं। यह अभी भी काम करता है और यह काम करना बंद नहीं करेगा। –

+0

@ डेविड हेफरनन: उस रीडमे के अनुसार, हम विंडोज 8 एसडीके का उपयोग शुरू करने के पल काम करना बंद कर देंगे - क्योंकि यह वहां नहीं होगा, सही? –

+1

इसके अलावा, मैं msdn.microsoft.com पर REBASE.EXE के लिए प्रलेखन नहीं ढूंढ पाया। इसके लिए कोई लिंक? –

उत्तर

10

editbin.exe वीएस -2010 के साथ आता है और इसमें एक/REBASE विकल्प है।

C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC>editbin 
Microsoft (R) COFF/PE Editor Version 10.00.40219.01 
Copyright (C) Microsoft Corporation. All rights reserved. 

usage: EDITBIN [options] [files] 

    options: 

     /ALLOWBIND[:NO] 
     /ALLOWISOLATION[:NO] 
     /BIND[:PATH=path] 
     /DYNAMICBASE[:NO] 
     /ERRORREPORT:{NONE|PROMPT|QUEUE|SEND} 
     /HEAP:reserve[,commit] 
     /LARGEADDRESSAWARE[:NO] 
     /NOLOGO 
     /NXCOMPAT[:NO] 
     /REBASE[:[BASE=address][,BASEFILE][,DOWN]] 
     /RELEASE 
     /SECTION:name[=newname][,[[!]{CDEIKOMPRSUW}][A{1248PTSX}]] 
     /STACK:reserve[,commit] 
     /SUBSYSTEM:{BOOT_APPLICATION|CONSOLE|EFI_APPLICATION| 
        EFI_BOOT_SERVICE_DRIVER|EFI_ROM|EFI_RUNTIME_DRIVER| 
        NATIVE|POSIX|WINDOWS|WINDOWSCE}[,#[.##]] 
     /SWAPRUN:{[!]CD|[!]NET} 
     /TSAWARE[:NO] 
     /VERSION:#[.#] 

और के रूप में मार्क बताते हैं आप /DYNAMICBASE:no

+2

EDITBIN/REBASE विकल्प अच्छी तरह से चाल करता है। और एमएसडीएन से पता चलता है कि इसमें विजुअल स्टूडियो 11 में EDITBIN के लिए प्रलेखन है, इसलिए मैं उन्हें जल्द ही इसे हटाने को नहीं देखता हूं। यह स्पष्ट है कि वे विंडोज 8 एसडीके से REBASE.EXE को हटा रहे हैं और हटा रहे हैं: यह EDITBIN की कार्यक्षमता को डुप्लिकेट करता है! मुझे यकीन नहीं है कि दूसरों को क्यों लगता है कि रिबेस की आवश्यकता पूरी तरह से अप्रचलित है ... - यह नहीं है। बहुत बुरा रिबिंग ट्यूटोरियल ऑनलाइन अभी भी REBASE.EXE का संदर्भ देता है ... –

+2

बहुत खराब एडिटबिन वर्बोज़ आउटपुट उत्पन्न नहीं करता है जैसे rebase.exe – deltanine

3

कारण Rebase.exe को बहिष्कृत किया गया है यह उतना उपयोगी नहीं है जितना कि यह होता था। विंडोज विस्टा से शुरू होने पर, माइक्रोसॉफ्ट ने Address Space Layout Randomization लागू किया जो सिस्टम लोड करने के दौरान सिस्टम डीएलएल को हर बार ले जाता है, और वैकल्पिक रूप से उपयोगकर्ता डीएलएल भी चलाता है।

यदि आप एक बड़ी संगत पता स्थान उत्पन्न करने के लिए रिबेजिंग पर भरोसा कर रहे हैं, तो आप निराश होने जा रहे हैं।

+1

जैसे कोई वर्बोज़ आउटपुट हमारे कुछ ग्राहक विंडोज एक्सपी का उपयोग नहीं करते हैं, जिसमें एएसएलआर नहीं है। संकलित डीएलएल एएसएलआर-सक्षम नहीं हैं, या तो वे Vista/7 जैसी एएसएलआर ऑपरेटिंग सिस्टम पर भी एएसएलआर के साथ लोड नहीं होंगे। (मैं सिस्टम डीएलएल के साथ छेड़छाड़ नहीं कर रहा हूं, जो एक उचित रूप से संगत जगह में झूठ बोल रहा है - यहां तक ​​कि विंडोज 7 पर भी एएसएलआर के साथ)। –

+2

@ जेम्स: यदि आप विंडोज एक्सपी, एक विरासत/बहिष्कृत ओएस को लक्षित कर रहे हैं, तो यह विंडोज एसडीके से विरासत/बहिष्कृत उपकरण का उपयोग करने के लिए सही समझ में आता है। दाऊद इस सवाल पर टिप्पणियों में आपको बताने की कोशिश कर रहा है। –

+3

यह टिप्पणी बहुत पुरानी है, लेकिन भविष्य के आगंतुकों के लिए, @AdrianMcCarthy गलत है। Consecutive आधारित DLLs लगातार लोड करने की गारंटी नहीं है। –

3

का उपयोग नहीं "REBASE.EXE बी 0x58000000 -e 0x10000 -c के प्रयोग का उल्लेख करना द्वारा ASLR, आप कर सकते हैं जो बंद करने के लिए चाहता हूँ cofbase.txt * .dll "फ़ाइलों के एक सेट के खिलाफ, बस COFFBASE फ़ाइल उत्पन्न करने के लिए।
दूसरे शब्दों में नहीं, क्योंकि आप वास्तव में अपनी फ़ाइलों को वास्तव में पुनर्भुगतान करना चाहते हैं, लेकिन क्योंकि आप एक सटीक COFFBASE.TXT,
चाहते हैं ताकि वे हर बार एक विशिष्ट और गैर-विरोधी आधार पते के साथ/पहले/बनाए जाएंगे बनाया।

संबंधित मुद्दे