आप के बारे में क्या कह रहे हैं साध्य नहीं, बल्कि बहुत आसान है।
एक तरह से यह करने के लिए उसके निर्देशों में कोड चाल के लिए क्षतिपूर्ति है। आप सभी निर्देशों का है कि आरआईपी-रिश्तेदार को संबोधित कर रहे हैं (वे 05H, 0Dh, 15 एच, 1DH, 25H, 2dh, 35h के ModRM
बाइट है या 3dh) और चाल की राशि से उनके disp32
क्षेत्र समायोजित (चाल का उपयोग खोजने की जरूरत है इसलिए वर्चुअल ऐड्रेस स्पेस है, जो इसकी गारंटी नहीं दी जा सकती है 64-बिट पता स्थान 4GB से बड़ा है) में 2GB +/- तक सीमित है।
तुम भी, उनके समकक्ष के साथ उन निर्देशों को बदलने की संभावना सबसे अधिक उदाहरण के लिए, एक से अधिक के साथ हर मूल शिक्षा की जगह कर सकते हैं:
; These replace the original instruction and occupy exactly as many bytes as the original instruction:
JMP Equivalent1
NOP
NOP
Equivalent1End:
; This is the code equivalent to the original instruction:
Equivalent1:
Equivalent subinstruction 1
Equivalent subinstruction 2
...
JMP Equivalent1End
दोनों ही तरीकों से कम से कम कुछ मौलिक 86 disassembly दिनचर्या की आवश्यकता होगी।
पूर्व को मूल कोड की पैच की गई प्रतिलिपि वाली स्मृति को सुनिश्चित करने के लिए Windows (या लिनक्स पर कुछ समकक्ष) पर VirtualAlloc()
के उपयोग की आवश्यकता हो सकती है, उस मूल कोड के +/- 2GB के भीतर है। और विशिष्ट पते पर आवंटन अभी भी असफल हो सकता है।
बाद सिर्फ आदिम disassemblying से अधिक की आवश्यकता होगी, लेकिन यह भी पूर्ण अनुदेश डिकोडिंग और पीढ़ी।
अन्य quirks के आसपास काम करने के लिए हो सकता है।
निर्देश सीमाओं भी RFLAGS
रजिस्टर में TF
ध्वज की स्थापना सीपीयू हर अनुदेश के निष्पादन के अंत में single-step
डिबग बाधा उत्पन्न करने के लिए के द्वारा पाया जा सकता है। एक डीबग अपवाद हैंडलर को उनको पकड़ने और अगले निर्देश के आरआईपी के मूल्य को रिकॉर्ड करने की आवश्यकता होगी। मेरा मानना है कि यह Windows में Structured Exception Handling (SEH)
(डिबग बीच में आता है के साथ की कोशिश कभी नहीं), लिनक्स बारे में निश्चित नहीं का उपयोग किया जा सकता है। इसके लिए काम करने के लिए आपको सभी निर्देश निष्पादित करना होगा, हर निर्देश।
बीटीडब्ल्यू, 64-बिट मोड में पूर्ण पते है, उदाहरण के लिए, एमओवी 0A0h से 0A3h से ऑपकोड के साथ संचयक निर्देशों से/से।
-mcmodel = बड़ा समाधान होना चाहिए। मुझे जांच करनी है कि जीसीसी ओएसएक्स कंपाइलर इसका समर्थन क्यों नहीं करता – nux
शायद यह पुराना हो। छोटे (मानक) और मध्यम कोड मॉडल को जल्दी जोड़ा गया था, बड़े मॉडल बाद में आए थे। – hirschhornsalz
मैं आपको बहुत धन्यवाद देता हूं यह बहुत अच्छा दिखता है और निश्चित रूप से पूर्ण पते की समस्या हल करता है – nux