dll을 언로드하는 방법 - 페이지 4

 
OneDepo >> :

예, 맞습니다. 이렇게 하면 dll을 다시 쓰기 위한 대기 시간이 줄어들지만 주요 문제는 해결되지 않습니다. 표시기 언로드 - dll 변경! 라이브러리는 LoadLibrary()를 통해 로드되고 다운로드 카운터는 uv인 것이 분명합니다. 그러나 FreeLibrary()는 deinit()에서 호출되지 않는 것으로 보입니다. 카운터는 0으로 재설정되지 않으며 dll은 터미널을 닫을 때까지 차단됩니다. 그렇게 생각하지만 개발자들에게 확인이 필요합니다.

작동 중인 터미널에서 다음 작업을 수행하는 사용자(이 스레드의 일부 참가자 제외)를 중지하는 사람은 다음과 같습니다.

#가져오기 "kernel32.dll"

int GetModuleHandleA(문자열 sss);
무효 FreeLibrary(int hhh);
#수입


초기화()

{

handlissimo=GetModuleHandleA("test-dll.dll");

FreeLibrary(handlissimo) ;

}


???

함수 매개변수를 직접 추가할 수 있습니다. 메모리에서 완전히 제거하려면 metatrader.exe의 제한과 Windows의 STRONG CACHE(dllcache에서 보호된 dll 파일의 대체 포함)로 인해 이러한 방식으로 해제된 DLL을 제거하려면 regsvr32를 추가로 사용하십시오.

심지어 TheExpert가 MetaQuotes와 관련이 있음을 알 수 있습니다.

 

참고: 때때로 regsvr32도 DLL을 언로드하지 않고 Windows가 이전 버전을 대체합니다. 연습은 고독한 DLL이 일주일 동안 메모리에 있을 수 있음을 보여줍니다. 이 경우 컴퓨터를 재부팅하는 것만으로도 도움이 됩니다. 과부하를 원하지 않으면 세미 해커 방법(예: Process Explorer 프로그램)이 도움이 될 것입니다. 그녀는 이 포럼의 직업 학교 학생들이 주장하는 것과는 달리 메모리와 장소에서 무엇이든 언로드하는 방법을 알고 있습니다.

http://www.softpedia.com/get/System/System-Info/Process-Explorer.shtml

짧은 설명 및 플러그인:

http://rootkits.su/app/ShowApp.aspx?id_a=36

 

나는 당신이 놓지 않을 것을 참조하십시오. 좋은. 다음은 MS가 regsvr32에 대해 알려주는 내용입니다.


Regsvr32 도구 사용 및 오류 메시지


"Regsvr32 도구(Regsvr32.exe)는 자동으로 등록된 .dll 또는 .ocx 파일과 같은 OLE 컨트롤을 등록 및 등록 취소하도록 설계되었습니다. 이는 Windows, Microsoft Internet Explorer 및 기타 프로그램의 일부 문제를 해결할 때 필요할 수 있습니다. 예를 들어 , 다음 Microsoft 기술 자료 문서에 따르면 Windows Update 웹 사이트에서 다시 설치하기 전에 Wuv3is.dll 컨트롤을 등록 취소하려면 Regsvr32.exe 도구를 사용해야 합니다."


더:

"Regsvr32.exe 유틸리티는 Windows 시스템 레지스트리에 DLL 및 ActiveX 컨트롤을 등록하는 데 사용됩니다. DLL 파일 간의 불일치를 해결하는 데에도 사용할 수 있습니다."

 
HideYourRichess >> :

놓지 않으실 거라 봅니다. 좋은. MS가 regsvr32에 대해 알려주는 내용은 다음과 같습니다.


Regsvr32 도구 사용 및 오류 메시지


"Regsvr32 도구(Regsvr32.exe)는 자동으로 등록된 .dll 또는 .ocx 파일과 같은 OLE 컨트롤을 등록 및 등록 취소하도록 설계되었습니다. 이는 Windows, Microsoft Internet Explorer 및 기타 프로그램의 일부 문제를 해결할 때 필요할 수 있습니다. 예를 들어 , 다음 Microsoft 기술 자료 문서에 따르면 Windows Update 웹 사이트에서 다시 설치하기 전에 Wuv3is.dll 컨트롤을 등록 취소하려면 Regsvr32.exe 도구를 사용해야 합니다."


더:

"Regsvr32.exe 유틸리티는 Windows 시스템 레지스트리에 DLL 및 ActiveX 컨트롤을 등록하는 데 사용됩니다. DLL 파일 간의 불일치를 해결하는 데에도 사용할 수 있습니다."

