Tôi nhận thấy trong IDA rằng tệp PE mà tôi phân tích không chỉ có phần .rdata
mà còn là .idata
. Có gì khác biệt?Sự khác biệt giữa phân đoạn .rdata và .idata là gì?
Trả lời
.rdata
là dành cho dữ liệu const. Đây là phiên bản chỉ đọc của phân đoạn .data..idata
giữ thư mục nhập (.edata cho xuất). Nó được sử dụng bởi EXE và DLL để chỉ định các chức năng được nhập và xuất. Xem thông số định dạng PE (http://msdn.microsoft.com/library/windows/hardware/gg463125) để biết chi tiết.
Tóm tắt tên phân khúc tiêu biểu:
.text: Code
.data: Initialized data
.bss: Uninitialized data
.rdata: Const/read-only (and initialized) data
.edata: Export descriptors
.idata: Import descriptors
.reloc: Relocation table (for code instructions with absolute addressing when
the module could not be loaded at its preferred base address)
.rsrc: Resources (icon, bitmap, dialog, ...)
.tls: __declspec(thread) data (Fails with dynamically loaded DLLs -> hard to find bugs)
Như Martin Rosenau đề cập, tên phân khúc chỉ điển hình. Loại phân đoạn thực được chỉ định trong tiêu đề phân đoạn hoặc được xác định bằng cách sử dụng dữ liệu được lưu trữ trong phân đoạn.
Thực tế, tên của các phân đoạn bị Windows bỏ qua.
Có các trình liên kết sử dụng các tên phân đoạn khác nhau và thậm chí có thể lưu trữ Trình mô tả nhập, Xuất mô tả, Tài nguyên, v.v. trong phân đoạn ".text" thay vì sử dụng các phân đoạn riêng biệt.
Tuy nhiên, dường như đơn giản hơn để tạo các phần riêng biệt cho siêu dữ liệu như vậy, vì vậy hầu hết người liên kết sẽ sử dụng các phần riêng biệt.
Điều này có nghĩa là: ".idata", ".rdata", ".rsrc", ... do không chứa dữ liệu chương trình (mặc dù tên của chúng kết thúc bằng "dữ liệu") nhưng chúng chứa thông tin meta được sử dụng bởi hệ điều hành. Ví dụ, phần ".rsrc" chứa thông tin về biểu tượng được hiển thị khi xem tệp thi hành trong Explorer.
".idata" chứa thông tin về tất cả các tệp DLL theo yêu cầu của chương trình.
- 1. là gì sự khác biệt của phần và phân đoạn trong định dạng file ELF
- 2. Sự khác biệt giữa localname và qname là gì?
- 3. Sự khác biệt giữa dealloc và viewdidunload là gì?
- 4. Sự khác biệt giữa dispatch_get_global_queue và dispatch_queue_create là gì?
- 5. Sự khác biệt giữa (string [] args) và System.Environment.CommandLine là gì?
- 6. Sự khác biệt giữa các đoạn mã C# và TBB lắp ráp là gì?
- 7. Sự khác biệt giữa phân loại và phân loại topo là gì?
- 8. Sự khác biệt giữa JavaBean và POJO là gì?
- 9. Sự khác biệt giữa betweeen% INC và @INC là gì?
- 10. Sự khác biệt giữa INTERSECT và WHERE IN là gì?
- 11. Sự khác biệt giữa RoutedCommand và RoutedUICommand là gì?
- 12. Sự khác biệt chính giữa Sinatra và Ramaze là gì?
- 13. Sự khác biệt giữa DBI và DBD là gì?
- 14. Sự khác biệt giữa NSInvocation và chặn là gì?
- 15. Sự khác biệt giữa fn và fn * là gì?
- 16. Sự khác biệt giữa xtype và bí danh là gì?
- 17. Sự khác biệt giữa build.sbt và build.scala là gì?
- 18. Sự khác biệt giữa Application.ThreadException và AppDomain.CurrentDomain.UnhandledException là gì?
- 19. Sự khác biệt giữa while (true) và loop là gì?
- 20. Sự khác biệt giữa uint và System.UInt32 là gì?
- 21. Sự khác biệt giữa heuristic và thuật toán là gì?
- 22. Sự khác biệt giữa decodeURIComponent và decodeURI là gì?
- 23. Sự khác biệt giữa \ r và \ n là gì?
- 24. Sự khác biệt giữa phần .got và .got.plt là gì?
- 25. Sự khác biệt giữa ascx và .cshtml là gì?
- 26. Trong Ember.js, sự khác biệt giữa [] và Ember.A ([]) là gì?
- 27. Sự khác biệt giữa Thông báo và pynotify là gì?
- 28. Sự khác biệt giữa to_a và to_ary là gì?
- 29. sự khác biệt giữa callback là gì và hứa
- 30. Sự khác biệt giữa Request.ServerVariables ["REMOTE_ADDR"] và Request.UserHostAddress là gì?