Giả sử tôi muốn hoàn toàn thực hiện cuộc gọi hệ thống mở(), có thể để bọc syscall thực tế và thực hiện một số ghi nhật ký. One way to do this is to use LD_PRELOAD để tải thư viện đối tượng được chia sẻ (do người dùng tạo) chiếm điểm truy cập mở().Làm cách nào để tôi thực hiện lại (hoặc bọc) một hàm syscall trên Linux?
Cách thức mở() do người dùng tạo sau đó lấy con trỏ đến hàm glibc open()
bằng cách dlsym()
nhập vào và gọi nó.
Giải pháp được đề xuất ở trên là giải pháp động. Giả sử tôi muốn liên kết tĩnh của riêng mình open()
trình bao bọc tĩnh. Tôi sẽ làm như thế nào? Tôi đoán cơ chế là như nhau, nhưng tôi cũng đoán sẽ có một xung đột biểu tượng giữa người dùng định nghĩa open()
và libc open()
.
Vui lòng chia sẻ bất kỳ kỹ thuật nào khác để đạt được cùng một mục tiêu.
Làm thế nào về bạn chỉ cần dính một hàm wrapper/macro trong mã của bạn? –
@Seamus: Tôi không thích sử dụng macro. Tôi không thực sự có một vấn đề. Tôi chỉ yêu cầu nâng cao kiến thức SO và tìm hiểu một số mẹo mới. –