Phương pháp bạn đề xuất sẽ hoạt động tốt.
Dường như bạn đã tiêm một dll vào một quá trình đích và muốn lấy địa chỉ của hàm trong dll đó trong quá trình đích từ quá trình tiêm dll.
Tôi giả định rằng bạn cũng có dll được tải trong quá trình tiêm dll vào quá trình đích và bạn muốn tạo một chuỗi từ xa trong quá trình đích và làm cho nó thực thi hàm đích trong quá trình đích.
Vì dll mà bạn đã tiêm có thể không được nạp tại cùng địa chỉ trong quá trình đích vì nó đang trong quá trình tiêm, bạn không thể sử dụng địa chỉ mà bạn nhận được từ gọi GetProcAddress trên hàm trong quá trình tiêm .
HMODULE chỉ là địa chỉ cơ sở của DLL (xem this answer để biết chi tiết). Vì vậy, bạn có thể lấy HMODULE của dll trong quá trình tiêm của bạn và trừ nó từ địa chỉ trả về bởi GetProcAddress về chức năng của bạn. Sau đó bạn có thể thêm HMODULE của dll được tiêm vào quá trình đích để bù đắp này để lấy địa chỉ của hàm đích trong dll được tiêm trong tiến trình đích. Giả sử hàm này có chữ ký chính xác, hãy chuyển nó làm hàm chuỗi cho cuộc gọi của bạn để tạo chuỗi từ xa và bạn hiện đang chạy hàm đích trong quá trình đích.
Tôi giải thích chi tiết hơn trong this answer.
Nguồn
2012-03-03 11:56:58
Cảm ơn. Tôi có một vấn đề khác. Khi tôi đang làm như thế này -> http://wklej.org/id/700802/ Tôi nhận được số tiền sai. Tôi có nên làm như thế -> http://wklej.org/id/700803/ ?? – Blood
@Blood: Cả hai thứ đó đều không có ý nghĩa gì cả. Bạn đã thêm offset (để đi từ cơ sở đến hàm) nhưng quên trừ nó (để lấy base ở vị trí đầu tiên). Xem câu trả lời của tôi. Vì bạn phải làm cả hai, và họ hủy bỏ, bạn cũng có thể không bận tâm. –
David, thời gian duy nhất nó hủy bỏ là nếu dll được nạp tại cùng một địa chỉ cơ sở trong cả hai quá trình. Nếu không câu trả lời của tôi hoạt động và bạn không :). –