Ubuntu および Windows 用の GCC および MinGW でコンパイルしている Qt プロジェクトがあります。
次の LDFLAGS を追加して強化する必要があります。
- スタック実行保護:
LDFLAGS="-z noexecstack"
- データの再配置と保護 (RELRO):
LDLFAGS="-z relro -z now"
問題は、これを .pro ファイルで実行できるか、またその方法は? プロジェクト ファイルに LFLAGS と CFLAGS を簡単に追加できることがわかりましたが、LDFLAGS については何も見つかりませんでした。出力 Makefile でさえ、LDFLAGS が定義されていないようです。
長い間グーグルで調べた後に見つけた 1 つの方法QMAKE_CFLAGS_RELEASE += "--noexecstack"
は、.pro ファイルを追加することでしたが、これが正しい方法であるとは確信していません。
上記の行の後、生成された Makefile は次のようになります。
CC = gcc
CXX = g++
DEFINES = -DUNICODE -DMY_LIBRARY -DQT_NO_DEBUG -DQT_NETWORK_LIB -DQT_CORE_LIB
CFLAGS = -pipe -fno-keep-inline-dllexport -O2 -fstack-protector-strong -O2 -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security --noexecstack -Wall -Wextra $(DEFINES)
CXXFLAGS = -pipe -fno-keep-inline-dllexport -O2 -frtti -Wall -Wextra -fexceptions -mthreads $(DEFINES)
LINKER = g++
LFLAGS = -Wl,-s -shared -Wl,-subsystem,windows -mthreads -Wl,--out-implib,C:\libmylib0.a
noexecstack がCLFAGS
リストに表示されますが、それで問題ないかどうかはわかりません。CFLAGS
と同じではありませんLDFLAGS
。--thisdoesntexist
私が試したときにもうまくいったように見えたので、コマンドを検証していないようです。
前もって感謝します。
編集:
グウェンの回答に基づいて追加しようとしましQMAKE_LFLAGS += "-z noexecstack -z relro -z now"
たが、ld.exe からエラーが発生しました。
error: unrecognized option '-z'
EDIT2:
ツールのバージョン:
C:\Qt\Qt5.5.0\Tools\mingw492_32\bin>ld.exe -v
GNU ld (GNU Binutils) 2.24
C:\Qt\Qt5.5.0\Tools\mingw492_32\bin>g++.exe --version
g++.exe (i686-posix-dwarf-rev1, Built by MinGW-W64 project) 4.9.2