[Windows] 네가 모르는 Rundll32

1326 단어
많은 경우에 우리는rundll32를 사용한다exe는 숙주로서 dll의 어떤 함수를 실행합니다. 매번 코드를 대충 옮겨서 끝냅니다.이번에 dll이rundll32에 실행되는 함수를 내보내야 하기 때문에 먼저 자료를 찾아서 관련 지식을 모았다.

사용법

rundll32.exe , 전체 경로에 가장 좋고 경로에 빈칸, 쉼표, 인용부호가 있을 수 없기 때문에 경로를 짧은 파일 이름으로 바꾸어 불법 문자와 간용이 발생하지 않도록 하는 것이 좋다. 칸막이가 있어서는 안 된다. 간에는 빈칸이 있어야 한다. 이 부분은rundll32가 해석하지 않고 세 번째 매개 변수로 전달해야 한다.

함수 내보내기


먼저 도출 함수의 원형void CALLBACK EntryPoint(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow);을 살펴보자. 먼저 무시되기 쉬운 지식 중 하나는 도출 함수가 위와 같은 MBCS 인코딩이라고 생각하는 것이다. (세 번째 인자는 볼 수 있다) 그러나 현재 대부분의 상황에서 우리는 유니코드 인코딩을 사용한다. 이것이 역사적 원인인가?물론 아닙니다. 유니코드 버전을 내보낼 수 있습니다. 우선 rundll32에서 이 내보내기 함수를 어떻게 찾았는지 살펴보겠습니다.
  • 함수 이름에 W 접미사를 붙이고GetProcAddress로 찾기(먼저 찾은 것이 유니코드 버전임을 알 수 있음)
  • 1을 찾지 못하면 A 접미사를 붙여서 찾기
  • 2도 못 찾으면 원래 이름으로 찾아
  • 위의 세 가지 검색 절차에서 알 수 있듯이 유니코드 버전을 내보내려면 Entry PointW와 같은 함수 이름을 내보내야 하고 세 번째 파라미터는 LPWSTR이고 사용할 때rundll32 abc를 사용해야 한다.dll, Entry Point 를 사용하여 작업을 올바르게 수행할 수 있습니다.만약 내보내기 함수가 A 접미사를 가지고 있거나 접미사를 가지고 있지 않다면rundll32는 이것이 MBCS 인코딩의 내보내기 함수로 간주될 것이다.

    총결산


    위에서 설명한 바와 같이 만약에 우리가 유니코드 버전의 함수를 내보낸다면 사용할 때 W 접미사를 제거하는 데 주의해야 한다. 이런 잠재적인 규칙이 있으면 다른 사람에게 사용할 때 문제가 생기기 쉽기 때문에 일반적인 상황에서 접미사가 없는 MBCS 버전을 내보내는 것을 권장한다.

    좋은 웹페이지 즐겨찾기