Firebird 서버를 크래시시키는 방법
때로는 Firebird 서버 엔진을 강제로 충돌시켜 덤프 파일을 생성하거나, 백업/복제 구성의 신뢰성을 확인하거나, 디버깅 목적으로 필요할 때가 있습니다.
Windows에서 충돌을 유발하려면 다음 UDF를 사용할 수 있습니다: badudf.dll.7z
다운로드하여 UDF 폴더에 넣고, 다음 내용으로 .bat 파일을 생성하세요:
@echo off
setlocal enabledelayedexpansion enableextensions
set fbc=C:\HQBird25.in
set dbnm=%~dp0tmptest.fdb.tmp
set usr=SYSDBA
set psw=masterkey
del 2>nul
echo create database 'localhost:!dbnm!' user '!usr!' password '!psw!'; | "!fbc!\isql.exe" -q -z
(
echo set echo on;
echo declare external function crashme
echo returns int by value
echo entry_point 'crashme' module_name 'badudf';
echo commit;
echo show function;
echo select crashme(^) from rdb$database;
) > %~dp0tmptest.sql.tmp
"!fbc!\isql.exe" ^
localhost:!dbnm! ^
-q -i %~dp0tmptest.sql.tmp ^
-user !usr! -pas !psw!
del !dbnm!
del %~dp0tmptest.sql.tmp
스크립트에서 환경 변수 fbc에 Firebird 폴더 경로를 지정하세요. 예를 들어
c:\Firebird25.in 또는 C:\Firebird30
그리고 실제 슈퍼유저 로그인과 비밀번호(SYSDBA/masterkey가 기본값)를 변수 usr과 psw에 지정하세요.
스크립트는 임시 데이터베이스를 생성하고, 그 안에 UDF를 등록한 후 “킬러 쿼리"를 실행하고, 이후 데이터베이스를 삭제합니다.
결과적으로 Firebird가 충돌하며, Windows 오류 보고가 제대로 설정되어 있다면 firebird.exe 프로세스의 덤프가 생성됩니다.
프로덕션 데이터베이스에 BadUDF.dll을 등록하지 마세요!
또한 실험 후 UDF 폴더에서 삭제하세요.