2013-05-03 24 views
12

Tôi hiện đang sử dụng LLVM'sObjectFile (được ghi tài liệu here) để thể hiện tệp thực thi. Tôi đã đọc thành công trong một tệp thực thi với ObjectFile và muốn xác định địa chỉ đích cuộc gọi nào trong tệp thực thi của tôi tương ứng với các tên biểu tượng có trong số symbol_iterator thu được bằng một cuộc gọi đến hàm begin_dynamic_symbols(). Lặp lại trên mỗi biểu tượng trong symbol_iterator cho tôi tên của mỗi biểu tượng và địa chỉ của nó, nhưng vì các biểu tượng là động, địa chỉ của mỗi biểu tượng là -1; điều này cho biết rằng ObjectFile không liên kết trực tiếp tên biểu tượng với địa chỉ đích cuộc gọi tương ứng của chúng.Độ phân giải biểu tượng động có thể thực thi bằng LLVM

Có cách nào để xác định địa chỉ đích cuộc gọi nào sẽ ánh xạ tới biểu tượng động nào trong ObjectFile không? Tôi không muốn tính toán theo cách thủ công tất cả các bước nhảy qua PLTGOT nếu tôi có thể tránh làm như vậy.

+0

Tôi nghĩ bạn nên hỏi nó trong danh sách gửi thư của cfe-dev: http://lists.cs.uiuc.edu/pipermail/cfe-dev/ –

Trả lời

1

Địa chỉ của ký hiệu động chỉ được tính khi các tệp đối tượng được tải vào bộ nhớ và được liên kết trong bảng biểu tượng của chương trình. Nói chung, không thể xác định địa chỉ cuối cùng của họ trước khi liên kết.

Bạn có thể lấy dữ liệu bạn muốn bằng mô-đun Tối ưu hóa thời gian liên kết của LLVM thay vì ObjectFile, vì nó thực hiện liên kết địa chỉ khi tải mô-đun, nếu tôi nhớ chính xác.

Chúc may mắn!

Các vấn đề liên quan