2011-11-24 20 views
7

tôi nhận ra rằng phiên bản của tôi nhận được đúng baseaddress đã saiTìm các baseaddress đúng

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

nhưng baseaddress là sai

Tôi cũng nhìn vào MSDN nhưng this mã là rất kỳ lạ và mang lại cho tôi một vòng lặp vô hạn.

Tôi hy vọng bạn có thể giúp tôi vì tôi không thể tìm thấy bất kỳ ví dụ nào.

EDIT:

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

Ở đây tôi đã thực hiện một hình ảnh của máy tính để bàn của tôi. Im thực sự bối rối, có thể ai đó biết nơi tôi đã phạm sai lầm. http://i.stack.imgur.com/50lva.jpg

+4

Làm thế nào để bạn biết điều này là trở về địa chỉ cơ sở sai? Mã mà bạn liên kết có vẻ hợp lý với tôi ... –

Trả lời

2

Nếu bạn muốn những gì tôi nghĩ rằng bạn muốn, tôi chỉ có thể nghĩ đến một số cách để làm điều đó, không ai trong số họ là NET tích hợp dù ...

  1. Sử dụng P/Gọi để trả về địa chỉ cơ sở của tệp thực thi khởi động.

    [DllImport("kernel32.dll")] 
    public static extern IntPtr GetModuleHandle(string lpModuleName); 
    
  2. Trả về địa chỉ cơ sở của thực thi chứa MyClass

    Marshal.GetHINSTANCE(typeof(MyClass).Module) 
    
  3. Return một xử lý cho các mô-đun hiện nay sử dụng:

    Marshal.GetHINSTANCE(this.GetType().Module) 
    
Các vấn đề liên quan