#topicpath /////////////////////////////////////////////////////////////////////////////// * 目次 [#c7c4b126] #contents(); /////////////////////////////////////////////////////////////////////////////// * デバッグシンボルの分離 [#o121be49] ** 目的 [#uaa1a8ea] - 生成した実行形式にデバッグ情報を取り除くことにより、クラッキングされ難くする - デバッグシンボルを取り除いてもデバッグが可能となるよう、デバッグシンボルを別ファイルに保存しておく ** Makefile の実施例 [#z5786ffe] SHELL = /bin/sh PROG = OOO PROG_SYMBOL = $(PROG).sym CXXFLAGS = \ -Wall \ LDFLAGS = \ -lstdc++ \ CXXFLAGS_DEBUG = -ggdb -DDEBUG CXXFLAGS_RELEASE = -O2 LDFLAGS_DEBUG = LDFLAGS_RELEASE = SRCSCPP = \ a.C \ b.C \ c.C \ main.C \ SRCS = $(SRCSCPP) OBJCPP = $(SRCSCPP:.C=.o) OBJS = $(OBJCPP) # Rules & Program stuff MAKE = make CXX = g++ CPP = g++ -E RM = /bin/rm RMF = $(RM) -f CP = /bin/cp AR = /usr/bin/ar ARQ = $(AR) -q STRIP = /usr/bin/strip OBJCOPY = /usr/bin/objcopy OBJCOPY_ONLY_KEEP_DEBUG = $(OBJCOPY) --only-keep-debug ROOT_DEV = CURRENT all: echo "WARNING: Available make target is: dbg rel clean"; dbg: build-dbg strip-symbol rel: build-rel strip-symbol clean : $(RMF) $(OBJS) $(PROG) $(PROG_SYMBOL) build-dbg: LDFLAGS += $(LDFLAGS_DEBUG) build-dbg: CXXFLAGS += $(CXXFLAGS_DEBUG) build-dbg: $(PROG) build-rel: LDFLAGS += $(LDFLAGS_RELEASE) build-rel: CXXFLAGS += $(CXXFLAGS_RELEASE) build-rel: $(PROG) $(PROG) : $(OBJS) $(CXX) -o $(PROG) $(OBJS) $(CXXFLAGS) $(LDFLAGS) strip-symbol: $(PROG) echo "Stripping symbols" $(OBJCOPY_ONLY_KEEP_DEBUG) $(PROG) $(PROG_SYMBOL) $(STRIP) $(PROG) - 引数なしで make した場合、最初のターゲットが実行されるため、 all を最初のターゲットとなるように配置し、且つ、「引数なし、若しくは all の場合は make しない」ことを WARNING メッセージで表示するようにしている - "make dbg" 若しくは "make rel" とした場合、プログラムが compile, link された後、 strip-symbol ターゲットでバイナリファイルが「デバッグ情報なしファイル」(PROG)と「デバッグ情報のみのファイル」(PROG_SYMBOL)に分割される