파일에 정적으로 링크 된 .LIB
이 (가)있는 것 같습니다. Windows에서 API/라이브러리 호출은 실행 파일의 특수 섹션에서 JMP
명령어를 호출하여 구현됩니다.
예
들어
CALL <JMP.&[email protected]@Z>
는 다음 명령어
JMP.&[email protected]@Z
CALL
스택의 리턴 어드레스를 푸시하고이 부분의 다음 JMP
명령어로 점프에 CALL
할 것이다. 이 JMP
은 반송 주소를 수정하지 않으므로 실제로는 직접 CALL
과 같습니다.
간체 :
curEIP:
CALL <JMP.&[email protected]@Z> ; pushes (curEIP+insLen) to the stack and JMPs to (some virtual label named) `msvcrt.??3` in this section named above
...
msvcrt.??3:
JMP [email protected] ; JMPs to `[email protected]` - address of the real function in the statically linked LIB in memory
...
; after the CALL completes...
를 ... 그것은 이전에 실행을 계속 스택 (초기 EIP + instructionLengthInBytes)에 푸시 반환 값 주소로 반환합니다.
이와 관련하여 꺾쇠 괄호는 무엇을 의미합니까?
그들은 당신에게 위의 계획
의 관련 데이터를 보여주는 단지 대회이며, 그 함수의 이름에서 의미가 있나요?
예. 위 참조. 대괄호 사이의 이름은 디버거에서 디버거와 다릅니다.
"JMP." 혼란 스럽습니다. 함수 이름의 일부이며 무시해야합니까?
<JMP...
은 단순히 다음과 같은 문자/주소합니다 ((특별 섹션 포함) 언급 한 위의) 실행 파일에 정적으로 링크 된 라이브러리의 점프 테이블에 대한 참조로 해석되도록, incidcates. PE-Explorer/Debugger에서이를 재현 해보십시오.