DLL
여러 응용 프로그램에서 동시에 사용할 수 있는 실행가능한 함수 or 데이터의 공유 라이브러리
-> exe와 달리 자체적으로 코드를 실행할 수는 없다
- 장점
코드 모듈화
코드 재사용
효율적인 메모리 사용
핵심 dll들은 거의 모든 윈도우 프로세스에서 사용된다.
-> 따라서 한 물리공간에 매핑하고 가상주소에서 여기를 가리키도록 한다
-> 즉, 하나의 프로세스에서 dll의 특정 함수 주소를 알아내면 모든 프로세스에서도 그 주소는 동일하다
예) kernel32.dll, ntdll.dll, user32.dll 등
DLL 만들기 & 실행

visual studio에서 cpp파일 만드는 것처럼 새 프로젝트에서 dll을 선택하면 템플릿이 생성된다.
DLL 진입점
- DLL_PROCESS_ATTACH: 프로세스가 DLL을 로드
- DLL_THREAD_ATTACH: 프로세스가 새 스레드를 생성
- DLL_THRAED_DETACH: 스레드가 정상 종료됨
- DLL_PROCESS_DETACH: 프로세스가 DLL 언로드
함수 내보내기
호출하는 프로그램에서 사용할 수 있는 함수를 정의할 수 있음
// dllmain.cpp : DLL 애플리케이션의 진입점을 정의합니다.
#include "pch.h"
#include <Windows.h>
// extern __declspec(dllexport): export directory에 등록시킴
extern __declspec(dllexport) void Helloworld() {
MessageBoxA(NULL, "hello, world!", "my dll message", MB_ICONINFORMATION);
}
// dll entry point
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
exe에서 dll 불러오기
이건 c프로젝트에서 수행하자
#include <Windows.h>
#include <stdio.h>
typedef void (WINAPI* HelloworldFunctionPointer) ();
int main() {
// dll 불러오기
HMODULE hModule = GetModuleHandleA("Dll1.dll");
if (hModule == NULL) {
hModule = LoadLibraryA("Dll1.dll");
}
// dll 함수 가져오기
PVOID pHelloWorld = GetProcAddress(hModule, "Helloworld");
HelloworldFunctionPointer Helloworld = (HelloworldFunctionPointer)pHelloWorld; // 함수 형변환도 해줘야 함!
// dll 함수 호출
Helloworld();
return 0;
}
번외
따로 exe파일을 만들지 않고도 rundll32.exe를 사용해 dll을 실행할 수 있다
extern "C" __declspec(dllexport)
void CALLBACK 함수이름(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow)
{
// 실행할 코드
}
이런 형식을 사용하면 rundll32.exe로 dll을 실행할 수 있다.
rundll32.exe Dll1.dll,Helloworld

반응형
'악성코드와 백신 > 악성코드 개발일지' 카테고리의 다른 글
| [악성코드 개발](6)[페이로드 저장] (0) | 2026.03.06 |
|---|---|
| [악성코드 개발](5)[Windows process & thread] (0) | 2026.03.02 |
| [악성코드 개발](3)[Windows API] (1) | 2026.02.26 |
| [악성코드 개발](2)[Windows 아키텍쳐] (0) | 2026.02.25 |
| [악성코드 개발](1)[환경 구축] (0) | 2026.02.23 |