2009-07-06 6 views
3

파이썬 Lisp 컴파일러와 일부 C 링커 소스에서이 용어를 보았습니다.수정의 정의?

제 생각에 픽스 업 (fix-up)은 어셈블리 루틴 (assembly routine)을 둘러싼 래퍼 (wrapper)를 사용하여 정렬이 올바르다는 것을 확신하지만, 여기서는 아무 것도 모릅니다.

답변

8

"픽업"은 링커 용어입니다. 그것의 꽤 좋은 논의는 여기있다 :

http://www.microsoft.com/msj/0797/hood0797.aspx

객체 파일 (.o 인, .OBJ) 일부 외부 기호를 참조 할 때마다 출력됩니다 자리 표시 자 "5 등록 주소 0을 넣어"와 같은 코드와 "0을 기호 'foo'의 실제 주소로 채 웁니다. 어떤 다른 객체 파일은 'foo'를 정의 할 것이고, 링커는 다시 되돌아 가서 0을 올바른 주소로 "수정"합니다.

덧붙여 말하자면 아무도 'foo'를 정의하지 않으면 레트로 50의 스타일 오류 메시지가 '_foo에 대한 참조를 찾을 수 없습니다'또는 C++을 사용하는 경우 이해가 덜한 것처럼 보입니다.

'foo'의 주소가 링커가 넣으려는 위치에 맞지 않는 경우 거의 수정되지 않습니다. 일반적으로 이는 상대적 오프셋이 너무 큰 픽스 업에서 나옵니다.

+0

위대한 답변과 링크, 감사합니다. – skypher

1

는 링커와 로더는 전문 용어를 많이 설명하는 흥미로운 잉커 자원입니다, 너무 여기 저기 비의 x86 CPU를 포함하십시오 comp.compilers의 중재자에서

http://www.iecc.com/linker/

.