2011-11-28 2 views
3

난 그냥 겪고되었다 [1] 나는 다음 발췌주의 :. 기능을 내보내기위한PE 수출 테이블 디자인

"요구 사항을 이름, 주소, 수출 순서가 당신 ' D는 PE 포맷 의 디자이너가이 세 항목을 모두 구조에 넣은 다음 에 이러한 구조의 배열이 있다고 생각합니다. " "대신, 내 보낸 항목의 각 구성 요소는 배열의 한 요소이며 개의 배열 (AddressOfFunctions, AddressOfNames, AddressOfNameOrdinals) 중 하나가 이고 모두 서로 병렬입니다."

3 포인터의 구조가 아닌 3 개의 다른 배열로 구현 된 이유에 대해 궁금합니다.

감사합니다.

[1] [http://msdn.microsoft.com/en-us/library/ms809762.aspx][1]

답변

2

예, 구조가 다소 복잡하다. 역사적인 이유는 별개로, 아마도 이름 대신 서문으로 가져온 기호에 액세스하는 데 최적화되어있었습니다.

정확하게 기억하면 AddressOfFunctions은 내 보낸 기호의 RVA가 들어있는 배열에 대한 RVA (이미지 기준에 상대적인 포인터)입니다. 서수는이 배열 내의 인덱스입니다. 따라서 기호가 있으면 기호를 빠르게 식별 할 수 있습니다.

OTOH 기호 이름 만있는 경우 AddressOfNames은 ASCII 문자열 기호 이름에 대한 포인터를 포함하는 배열에 대한 RVA입니다. 심볼을 찾아야하고 AddressOfNameOrdinals이 가리키는 배열에서 발견 된 인덱스를 사용하면 심볼 서수를 얻을 수 있습니다.