2015-07-16 22 views
9

Tôi có một tệp x86 32-bit x86 có chứa một phần .eh_frame, mặc dù các nỗ lực của tôi để xóa nó.Làm thế nào để loại bỏ một phần ELF cụ thể, mà không tước các biểu tượng khác?

Tôi muốn xóa phần .eh_frame mà không chạm vào bất kỳ biểu tượng nào trong các phần khác, kể cả các biểu tượng không sử dụng.

strip dường như không có tùy chọn --remove-only và luôn kết thúc việc sửa đổi các phần khác.

Làm cách nào để xóa một phần ELF mà không sửa đổi bất kỳ điều gì khác trong tệp?

Như được đề xuất trong other questions, tôi đã thử một số biến thể của gcc-3.4.3 -fomit-frame-pointer -fno-exceptions -fno-asynchronous-unwind-tables -fno-unwind-tables, nhưng phần .eh_frame luôn ở đó. Điều này có thể do thực tế là tôi phải sử dụng một GCC cũ (3.4.3) ... bản thân tệp nguồn không chứa gì đặc biệt mà có thể yêu cầu các phần này: int main() { return 0; }.

Trả lời

16

strip, mặc dù tên, không phải là công cụ phù hợp tại đây.

Giải pháp có thể là objcopy --remove-section .eh_frame a.out, trong đó a.out là tên của tệp ELF cần sửa đổi.

Thật không may, trừ khi bạn biết về objcopy, bạn có thể sẽ tìm kiếm các giải pháp với strip mà không cần tìm bất kỳ giải pháp nào.

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