Sự khác biệt giữa phần .got và .got.plt ở định dạng ELF là gì?Sự khác biệt giữa phần .got và .got.plt là gì?
Trả lời
Nhận xét trước của tôi chuyển sang đúng, ví dụ bên dưới làm cho mọi thứ trở nên rõ ràng.
Đây là những tái định cư cho 32 bit của tôi i686-linux /lib/libm.so
Relocation section '.rel.dyn' at offset 0x32b8 contains 8 entries:
Offset Info Type Sym.Value Sym. Name
00025030 00000008 R_386_RELATIVE
00024fd8 00005706 R_386_GLOB_DAT 00025034 _LIB_VERSION
00024fdc 00000406 R_386_GLOB_DAT 00000000 __gmon_start__
00024fe0 00000506 R_386_GLOB_DAT 00000000 _Jv_RegisterClasses
00024fe4 00000806 R_386_GLOB_DAT 00000000 _rtld_global_ro
00024fe8 00000906 R_386_GLOB_DAT 00000000 stderr
00024fec 00013006 R_386_GLOB_DAT 0002507c signgam
00024ff0 00000e06 R_386_GLOB_DAT 00000000 __cxa_finalize
Relocation section '.rel.plt' at offset 0x32f8 contains 12 entries:
Offset Info Type Sym.Value Sym. Name
00025000 00000107 R_386_JUMP_SLOT 00000000 fputs
00025004 00000207 R_386_JUMP_SLOT 00000000 __errno_location
00025008 00000307 R_386_JUMP_SLOT 00000000 sprintf
0002500c 00000407 R_386_JUMP_SLOT 00000000 __gmon_start__
00025010 00000607 R_386_JUMP_SLOT 00000000 strtod
00025014 00000707 R_386_JUMP_SLOT 00000000 __assert_fail
00025018 00000a07 R_386_JUMP_SLOT 00000000 strlen
0002501c 00000b07 R_386_JUMP_SLOT 00000000 strtof
00025020 00000c07 R_386_JUMP_SLOT 00000000 fwrite
00025024 00000d07 R_386_JUMP_SLOT 00000000 strtold
00025028 00005e07 R_386_JUMP_SLOT 00005970 matherr
0002502c 00000e07 R_386_JUMP_SLOT 00000000 __cxa_finalize
Look rằng khi bạn lưu ý có hai phần di dời, cụ thể là .rel.dyn và .rel.plt. Bạn có thể thấy rằng tất cả các relocations cho .rel.plt có kiểu R_386_JUMP_SLOT, có nghĩa là chúng là các relocations chi nhánh, hầu như tất cả các relocations trong .rel.dyn là R_386_GLOB_DAT, nghĩa là di chuyển cho các biến toàn cục.
Một sự khác biệt tinh tế tồn tại giữa .symtab và .dynsym. Trong khi lần đầu tiên có chứa các tham chiếu cho tất cả các ký hiệu được sử dụng trong khi chỉnh sửa liên kết tĩnh thì sau này chỉ chứa các ký hiệu cần thiết cho liên kết động. Do đó, các chuyển vị được đề cập ở trên chỉ đề cập đến phần .dynsym.
- 1. sự khác biệt giữa ngSwitch và ngInclude là gì?
- 2. là gì sự khác biệt giữa SQL_Latin1_General_CP1_CI_AS và SQL_Latin1_General_CP1_CI_AI
- 3. Sự khác biệt giữa tổng hợp, thành phần và sự phụ thuộc là gì?
- 4. Sự khác biệt giữa JavaBean và POJO là gì?
- 5. Sự khác biệt giữa betweeen% INC và @INC là gì?
- 6. Sự khác biệt giữa INTERSECT và WHERE IN là gì?
- 7. Sự khác biệt giữa RoutedCommand và RoutedUICommand là gì?
- 8. Sự khác biệt chính giữa Sinatra và Ramaze là gì?
- 9. Sự khác biệt giữa DBI và DBD là gì?
- 10. Sự khác biệt giữa NSInvocation và chặn là gì?
- 11. Sự khác biệt giữa fn và fn * là gì?
- 12. Sự khác biệt giữa xtype và bí danh là gì?
- 13. Sự khác biệt giữa build.sbt và build.scala là gì?
- 14. Sự khác biệt giữa localname và qname là gì?
- 15. Sự khác biệt giữa Application.ThreadException và AppDomain.CurrentDomain.UnhandledException là gì?
- 16. Sự khác biệt giữa while (true) và loop là gì?
- 17. Sự khác biệt giữa dealloc và viewdidunload là gì?
- 18. Sự khác biệt giữa uint và System.UInt32 là gì?
- 19. Sự khác biệt giữa heuristic và thuật toán là gì?
- 20. Sự khác biệt giữa decodeURIComponent và decodeURI là gì?
- 21. Sự khác biệt giữa \ r và \ n là gì?
- 22. Sự khác biệt giữa ascx và .cshtml là gì?
- 23. Trong Ember.js, sự khác biệt giữa [] và Ember.A ([]) là gì?
- 24. Sự khác biệt giữa Thông báo và pynotify là gì?
- 25. Sự khác biệt giữa to_a và to_ary là gì?
- 26. sự khác biệt giữa callback là gì và hứa
- 27. Sự khác biệt giữa Request.ServerVariables ["REMOTE_ADDR"] và Request.UserHostAddress là gì?
- 28. Sự khác biệt giữa .closest() và .parents ('selector') là gì?
- 29. Sự khác biệt giữa isset và empty là gì?
- 30. Sự khác biệt giữa mẫu và đường dẫn là gì?
Theo: http://www.acsu.buffalo.edu/~charngda/elf.html mục '.got' không bao giờ được giải quyết một cách lười biếng, nhưng các mục' .got.plt' có thể được giải quyết một cách lười biếng. – ninjalj
Tôi nghĩ rằng .got là để di chuyển liên quan đến toàn cầu 'biến' trong khi .got.plt là một phần phụ trợ để hành động cùng với .plt khi giải quyết thủ tục địa chỉ tuyệt đối. – JohnTortugo