>  기사  >  DLL의 파일 형식은 무엇입니까?

DLL의 파일 형식은 무엇입니까?

藏色散人
藏色散人원래의
2020-02-15 09:51:0124854검색

DLL의 파일 형식은 무엇입니까?

dll의 파일 형식은 무엇인가요?

DLL 파일(Dynamic Linkable Library)은 단독으로 실행할 수 없는 파일입니다. 이를 통해 프로그램은 특수 작업을 수행하는 데 필요한 코드 및 기타 리소스를 공유할 수 있습니다.

대규모 응용 프로그램은 여러 모듈로 구성되며 이러한 모듈은 상대적으로 독립적인 기능을 완성합니다. , 그들은 전체 소프트웨어 시스템의 작업을 완료하기 위해 서로 협력합니다. 기능이 더 일반적이고 다른 소프트웨어 시스템을 구축할 때 계속 사용되는 일부 모듈이 있을 수 있습니다. 소프트웨어 시스템을 구축할 때 모든 모듈의 소스 코드를 전체 응용 프로그램 EXE 파일로 정적으로 컴파일하면 몇 가지 문제가 발생합니다. 한 가지 단점은 응용 프로그램의 크기가 커지므로 더 많은 디스크 공간을 차지하고 프로그램이 실행된다는 점입니다. 또한 많은 양의 메모리 공간을 소비하여 시스템 리소스 낭비를 초래합니다. 또 다른 단점은 대규모 EXE 프로그램을 작성할 때 수정 및 재구축할 때마다 모든 소스 코드를 조정하고 컴파일해야 하므로 작업의 복잡성이 증가한다는 것입니다. 이는 또한 단계적 단위 테스트에 도움이 되지 않습니다.

Windows 시스템 플랫폼은 완전히 다르고 보다 효과적인 프로그래밍 및 실행 환경을 제공합니다. 독립적인 프로그램 모듈을 더 작은 DLL 파일로 만들고 별도로 컴파일하고 테스트할 수 있습니다. 런타임 시 시스템은 EXE 프로그램이 실제로 호출하려는 경우에만 이러한 DLL 모듈을 메모리 공간에 로드합니다. 이 접근 방식은 EXE 파일의 크기와 메모리 공간 요구 사항을 줄일 뿐만 아니라 이러한 DLL 모듈을 여러 응용 프로그램에서 동시에 사용할 수 있도록 해줍니다. Windows 자체는 DLL 모듈 형태로 일부 주요 시스템 기능을 구현합니다.

일반적으로 DLL은 .dll, .DRV, .FON, .SYS 및 많은 .EXE 확장자를 가진 디스크 파일입니다. 이는 글로벌 데이터, 서비스 기능 및 리소스로 구성됩니다. 런타임 시 시스템에 의해 호출 프로세스의 가상 공간에 로드되고 호출 프로세스의 일부가 됩니다. 다른 DLL과 충돌이 없으면 파일은 일반적으로 프로세스의 가상 공간에서 동일한 주소로 매핑됩니다. DLL 모듈에는 외부 세계에 서비스를 제공하기 위해 내보낸 다양한 기능이 포함되어 있습니다. DLL은 자체 데이터 세그먼트를 가질 수 있지만 자체 스택은 없으며 DLL을 호출하는 애플리케이션과 동일한 스택 모드를 사용합니다. DLL은 코드 캡슐화를 구현합니다. DLL은 특정 프로그래밍 언어와 관련이 있으며 컴파일러와는 아무런 관련이 없습니다.

Win32 환경에서 각 프로세스는 자체 읽기/쓰기 전역 변수를 복사합니다. 다른 프로세스와 메모리를 공유하려면 메모리 매핑 파일을 사용하거나 공유 데이터 세그먼트를 선언해야 합니다. DLL 모듈에 필요한 스택 메모리는 실행 중인 프로세스의 스택에서 할당됩니다. Windows는 DLL 모듈을 로드할 때 프로세스 함수 호출을 DLL 파일의 내보낸 함수와 일치시킵니다. DLL에 대한 Windows 운영 체제의 작동은 DLL을 이를 필요로 하는 프로세스의 가상 주소 공간에 매핑하는 것뿐입니다. DLL 함수 내의 코드로 생성된 모든 개체(변수 포함)는 이를 호출하는 스레드나 프로세스의 소유입니다.

호출 방법:

1. 정적 호출 방법: 컴파일 시스템은 응용 프로그램이 종료되면 DLL 로드 및 DLL 언로드 인코딩을 완료합니다(다른 프로그램이 DLL을 사용하는 경우 Windows의 DLL 응용 프로그램 기록). 1. 모든 관련 프로그램의 사용이 완료될 때까지 DLL을 해제합니다. 간단하고 실용적이지만 일반 요구 사항만 충족할 수 있습니다.

암시적 호출: 동적 생성 시 생성되는 .LIB 파일입니다. 링크 라이브러리가 필요합니다. 응용 프로그램 프로젝트에 추가할 때 DLL의 함수를 사용하려는 경우에만 설명하면 됩니다. 암시적 호출에서는 프로그래머가 DLL 파일을 생성할 때 LoadLibrary() 및 FreeLibrary()를 호출할 필요가 없습니다. , 링커는 해당 LIB 가져오기 파일을 자동으로 생성합니다. 이 파일에는 내보낸 각 DLL 함수의 선택적 식별 ​​번호가 포함되어 있지만 DLL의 대체 파일로 실제 코드는 포함되어 있지 않습니다. 정적 링크를 통해 애플리케이션을 컴파일하고 생성하면 애플리케이션의 호출 기능이 LIB 파일의 내보낸 기호와 일치하며 이러한 기호 또는 식별 번호도 생성된 DL L 파일 이름에 포함됩니다(전체 경로 이름은 아님). ), 링커는 이를 EXE 파일 내에 저장합니다.

응용 프로그램이 DLL 파일을 로드해야 할 때 Windows는 이 정보를 기반으로 DLL을 검색하고 로드한 다음 기호 이름 또는 식별 번호를 전달하여 DLL 기능의 동적 연결을 구현합니다. . 응용 프로그램에서 호출한 모든 DLL 파일은 응용 프로그램 EXE 파일이 로드될 때 메모리에 로드됩니다. 운영 체제는 DLL 출력 기능 정보를 포함하는 입력 라이브러리 파일에 연결됩니다. 실행 가능한 프로그램을 로드할 때 실행 가능한 프로그램은 함수 이름을 통해 DLL의 출력 함수를 직접 호출합니다. 2. 동적 호출 방법: 프로그래머는 API 함수를 사용하여 DLL을 로드 및 언로드합니다. DLL을 호출하는 목적을 달성하려면 사용하기가 더 복잡하지만 메모리를 더 효과적으로 사용할 수 있습니다.

.

명시적 호출:

은 MFC에서 제공하는 LoadLibrary 또는 AfxLoadLibrary를 사용하여 응용 프로그램에서 만든 동적 링크 라이브러리를 명시적으로 호출하는 것을 말합니다. 동적 링크 라이브러리의 파일 이름은 위 두 함수의 매개 변수입니다. () 소개하려는 기능을 얻으려면. 이제부터 이 가져온 함수를 이 애플리케이션의 사용자 정의 함수처럼 호출할 수 있습니다. 응용 프로그램이 종료되기 전에 MFC에서 제공하는 FreeLibrary 또는 AfxFreeLibrary를 사용하여 동적 링크 라이브러리를 해제해야 합니다. Win32 LoadLibary 함수를 직접 호출하고 DLL 경로를 매개변수로 지정합니다. LoadLibary는 GetProcAddress 함수를 호출할 때 응용 프로그램이 사용하는 HINSTANCE 매개 변수를 반환합니다. GetProcAddress 함수는 기호 이름이나 식별 번호를 DLL 내부의 주소로 변환합니다. 프로그래머는 DLL 파일이 로드되는 시기를 결정할 수 있으며, 명시적 링크는 런타임에 로드되는 DLL 파일을 결정합니다. DLL을 사용하는 프로그램은 사용하기 전에 DLL을 로드(LoadLibrary)하여 DLL 모듈에 대한 핸들을 얻은 다음 GetProcAddress 함수를 호출하여 출력 함수의 포인터를 가져와야 합니다. 종료하기 전에 DLL을 언로드(FreeLibrary)해야 합니다.

DLL은 메모리 사용량이 적고 편집이 쉽다는 특징을 가지고 있기 때문에 많은 컴퓨터 바이러스는 DLL 형식의 파일입니다. 하지만 단독으로 실행할 수는 없습니다.

동적 링크 라이브러리는 일반적으로 직접 실행할 수 없으며 메시지를 받을 수 없습니다. 특정 작업을 완료하기 위해 실행 프로그램이나 다른 DLL에서 호출할 수 있는 기능이 포함된 독립 파일입니다. 다른 모듈이 동적 링크 라이브러리의 함수를 호출할 때만 작동합니다.

위 내용은 DLL의 파일 형식은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.