में पैच रूटीन कॉल मैं कुछ संशोधनों के साथ स्वयं को संभालने में सक्षम होने के लिए एक नियमित कॉल पैच करना चाहता हूं। मैं संसाधन लोडर लिख रहा हूं। मैं डेल्फी के लोडरसोर्स मॉड्यूल और इनिट इनहेरिट कॉम्पोनेंट दिनचर्या को मेरे साथ पैच करना चाहता हूं। मैंने MadExcept.pas इकाई में पैचएपीआई कॉल की जांच की है, लेकिन अगर मैं इसे अपने प्रोजेक्ट के लिए उपयोग कर सकता हूं तो इसे समझ नहीं सका। करने के लिए> कूद - -> LoadResourceModule -डेल्फी
मैं क्रम कॉल पर की तरह
मेरी exe कुछ चाहते हैं> MyCustomResourceModule ...
इस पर कोई संकेत बहुत मददगार होगा।
procedure PatchCode(Address: Pointer; const NewCode; Size: Integer);
var
OldProtect: DWORD;
begin
if VirtualProtect(Address, Size, PAGE_EXECUTE_READWRITE, OldProtect) then
begin
Move(NewCode, Address^, Size);
FlushInstructionCache(GetCurrentProcess, Address, Size);
VirtualProtect(Address, Size, OldProtect, @OldProtect);
end;
end;
type
PInstruction = ^TInstruction;
TInstruction = packed record
Opcode: Byte;
Offset: Integer;
end;
procedure RedirectProcedure(OldAddress, NewAddress: Pointer);
var
NewCode: TInstruction;
begin
NewCode.Opcode := $E9;//jump relative
NewCode.Offset := NativeInt(NewAddress)-NativeInt(OldAddress)-SizeOf(NewCode);
PatchCode(OldAddress, NewCode, SizeOf(NewCode));
end;
आप RedirectProcedure
फोन करके अपने हुक/पैच/चक्कर लगा देंगी::
RedirectProcedure(@LoadResourceModule, @MyLoadResourceModule);
यह 32 बिट कोड के लिए काम करेंगे
यह 'कहा जाता है इस सवाल जाँच detour' [एक बाह्य घोषित समारोह के कार्यान्वयन (चक्कर) बदलने के लिए] (http://stackoverflow.com/questions/6905287/ कैसे-टू-चेंज-द-कार्यान्वयन-एक-बाहरी रूप से घोषित-फ़ंक्शन) – RRUZ
मैं बस उसी के बारे में सोच रहा था - इसलिए इस तकनीक का उपयोग करने से घटक स्ट्रीमिंग में कोड जोड़ने की अनुमति होगी (डीएफएम से आवेदन करने के लिए) तंत्र? तो, उदाहरण के लिए, मेरे पास प्रयुक्त घटक वर्गों को लॉग करने के लिए एक केंद्रीय स्थान हो सकता है, या कुछ गुणवत्ता आश्वासन ('बीडीई कक्षाओं का उपयोग न करें! या घटक एक्स का पुराना संस्करण!')? – mjn
@mjn अन्य एक्सटेंशन पॉइंट हैं जो इसे अधिक आसानी से करने की अनुमति देते हैं। उदाहरण के लिए 'TReader.OnFindComponentClass'। पैचिंग कोड हमेशा एक अंतिम उपाय होना चाहिए जब कुछ और काम नहीं मिल सकता है। –