글쎄요, 해커 삼촌이시여, regsvr32가 우리에게 어떻게 작용하는지 당신 자신의 마지막 구절에서 이미 추측했을 것입니다:


http://support.microsoft.com/kb/207132

RegSvr32.exe는 다음 Win32 함수를 이 순서로 호출합니다.

*Ole초기화
* DLL을 로드하기 위한 LoadLibrary
* DllRegisterServer 또는 DllUnregisterServer
*무료 라이브러리
*올레 초기화 해제

http://msdn.microsoft.com/en-us/library/ms683152(VS.85).aspx
무료 라이브러리 기능

로드된 DLL(동적 연결 라이브러리) 모듈을 해제하고 필요한 경우 참조 횟수를 줄입니다.
참조 횟수가 0에 도달하면 모듈은 호출하는 주소 공간에서 언로드됩니다.
프로세스 및 핸들이 더 이상 유효하지 않습니다.

즉, regsvr32는 라이브러리를 로드하고 해제합니다. 그러나 자체적으로 또는 위에서 제안한 간단하고 우아한 솔루션의 도움으로 라이브러리를 해제하지만 메모리에 계속 남아 있는 terminal.exe와 달리(이로 인해 Windows가 당분간 라이브러리를 언로드하지 않고 다른 프로세스에 제공) - 메모리에 매달린 메타 트레이더와 달리 명령줄 유틸리티 regsvr32.exe는 프로세스를 완료하고 메모리에서 언로드하므로 Windows에서 메모리에서 라이브러리를 완전히 언로드해야 합니다.

라이브러리의 언로드는 regsvr32를 사용하지 않고 발생할 수 있지만 이것은 룰렛입니다. 룰렛을 좋아하는 사람도 있고 대부분의 프로가 좋아하지 않는 사람도 있습니다. 이는 개발 수준의 문제입니다.

라이브러리가 단순하고 다른 많은 라이브러리에 연결되지 않으면 빠르게 언로드될 수 있습니다(MAY). 그러나 라이브러리가 복잡하고 데이터베이스에 대한 연결이 있고 이국적인 컨트롤이 있는 경우 해당 라이브러리를 언로드하는 데 몇 분 또는 몇 시간 동안 오랜 시간이 걸릴 수 있습니다.

그건 그렇고, AlwaysUnloadDLL 매개 변수와 관련하여 Microsoft 자체는 2000년까지만 작동했다고 주장합니다("DLL의 필요성"을 계산하기 위한 더 복잡하고 복잡한 알고리즘이 사용됨).

http://msdn.microsoft.com/en-us/library/bb776795(VS.85).aspx

DLL 언로드

셸은 사용 횟수가 0일 때 DLL을 자동으로 언로드하지만 DLL이 일정 기간 동안 사용되지 않은 경우에만 해당 DLL을 언로드합니다. 이 비활성 기간은 특히 셸 확장 DLL을 디버깅할 때 허용할 수 없을 정도로 길 수 있습니다. Windows 2000 이전 운영 체제의 경우 레지스트리에 다음 정보를 추가하여 비활성 기간을 단축할 수 있습니다.

  • HKEY_LOCAL_MACHINE
  • 소프트웨어
  • 마이크로소프트
  • 현재 버전
  • 탐침
  • AlwaysUnloadDll
 

나는 여전히 심한 감기에 걸려 있기 때문에 (그러나 온도가있는 침대에 누워도 나는 사람들의 문제를 완전히 무료로 제공하는 terminal.exe로 사람들의 문제를 해결하는 데 도움을줍니다. 즉, 독점적 인 재정 문제를 해결합니다.) (무식한 직업학교 학생들은 물론) 큰 관심을 갖고 있는 대기업에서 시스템 관리자로 일하는 것이 쉽지 않습니다.

모든 대기업은 UNIFORM 수단을 사용합니다. 이는 로컬 및 글로벌 모든 서버에서 Oracle이 실행되고 있음을 의미합니다. 모든 워크스테이션에서 동일한 버전의 Office 번들의 동일한 프로그램, Excel 또는 Oracle 또는 MS SQL Server와 함께 분석 프로그램이 사용되며 일부 " dbconnect.dll". 그리고 시스템 관리자를 위한 "훌륭한" 어느 날, 개발자는 마침내 이 프로그램의 새 버전과 모든 로컬 시스템 관리자를 디버그합니다(처음 100명의 회사에서 시스템 관리자는 500-800, 1.250테라바이트 하드 디스크 메모리, 130 NCR 노드, 145 Unix 서버 시스템 및 2600개의 Windows 서버, 2,000개 이상의 기업 위치에 있는 80,000명의 메일 사용자) 이 프로그램 "내일" REPLACE에 대한 주문이 도착합니다. 이 프로그램은 복잡하고 많은 것을 사용하며 컴퓨터에서 다시 작성하는 것만으로는 작동하지 않습니다. 그리고 시스템 관리자에게 시간이 있다면 regsvr32 이후에 컴퓨터를 재부팅해야 합니다.

