마지막 이미지를 만들기 전에 개체 파일의 재배치를 해결하는 동안 링커에서 정확히 수행 한 단계는 무엇입니까? 보다 구체적으로 말하면 링커는 재배치 사이트에 이미 저장된 값을 어떻게 처리합니까? 최종 VA/RVA에 항상 추가합니까, 때로는 무시됩니까 (예 : 특정 재배치 유형)? "COFF 개체 (이미지가 아님) 파일에서 재배치가 수행되는 방법
는 MS COFF 사양에- , 장 5.6.2 :
나는 MS PE/COFF Specfication에 대한 명확한 설명을 찾을 수 없습니다, 그리고 인터넷 검색을 잠시 동안 실험 한 후, 모두가 내가 알 수있는 것은이 있었다 기본 재배치 타입 "이라면"기본 재배치는 모든 32 비트의 차이를 오프셋의 32 비트 필드에 적용합니다 "라고 말합니다. 재배치는 이미 지정된 오프셋에 저장된 모든 주소를 고려해야한다는 것을 의미합니다 . 그러나 5.6 장 (.reloc 섹션)은 이미지 파일에만 관련되며 오브젝트 파일에는 해당되지 않습니다.
- 재배치 테이블을 인쇄 할 때 dumpbin 유틸리티는 "Applied To"라는 열을 추가합니다.이 열은 재배치 사이트에 저장된 값을 항상 포함하는 것으로 보입니다.
- Relocation Directives chapter in the DJGPP COFF Specification에는 현재 위치에 저장된 값을 재배치 테이블 항목이 가리키는 심볼의 주소에 추가해야한다는 내용이 명확하게 명시되어 있습니다.
링커에서 재배치를 처리하는 방법을 설명하는 문서를 참조 할 수 있습니까?
개체 파일 4.2 "COFF Relocations"에 해당하는 섹션이 아니고 이미지 파일 전용 5.6.2 섹션이 아닙니까? – legalize
재배치 사이트가 0에 저장된 값과 다른 값을 가지면 실제로 수행해야 할 작업은 4.2 절에 설명되어 있지 않습니다. 실제로는 매우 일반적이며 dumpbin을 사용하여 쉽게 볼 수 있습니다. – user2625389