2011-11-24 4 views
7

ढूँढना मैंने महसूस किया कि सही baseaddress होने का अपना संस्करण गलत थासही baseaddress

Process[] iexp = Process.GetProcessesByName("Solitaire"); 
if (iexp.Length == 0) { 
    //EXIT 
} 
Process internet = iexp[0]; 
uint baseAddress = (uint)internet.MainModule.BaseAddress.ToInt64(); 

लेकिन baseaddress गलत है

मैं भी MSDN में देखा लेकिन this कोड बहुत ही अजीब है और मुझे एक देता है अनंत लूप।

मुझे आशा है कि आप मेरी मदद कर सकते हैं क्योंकि मुझे कोई उदाहरण नहीं मिल रहा है।

संपादित करें:

ReadProcessMemory(readHandle, ((IntPtr)(((baseAddress) + 0x14) + 0x50)), bytes, (UIntPtr)4, ref rw); 

यहाँ मैं अपने डेस्कटॉप की एक छवि बना दिया। मैं वास्तव में भ्रमित हूं, शायद कोई जानता है कि मैंने गलती की है। http://i.stack.imgur.com/50lva.jpg

+4

तुम्हें कैसे पता इस वापस लौटने वाले है गलत बेस पता? आपके द्वारा लिंक किया गया कोड मुझे उचित लगता है ... –

उत्तर

2

आप चाहते हैं कि मैं क्या लगता है कि आप चाहते हैं, मैं सिर्फ यह करने के लिए कुछ तरीके के बारे में सोच सकते हैं, उनमें से कोई भी नेट में निर्मित कर रहे हैं, हालांकि ...

  1. स्टार्टअप निष्पादन योग्य के मूल पते को वापस करने के लिए पी/Invoke का उपयोग करें।

    [DllImport("kernel32.dll")] 
    public static extern IntPtr GetModuleHandle(string lpModuleName); 
    
  2. MyClass

    Marshal.GetHINSTANCE(typeof(MyClass).Module) 
    
  3. वापसी का उपयोग कर मौजूदा मॉड्यूल के लिए एक हैंडल युक्त निष्पादन के आधार का पता देता है:

    Marshal.GetHINSTANCE(this.GetType().Module)