2015-10-15 18 views
11

Trong khi xem xét một mã số bugfix trong mã nguồn LLVM, tôi đã xem cụm từ "phần ảo" và tự hỏi ý nghĩa của nó.Phần ảo LLVM trong ngữ cảnh của các tệp đối tượng là gì?

Tôi đã thử Googling một vài thuật ngữ khác nhau và duyệt mã nguồn hơn nữa, nhưng tất cả những gì tôi thấy là triển khai chức năng thành viên isSectionVirtual của định dạng tệp đối tượng xuất hiện để thể hiện phần đó là ảo nếu nó không có nội dung (chẳng hạn như phần .bss, nhưng mã nguồn rõ ràng thể hiện rằng đây là hai khái niệm khác nhau). Việc triển khai thay đổi tùy thuộc vào định dạng đối tượng cụ thể có liên quan.

Tôi khá mới để hiểu được nội dung của tệp đối tượng, vì vậy tôi không chắc liệu đây có phải là một điều LLVM hay khái niệm chung chung bên ngoài LLVM.

Có thể ai đó vui lòng cho tôi biết phần ảo nằm trong tệp đối tượng là gì?

Trả lời

1

Theo nhận xét trong mã nguồn LLVM, phần "ảo" là phần không có bất kỳ dữ liệu nào trong tệp đối tượng. (Đặc tả PE/COFF không có thuật ngữ như vậy, vì vậy nó có thể chỉ được sử dụng trong LLVM).

Phần .bss chỉ có dữ liệu chưa được khởi tạo, vì vậy nó không được có bất kỳ dữ liệu nào trong tệp đối tượng (mặc dù về lý thuyết có thể). Vì vậy, phần .bss nên "ảo", và không có cần phải có đoạn mã sau vào LLVM:

if (Sec.isBSS() || Sec.isVirtual()) 

Nhưng vấn đề là rằng LLVM không hỗ trợ phần "ảo" trong các tập tin Mach-O (hoặc có thể Mach-O file không thể có họ)

bool MachOObjectFile::isSectionVirtual(DataRefImpl Sec) const { 
    // FIXME: Unimplemented. 
    return false; 
} 

Do đó LLVM có kiểm tra riêng biệt cho isBSSisVirtual.

phần

Một BSS là:

  • có thể đọc được
  • thể ghi
  • phi thực thi
  • dữ liệu uninitialised

Một phần ảo có thể có các thuộc tính khác nhau và sử dụng các trường hợp, chẳng hạn như các phần có thể ghi + thực thi, hoặc không thể đọc được (liên kết) không phải là BSS (lưu ý rằng các phần có thể ghi được + có thể thực thi được) không an toàn và các phần "căn chỉnh" chỉ hữu ích cho một số thủ thuật bảo vệ mã (chống bán phá giá)).

Vì vậy, mọi phần BSS là một phần ảo, nhưng không phải mọi phần ảo đều là phần BSS.

+0

Chắc chắn các kiểm tra riêng biệt chỉ ra rằng đây là những khái niệm thực tế khác nhau? Nếu không, chỉ có 'isBSS' và' isVirtual' sẽ không cần tồn tại. Cảm ơn bạn đã nhập bất kể! – OMGtechy

+0

@OMGtechy Tôi đã cập nhật câu trả lời. – Abyx

+0

Cảm ơn, điều đó tốt hơn nhiều! – OMGtechy

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