Tôi đang cố gắng hiểu cách thức các tệp Mach-o hoạt động và đã có tiến bộ tốt với các tài nguyên trực tuyến sẵn có (Cụ thể, trang Apple tại đây: http://developer.apple.com/library/mac/#documentation/developertools/conceptual/MachORuntime/Reference/reference.html), nhưng tôi đã đánh một rào cản về sự hiểu biết cách biểu tượng làm việc.Sơ đồ biểu tượng Mach-O (IOS)
Sử dụng "otool -l" Tôi thấy phần sau:
Section
sectname __symbolstub1
segname __TEXT
addr 0x00005fc0
size 0x00000040
offset 20416
align 2^2 (4)
reloff 0
nreloc 0
flags 0x80000408
Tuy nhiên khi tôi nhìn vào các dữ liệu từ các tập tin nhị phân trong một trình soạn thảo hex tôi thấy 4 byte sau lặp đi lặp lại một lần nữa và một lần nữa:
00005FC0 38 F0 9F E5 38 F0 9F E5 38 F0 9F E5 38 F0 9F E5 88
00005FD0 38 F0 9F E5 38 F0 9F E5 38 F0 9F E5 38 F0 9F E5 88
00005FE0 38 F0 9F E5 38 F0 9F E5 38 F0 9F E5 38 F0 9F E5 88
00005FF0 38 F0 9F E5 38 F0 9F E5 38 F0 9F E5 38 F0 9F E5 88
Điều này trông giống như LDR làm tăng máy tính theo số tiền cố định, nhưng tôi không thấy lý do số tiền này giống nhau cho mỗi mục nhập trong bảng biểu tượng.
Nếu ai đó có thể làm sáng tỏ lý do tại sao điều này xảy ra hoặc cung cấp bất kỳ tài nguyên nào có mức thấp này, vui lòng cho tôi biết.
Cảm ơn!
Tôi nghĩ rằng tôi đã tìm ra những gì đang diễn ra, mỗi mục trong 4 byte trong bảng sẽ trỏ đến vùng dữ liệu bên dưới có lệnh DCD lưu trữ vị trí của cuộc gọi hàm. Tuy nhiên tôi vẫn còn một chút nhầm lẫn lý do tại sao mức độ thêm này của indirection là cần thiết, vì vậy nếu có ai có thể cung cấp thông tin theo tôi sẽ đánh giá cao nó. – Locksleyu