이 페이지는 기계 번역되었습니다. 영어 원본을 읽어보세요. English

IBSurgeon 라이브러리

Firebird 서버를 크래시시키는 방법

때로는 Firebird 서버 엔진을 강제로 충돌시켜 덤프 파일을 생성하거나, 백업/복제 구성의 신뢰성을 확인하거나, 디버깅 목적으로 필요할 때가 있습니다.

Windows에서 충돌을 유발하려면 다음 UDF를 사용할 수 있습니다: badudf.dll.7z

다운로드하여 UDF 폴더에 넣고, 다음 내용으로 .bat 파일을 생성하세요:

Code
@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가 기본값)를 변수 usrpsw에 지정하세요.

스크립트는 임시 데이터베이스를 생성하고, 그 안에 UDF를 등록한 후 “킬러 쿼리"를 실행하고, 이후 데이터베이스를 삭제합니다.

결과적으로 Firebird가 충돌하며, Windows 오류 보고가 제대로 설정되어 있다면 firebird.exe 프로세스의 덤프가 생성됩니다.

프로덕션 데이터베이스에 BadUDF.dll을 등록하지 마세요!

또한 실험 후 UDF 폴더에서 삭제하세요.