Tôi đang viết một bộ phân tích ELF, nhưng tôi đang gặp một số vấn đề khi chuyển đổi độ chính xác. Tôi có các chức năng để xác định endianness của máy phân tích và endiannness của tập tin đối tượng.Hoán đổi độ tin cậy mà không cần ntohs
Về cơ bản, có bốn kịch bản có thể:
- Một endian biên soạn lớn phân tích chạy trên một tập tin đối tượng về cuối lớn
- nhu cầu không có gì chuyển
- Một endian biên soạn lớn phân tích chạy trên một tệp đối tượng cuối cùng nhỏ
- thứ tự byte cần đổi chỗ, nhưng ntohs/l() và htons/l() đều là các macro trống o n một máy cuối lớn, vì vậy chúng sẽ không trao đổi thứ tự byte. Đây là vấn đề
- Một endian biên soạn ít phân tích chạy trên một tập tin đối tượng về cuối lớn
- nhu cầu thứ tự byte hoán đổi, vì vậy sử dụng htons() để trao đổi thứ tự byte
- Một máy phân tích biên dịch cuối cùng nhỏ chạy trên một tệp đối tượng cuối cùng nhỏ.
- nhu cầu không có gì chuyển
Có một chức năng tôi có thể sử dụng để dứt khoát trao đổi byte thứ tự/thay đổi endianness, vì ntohs/l() và htons/l() lấy endianness của máy chủ vào tài khoản và đôi khi không chuyển đổi? Hoặc tôi có cần tìm/ghi hàm thứ tự byte hoán đổi của riêng mình không?
Hành vi không xác định về mặt kỹ thuật trong C++. – bames53
Nhưng làm thế nào để chúng ta biết đúng thứ tự? –
@BoPersson OP biết, khi anh ta muốn trao đổi byte. Tôi đã chỉnh sửa câu trả lời của mình để hiển thị giải pháp phù hợp hơn. –