Tôi gặp vấn đề sau: khi tôi nhận được backtrace trong C bằng cách sử dụng hàm backtrace (3), các ký hiệu trả về tên của hàm có thể dễ dàng xác định được với thư viện lùn và dladdr (3).Cách lấy tên hàm của con trỏ chức năng C
Vấn đề là nếu tôi có một con trỏ hàm đơn giản (ví dụ: bằng cách chuyển nó & chức năng) các hàm lùn + lùn không thể trợ giúp. Dường như con trỏ khác với con trỏ được trả về bởi backtrace (3) (nó không lạ, vì backtrace nhận được các con trỏ hàm này ngay từ stack).
Câu hỏi của tôi là liệu có một số phương pháp để giải quyết các tên này không? Ngoài ra, tôi muốn biết chính xác sự khác biệt giữa hai con trỏ là gì.
Cảm ơn!
UPDATE:
Sự khác biệt giữa con trỏ là khá đáng kể:
Người Tôi nhận được với backtrace là: 0x8048ca4
Phiên bản con trỏ trực tiếp: 0x3ba838
Dường như với tôi rằng thứ hai một nhu cầu một bù đắp.
Các con trỏ * rất * khác nhau, hoặc chỉ tắt một chút? – bstpierre
@bstpierre: Đã cập nhật câu hỏi. – terminus
Các con trỏ tìm thấy trên ngăn xếp thường là địa chỉ của lệnh sau khi cuộc gọi đến chức năng hiện tại. Họ thường không giống như con trỏ đến mục nhập của bất kỳ chức năng. – RBerteig