동시에 18-00시까지 사무실 사람들이 여전히 컴퓨터에서 일하고 24-00시에 서비스 작업 이 Yorakly의 서버에서 시작되기 때문에 교체는 18-00에서 24-00 사이에만 이루어질 수 있습니다. Windows 및 자동 업데이트는 스테이션에서 시작됩니다 - 바이러스 백신 업데이트. REMOTE START regsvr32 및 스테이션에 접근하지 않고 스테이션을 재부팅하는 도구가 있지만 항상 작동하지는 않습니다 (활성화된 방화벽, 로그인되지 않은 사용자 등). 그리고 로컬 시스템 관리자는 서로 멀리 떨어져 있고 다른 층에 있고 이미 폐쇄된 사무실에 50-100대의 컴퓨터를 가질 수 있습니다.

이제 시스템 관리자는 회사 건물을 돌며 펜으로 regsvr32를 시작합니다.

 

Regsvr32는 레지스트리에 COM 서버를 등록 및 등록 취소하도록 설계되었습니다.

이것은 모든 dll이 아닙니다. 이것은 특별한 종류의 dll입니다. Regsvr32를 호출할 필요가 없습니다.

위와 같이 FreeLibrary를 호출하거나 "#import"를 사용하지 않고 쌍을 사용하는 것으로 충분합니다.

로드 라이브러리, 프리 라이브러리.

그건 그렇고, 어떤 이유로 내 dll은 표시기가 제거 된 직후에 해제됩니다.

 

사실 저는 러시아어와 영어를 읽을 수 있는 사람들을 위해 개인적으로 글을 씁니다. 이상한 사람들은 여기에서 regsvr32가 열 번째로 생성된 이유를 반복합니다. 그들은 주문처럼 주문처럼 그것을 망치질하고 다른 유형은 이유를 모릅니다. 그리고 regsvr32 가 우리가 원하는 대로 작동 하고 부작용이 없다면 무슨 상관 입니까?

응급 또는 소생술 의사가 알코올 중독자(예: "고급") 차아황산나트륨을 처방하는 것과 같습니다.

http://drugslist.ru/drugs/antichlor-sodium-thiosulfate/

그리고 그는 술을 마시지 않겠다고 소리치기 시작합니다. 왜냐하면 ..... 이것은 사진 수리공이고 그들이 그를 독살하려고 하기 때문입니다!

http://www.rwwc.ru/recipe/index6.php

여기에 똑똑한 사람들이 너무 많다면 모든 컴퓨터에 있는 다른 표준 유틸리티를 지적하게 하십시오. 이 유틸리티는 원하는 라이브러리를 로드하고 즉시 언로드하여 이러한 방식으로 Windows DLL 캐싱을 재설정합니다.

 
AlexEro >> :

...

regsvr32가 생성된 이유는 여기에서 열 번째로 반복됩니다. 그리고 regsvr32가 우리가 원하는 대로 작동하고 부작용이 없다면 무슨 상관입니까? 주문처럼 만트라처럼 망치질을 합니다.

응급 또는 소생술 의사가 알코올 중독자(예: "고급") 차아황산나트륨을 처방하는 것과 같습니다.

...

이 모든 것이 매우 중요합니다. 의학적 비유가 이미 사라졌다면 여기에 쓰는 것은 아픈 머리를 도끼로 치료하는 것과 같습니다.


알렉스에로 >> :

...

라이브러리의 언로드는 regsvr32를 사용하지 않고 발생할 수 있지만 이것은 룰렛입니다. 룰렛을 좋아하는 사람도 있고 대부분의 프로가 좋아하지 않는 사람도 있습니다. 개발 수준의 문제입니다.

라이브러리가 단순하고 많은 다른 라이브러리에 연결되지 않으면 빠르게 언로드될 수 있습니다(MAY). 그러나 라이브러리가 복잡하고 데이터베이스에 대한 연결이 있고 이국적인 컨트롤이 있는 경우 해당 라이브러리를 언로드하는 데 몇 분 또는 몇 시간 동안 오랜 시간이 걸릴 수 있습니다.

