2010-08-13 33 views
18

Tôi muốn đổi tên các biểu tượng bên trong các tệp đối tượng (.o) bằng thứ gì đó tương đương với Mac của công cụ 'objcopy --redefine-syms'.Một objcopy tương đương với Mac/iPhone?

Tôi không tìm thấy arm-apple-darwin10-objcopy. Tôi đã thử cổng arm-elf-binutils của MacPorts và cũng cố gắng chơi một chút với otoolsegedit mà không có nhiều thành công.

Bạn có ý tưởng nào không?

+0

Bạn có đồng ý với việc xác định bí danh, điều đó có nghĩa là các biểu tượng cũ hơn sẽ vẫn tồn tại? –

+0

Làm thế nào về 'brew install binutils' và' gobjcopy'? ví dụ: 'gobjcopy --redefine-sym _D4main9foo_test1FZv = _foobar main.o main2.o'; LƯU Ý: kết quả thực thi có vẻ sai nhưng 'nm main2.o | grep _foobar' làm việc – timotheecour

Trả lời

3

Âm thanh như một công việc cho objconv Agner Sương mù của

objconv announcement

bây giờ tôi đã làm hỗ trợ đầy đủ cho các file Mach-O trong file chuyển đổi đối tượng nêu tại bài viết trước đây của tôi kết thúc. Bạn có thể sử dụng nó như là một thay thế cho các thiếu objcopy tiện ích.

Objconv có thể được sử dụng cho các mục đích sau: Chuyển đổi các file đối tượng và thư viện/tập tin lưu trữ giữa Mach-O, ELF, COFF và các định dạng OMF cho tất cả x86 và các nền tảng x86-64. Thay đổi biểu tượng tên trong các tệp đối tượng, tạo biểu tượng yếu, thêm tên bí danh vào biểu tượng.
xây dựng, sửa đổi và chuyển đổi tĩnh tập tin thư viện (* .a, * .lib) trên nền tảng (Mac, Linux, BSD, Windows)
file đối tượng Dump và các file thực thi file đối tượng tháo rời và file thực thi. Rất tốt trình tháo rời. Có thể tải xuống từ www.agner.org/optimize/. Mã nguồn có sẵn theo GPL. Hãy cho tôi biết nếu bạn muốn thử nghiệm nó. Chúc vui vẻ!

objconv manual

objconv.zip - source

+0

từ câu hỏi thường gặp: "11.3 Có thể chuyển đổi tập tin cho ARM? Không. Rất nhiều người đã hỏi về điều này, vì vậy rõ ràng là cần một công cụ như vậy, nhưng tôi sẽ không thực hiện Objconv chỉ hỗ trợ các tệp cho kiến ​​trúc x86 và x86-64. Nó sẽ yêu cầu viết lại chính sách objconv để tạo một trình chuyển đổi cho các tệp ARM. " –

1

objconv hiện không làm việc cho ARM, vì vậy tùy chọn này không có sẵn cho iPhone. Nó sẽ không có vấn đề để sử dụng objconv từ elf để mach-o cho mac OSX x86/x64 mặc dù. Hãy cho tôi biết nếu bạn tìm thấy một giải pháp cho ARM

2

Tôi biết tôi đang hồi sinh sau này lại từ cõi chết, nhưng ...

tôi có nhu cầu đột ngột để làm điều này là tốt, và phát hiện ra rằng objcopy doesn 't làm việc trên OSX là một chút sốc. Nhưng tôi nghĩ nó có thể sử dụng ld để đạt được hiệu quả tương tự:

ld -r input.o -o output.o -alias oldsymbol newsymbol -unexported_symbol oldsymbol 

này thực sự chỉ là tạo ra một bí danh cho các biểu tượng dưới một cái tên mới và giấu cái cũ.

Tôi chưa có cơ hội thử nghiệm nhiều, nhưng nhìn vào tệp đầu ra với nm cho thấy có vẻ như nó đang hoạt động đúng.

+0

Lệnh này xóa tất cả các biểu tượng gỡ lỗi. Bạn có biết cách sao chép chúng từ tệp đối tượng gốc không? – Dmitry

+1

'objcopy' có thể đổi tên biểu tượng T (biểu tượng phần văn bản) và biểu tượng U (không xác định). Tuy nhiên, giải pháp 'ld' của bạn chỉ có thể xử lý trước đây. –