...


dll 로드/언로드 메커니즘이 원칙적으로 어떻게 작동하는지 이해하지 못하기만 하면 여기에서 이 주제에 대한 병든 환상이 있습니다. regsvr32를 사용할 필요도 없고 그런 용도가 아닙니다.또한 FreeLibrary를 사용하여 라이브러리를 deinit로 언로드하려고 할 필요가 없으며 라이브러리에 심각한 오류가 없는 한 라이브러리는 자체적으로 언로드되어야 합니다. 당신의 "단순하고 우아한 솔루션"은 말도 안됩니다. 특히 DllMain 내에 교착 상태가 있는 경우 많은 경우에 작동하지 않습니다.


반복합니다. dll을 언로드하는 유일한 정상적이고 올바른 방법은 dll 자체를 오류 없이 작성하는 것입니다. dll이 정상적으로 언로드되지 않으면 인코더가 구부러진 손(인코더, 모든 것이 터미널 자체에서 올바르게 수행됨)이 있는 것입니다. 항상 반복합니다. 항상 dll은 표시기를 제거한 직후에 정기적으로 언로드됩니다. 그리고 그것이 터미널에서 의도된 방식입니다.


그리고 시스템 관리자 경험을 언급하면서 허구에 무게를 두려고 하는 것은 헛된 일입니다. 우리는 이미 당신 중 시스템 관리자가 그다지 지능적이지 않아 매우 유치하고 재미있어 보입니다.

 
HideYourRichess >> :
당신은 dll 로딩/언로딩 메커니즘이 원칙적으로 어떻게 작동하는지 이해하지 못합니다. 여기에서 당신은 이 주제에 대해 그런 병약한 환상을 가지고 있습니다 ....(진언이 또 있었습니다.) 물론 심각한 오류가 없는 한 자체 언로드 . 당신의 "단순하고 우아한 솔루션"은 말도 안됩니다. 특히 DllMain 내에 교착 상태가 있는 경우 많은 경우에 작동하지 않습니다.
해커 삼촌, 당신의 말에는 논리가 없습니다. 라이브러리가 항상 자체적으로 언로드되는 경우 FreeLibrary에 대한 "내" 호출이 "많은 경우에 작동하지 않을 것"이라고 말하는 이유는 무엇입니까? deinit() 블록에서 FreeLibrary에 대한 추가 호출로 인해 어떤 피해가 발생할 수 있습니까? 아마도 FreeLibrary()에 대한 호출이 어떻게든 라이브러리 릴리스를 차단할 것이라고 생각합니다. 아니면 무엇입니까? 불일치, 멋진 해커 아저씨, 그리고 당연합니다.
 
AlexEro >> :
해커 아저씨 말에 논리가 없어요

첫 번째 백필 질문 - 시스템은 dll을 언로드할 프로세스를 어떻게 압니까?

백필에 대한 두 번째 질문은 dll을 다운로드하지 않고 백필에 대한 진입점을 찾는 방법입니다.


이제 요점으로. dll은 올바른 등록을 위해 regsvr 프로세스에서 로드 및 언로드됩니다. 물론 이것은 다른 프로세스에서 언로드하는 데 영향을 미치지 않습니다.

당신보다 멍청하려고하지 마십시오. 아직 한 가지 플러스가 있지만 마나를 읽을 수 있습니다.

라이브러리가 ALWAYS 및 ALWAYS 언로드된 경우 FreeLibrary에 대한 "my" 호출이 "많은 경우에 작동하지 않을 것"이라고 말하는 이유는 무엇입니까? deinit() 블록에서 FreeLibrary에 대한 추가 호출로 인해 어떤 피해가 발생할 수 있습니까? 아마도 FreeLibrary()에 대한 호출이 어떻게든 라이브러리 릴리스를 차단할 것이라고 생각합니다. 아니면 무엇입니까? 불일치, 멋진 해커 아저씨, 그리고 당연합니다.

그것은 분명하다. dll을 언로드하는 것 외에도 표시기(전문가) 초기화 해제의 구현은 이와 직접적으로 관련된 모든 것을 포함할 수 있으며, 이는 dll의 무단 릴리스를 해킹으로 바꾸어 차례로 터미널의 올바른 작동을 보장하지 않습니다.


전체 - 당신이 낙타가 아니라는 것을 증명하기 위해 더 이상 성공하지 못할 것입니다. 행운을 빕니다.

2All: 관리자에게 전달하기 위해 머리로 생각하지 마십시오.