ນີ້ແມ່ນຄໍາສັ່ງ dpkg-buildflags ທີ່ສາມາດດໍາເນີນການໄດ້ໃນ OnWorks ຜູ້ໃຫ້ບໍລິການໂຮດຕິ້ງຟຣີໂດຍໃຊ້ຫນຶ່ງໃນຫຼາຍໆບ່ອນເຮັດວຽກອອນໄລນ໌ຂອງພວກເຮົາເຊັ່ນ Ubuntu Online, Fedora Online, Windows online emulator ຫຼື MAC OS online emulator
ໂຄງການ:
NAME
dpkg-buildflags - ສົ່ງຄືນການສ້າງທຸງເພື່ອໃຊ້ໃນລະຫວ່າງການສ້າງຊຸດ
ສະຫຼຸບສັງລວມ
dpkg-buildflags [ທາງເລືອກ... ] [ຄໍາສັ່ງ]
ລາຍລະອຽດ
dpkg-buildflags ເປັນເຄື່ອງມືເພື່ອດຶງທຸງການລວບລວມເພື່ອໃຊ້ໃນລະຫວ່າງການສ້າງ Debian
ຊຸດ. ທຸງເລີ່ມຕົ້ນແມ່ນຖືກກໍານົດໂດຍຜູ້ຂາຍແຕ່ພວກເຂົາສາມາດຂະຫຍາຍ / ຂ້າມໄດ້
ໃນຫຼາຍວິທີການ:
1. ລະບົບທົ່ວກັບ /etc/dpkg/buildflags.conf;
2. ສໍາລັບຜູ້ໃຊ້ປະຈຸບັນທີ່ມີ $XDG_CONFIG_HOME/dpkg/buildflags.conf ບ່ອນທີ່
$XDG_CONFIG_HOME ເລີ່ມຕົ້ນເປັນ $HOME/.config;
3. ຊົ່ວຄາວໂດຍຜູ້ໃຊ້ກັບຕົວແປສະພາບແວດລ້ອມ (ເບິ່ງພາກ ENVIRONMENT);
4. ແບບເຄື່ອນໄຫວໂດຍຜູ້ຮັກສາຊຸດກັບຕົວແປສະພາບແວດລ້ອມທີ່ກໍານົດໄວ້ໂດຍຜ່ານ
debian/ກົດລະບຽບ (ເບິ່ງພາກ ENVIRONMENT).
ໄຟລ໌ການຕັ້ງຄ່າສາມາດມີສອງປະເພດຂອງຄໍາສັ່ງ:
SET ທຸງ ມູນຄ່າ
ລົບລ້າງທຸງທີ່ມີຊື່ ທຸງ ທີ່ຈະມີຄຸນຄ່າ ມູນຄ່າ.
ແຖບ ທຸງ ມູນຄ່າ
ແຖບຈາກທຸງທີ່ມີຊື່ ທຸງ ທຸງການກໍ່ສ້າງທັງຫມົດທີ່ລະບຸໄວ້ໃນ ມູນຄ່າ.
ສະ ເໜີ ທຸງ ມູນຄ່າ
ຂະຫຍາຍທຸງທີ່ມີຊື່ ທຸງ ໂດຍການເພີ່ມເຕີມທາງເລືອກທີ່ໄດ້ຮັບໃນ ມູນຄ່າ. ຊ່ອງແມ່ນ
ຂຶ້ນກັບຄ່າຕໍ່ທ້າຍຖ້າຄ່າປັດຈຸບັນຂອງທຸງແມ່ນບໍ່ຫວ່າງເປົ່າ.
ກຽມຕົວ ທຸງ ມູນຄ່າ
ຂະຫຍາຍທຸງທີ່ມີຊື່ ທຸງ ໂດຍ prepending ທາງເລືອກທີ່ໃຫ້ຢູ່ໃນ ມູນຄ່າ. ຊ່ອງແມ່ນ
ຕື່ມໃສ່ກັບຄ່າທີ່ຕໍ່ທ້າຍຖ້າຄ່າປັດຈຸບັນຂອງທຸງແມ່ນບໍ່ຫວ່າງເປົ່າ.
ໄຟລ໌ການຕັ້ງຄ່າສາມາດມີຄໍາຄິດເຫັນກ່ຽວກັບແຖວທີ່ເລີ່ມຕົ້ນດ້ວຍ hash (#). ຫວ່າງເປົ່າ
ສາຍຍັງຖືກລະເລີຍ.
ສາມາດ
-- ຖິ້ມ ພິມເພື່ອສົ່ງອອກມາດຕະຖານການລວບລວມທຸງທັງໝົດ ແລະຄ່າຂອງພວກມັນ. ມັນພິມທຸງຫນຶ່ງ
ຕໍ່ເສັ້ນແຍກອອກຈາກຄ່າຂອງຕົນໂດຍເຄື່ອງຫມາຍເທົ່າທຽມກັນ ("ທຸງ=ມູນຄ່າ”). ນີ້ແມ່ນ
ຄຳສັ່ງເລີ່ມຕົ້ນ.
--ລາຍການ ພິມບັນຊີລາຍຊື່ຂອງທຸງທີ່ສະຫນັບສະຫນູນໂດຍຜູ້ຂາຍໃນປະຈຸບັນ (ຫນຶ່ງຕໍ່ແຖວ). ເບິ່ງ
ສະ ໜັບ ສະ ໜູນ ດອກໄມ້ ພາກສ່ວນສໍາລັບຂໍ້ມູນເພີ່ມເຕີມກ່ຽວກັບພວກເຂົາ.
--ສະຖານະ
ສະແດງຂໍ້ມູນໃດໆທີ່ສາມາດເປັນປະໂຫຍດເພື່ອອະທິບາຍພຶດຕິກໍາຂອງ
dpkg-buildflags (ນັບຕັ້ງແຕ່ dpkg 1.16.5): ຕົວແປສະພາບແວດລ້ອມທີ່ກ່ຽວຂ້ອງ, ປະຈຸບັນ
ຜູ້ຂາຍ, ສະຖານະຂອງທຸງຄຸນນະສົມບັດທັງຫມົດ. ນອກຈາກນີ້ພິມທຸງ compiler ຜົນໄດ້ຮັບກັບ
ຕົ້ນກໍາເນີດຂອງພວກມັນ.
ນີ້ມີຈຸດປະສົງເພື່ອດໍາເນີນການຈາກ debian/ກົດລະບຽບ, ເພື່ອໃຫ້ບັນທຶກການກໍ່ສ້າງຮັກສາຄວາມຊັດເຈນ
ຮ່ອງຮອຍຂອງທຸງການກໍ່ສ້າງທີ່ໃຊ້. ນີ້ສາມາດເປັນປະໂຫຍດໃນການວິນິດໄສບັນຫາທີ່ກ່ຽວຂ້ອງກັບ
ໃຫ້ເຂົາເຈົ້າ.
--ສົ່ງອອກ=ຮູບແບບ
ພິມເປັນຄໍາສັ່ງຜົນຜະລິດມາດຕະຖານທີ່ສາມາດຖືກນໍາໃຊ້ເພື່ອສົ່ງອອກການລວບລວມທັງຫມົດ
ທຸງສໍາລັບບາງເຄື່ອງມືໂດຍສະເພາະ. ຖ້າ ຮູບແບບ ມູນຄ່າແມ່ນບໍ່ໄດ້ໃຫ້, sh ແມ່ນສົມມຸດ.
ມີແຕ່ທຸງການລວບລວມທີ່ເລີ່ມຕົ້ນດ້ວຍຕົວພິມໃຫຍ່ເທົ່ານັ້ນ, ອື່ນ
ຖືວ່າບໍ່ເໝາະສົມກັບສິ່ງແວດລ້ອມ. ຮູບແບບທີ່ຮອງຮັບ:
sh ຄໍາສັ່ງ Shell ເພື່ອກໍານົດແລະສົ່ງອອກທຸງການລວບລວມທັງຫມົດໃນ
ສະພາບແວດລ້ອມ. ຄ່າທຸງຖືກອ້າງອີງເພື່ອໃຫ້ຜົນຜະລິດແມ່ນກຽມພ້ອມ
ການປະເມີນຜົນໂດຍແກະ.
cmdline
ການໂຕ້ຖຽງທີ່ຈະຜ່ານໄປຫາເສັ້ນຄໍາສັ່ງຂອງໂຄງການກໍ່ສ້າງເພື່ອນໍາໃຊ້ທັງຫມົດ
ທຸງການລວບລວມ (ນັບຕັ້ງແຕ່ dpkg 1.17.0). ຄ່າທຸງແມ່ນອ້າງອີງໃນ shell
syntax
configure
ນີ້ແມ່ນນາມແຝງມໍລະດົກສໍາລັບ cmdline.
ເຮັດໃຫ້ ເຮັດຄໍາສັ່ງເພື່ອກໍານົດແລະສົ່ງອອກທຸງການລວບລວມທັງຫມົດໃນ
ສະພາບແວດລ້ອມ. ຜົນຜະລິດສາມາດຂຽນໃສ່ຊິ້ນສ່ວນ makefile ແລະປະເມີນໄດ້
ການນໍາໃຊ້ ປະກອບດ້ວຍ ທິດທາງ.
--ໄດ້ ທຸງ
ພິມມູນຄ່າຂອງທຸງຢູ່ໃນຜົນຜະລິດມາດຕະຖານ. ອອກດ້ວຍ 0 ຖ້າທຸງແມ່ນຮູ້ຈັກ
ຖ້າບໍ່ດັ່ງນັ້ນອອກດ້ວຍ 1.
--ຕົ້ນກຳເນີດ ທຸງ
ພິມຕົ້ນກຳເນີດຂອງຄ່າທີ່ສົ່ງຄືນໂດຍ --ໄດ້. ອອກດ້ວຍ 0 ຖ້າທຸງ
ເປັນທີ່ຮູ້ຈັກຖ້າບໍ່ດັ່ງນັ້ນການອອກດ້ວຍ 1. ແຫຼ່ງກຳເນີດສາມາດເປັນໜຶ່ງໃນຄ່າຕໍ່ໄປນີ້:
ຜູ້ຂາຍ ທຸງຕົ້ນສະບັບທີ່ກໍານົດໄວ້ໂດຍຜູ້ຂາຍຖືກສົ່ງຄືນ;
ລະບົບ ທຸງຖືກຕັ້ງ / ແກ້ໄຂໂດຍການຕັ້ງຄ່າທົ່ວລະບົບ;
ຜູ້ໃຊ້ ທຸງຖືກຕັ້ງ/ແກ້ໄຂໂດຍການຕັ້ງຄ່າສະເພາະຂອງຜູ້ໃຊ້;
ປະມານ ທຸງຖືກຕັ້ງ/ແກ້ໄຂໂດຍການຕັ້ງຄ່າສະເພາະສະພາບແວດລ້ອມ.
--query-ຄຸນສົມບັດ ພື້ນທີ່
ພິມຄຸນສົມບັດທີ່ເປີດໃຊ້ງານສໍາລັບພື້ນທີ່ທີ່ກໍານົດ (ນັບຕັ້ງແຕ່ dpkg 1.16.2). ເທົ່ານັ້ນ
ພື້ນທີ່ທີ່ໄດ້ຮັບການຍອມຮັບໃນປັດຈຸບັນກ່ຽວກັບ Debian ແລະອະນຸພັນແມ່ນ qa, ແຜ່ພັນໄດ້, ອະນາໄມ
ແລະ ແຂງ, ເບິ່ງ ຄຸນນະສົມບັດ AREAS ພາກສ່ວນສໍາລັບລາຍລະອຽດເພີ່ມເຕີມ. ອອກດ້ວຍ 0 ຖ້າໄດ້
ພື້ນທີ່ເປັນທີ່ຮູ້ຈັກຖ້າບໍ່ດັ່ງນັ້ນທາງອອກດ້ວຍ 1.
ຜົນຜະລິດແມ່ນຢູ່ໃນຮູບແບບ RFC822, ມີພາກສ່ວນຫນຶ່ງຕໍ່ລັກສະນະ. ຍົກຕົວຢ່າງ:
ຄຸນນະສົມບັດ: pie
ເປີດໃຊ້: ບໍ່
ຄຸນນະສົມບັດ: stackprotector
ເປີດໃຊ້ແລ້ວ: ແມ່ນແລ້ວ
- ຊ່ວຍ ສະແດງຂໍ້ຄວາມການນໍາໃຊ້ແລະອອກ.
- ການປ່ຽນແປງ
ສະແດງສະບັບແລະອອກ.
ສະ ໜັບ ສະ ໜູນ ດອກໄມ້
ປ້າຍກຳກັບ ທາງເລືອກສໍາລັບ C compiler. ຄ່າເລີ່ມຕົ້ນທີ່ຕັ້ງໂດຍຜູ້ຂາຍປະກອບມີ -g ແລະ
ລະດັບການເພີ່ມປະສິດທິພາບເລີ່ມຕົ້ນ (-O2 ປົກກະຕິແລ້ວ, ຫຼື -O0 ຖ້າຫາກວ່າ DEB_BUILD_OPTIONS
ຕົວແປສະພາບແວດລ້ອມກໍານົດ ໂນປ).
CPPFLAGS
ທາງເລືອກສໍາລັບ C preprocessor. ຄ່າເລີ່ມຕົ້ນ: ຫວ່າງເປົ່າ.
CXXFLAGS
ທາງເລືອກສໍາລັບ C++ compiler. ຄືກັນກັບ ປ້າຍກຳກັບ.
OBJCFLAGS
ທາງເລືອກສໍາລັບ Objective C compiler. ຄືກັນກັບ ປ້າຍກຳກັບ.
OBJCXXFLAGS
ທາງເລືອກສໍາລັບ Objective C++ compiler. ຄືກັນກັບ CXXFLAGS.
GCJFLAGS
ທາງເລືອກສໍາລັບ GNU Java compiler (gcj). ຊຸດຍ່ອຍຂອງ ປ້າຍກຳກັບ.
ທຸງ ທາງເລືອກສໍາລັບ Fortran 77 compiler. ຊຸດຍ່ອຍຂອງ ປ້າຍກຳກັບ.
FCFLAGS
ທາງເລືອກສໍາລັບ Fortran 9x compiler. ຄືກັນກັບ ທຸງ.
LDFLAGS
ທາງເລືອກທີ່ຖືກສົ່ງໄປຫາ compiler ໃນເວລາທີ່ການເຊື່ອມຕໍ່ການປະຕິບັດຫຼືການແບ່ງປັນວັດຖຸ (ຖ້າຫາກວ່າ
linker ແມ່ນເອີ້ນວ່າໂດຍກົງ, ຫຼັງຈາກນັ້ນ -ວ ແລະ , ຕ້ອງໄດ້ຖອດອອກຈາກທາງເລືອກເຫຼົ່ານີ້).
ຄ່າເລີ່ມຕົ້ນ: ຫວ່າງເປົ່າ.
ທຸງໃຫມ່ອາດຈະຖືກເພີ່ມໃນອະນາຄົດຖ້າຄວາມຕ້ອງການເກີດຂື້ນ (ຕົວຢ່າງເພື່ອສະຫນັບສະຫນູນອື່ນໆ
ພາສາ).
ຄຸນນະສົມບັດ AREAS
ຄຸນນະສົມບັດຂອງແຕ່ລະເຂດສາມາດໄດ້ຮັບການເປີດໃຊ້ງານແລະປິດການທໍາງານໃນ DEB_BUILD_OPTIONS ແລະ
DEB_BUILD_MAINT_OPTIONS ຄ່າພື້ນທີ່ຂອງຕົວແປສະພາບແວດລ້ອມດ້ວຍ '+'ແລະ'-' ຕົວປັບປຸງແກ້ໄຂ.
ຕົວຢ່າງ, ເພື່ອເປີດໃຊ້ງານ ແຂງ ຄຸນນະສົມບັດ "pie" ແລະປິດການທໍາງານຂອງຄຸນສົມບັດ "fortify" ທ່ານ
ສາມາດເຮັດໄດ້ໃນ debian/ກົດລະບຽບ:
ສົ່ງອອກ DEB_BUILD_MAINT_OPTIONS=hardening=+pie,-fortify
ຄຸນນະສົມບັດພິເສດ ທັງຫມົດ (ຖືກຕ້ອງໃນພື້ນທີ່ໃດນຶ່ງ) ສາມາດໃຊ້ເພື່ອເປີດ ຫຼືປິດການໃຊ້ງານໄດ້ທັງໝົດ
ຄຸນນະສົມບັດໃນເວລາດຽວກັນ. ດັ່ງນັ້ນຈຶ່ງປິດການທໍາງານທຸກສິ່ງທຸກຢ່າງຢູ່ໃນ ແຂງ ພື້ນທີ່ແລະການເປີດໃຊ້ງານ
ພຽງແຕ່ "ຮູບແບບ" ແລະ "ເສີມສ້າງ" ສາມາດເຮັດໄດ້ດ້ວຍ:
ສົ່ງອອກ DEB_BUILD_MAINT_OPTIONS=hardening=-ທັງໝົດ,+format,+fortify
qa
ທາງເລືອກທີ່ໃຊ້ເວລາສັງລວມຈໍານວນຫນຶ່ງ (ລາຍລະອຽດຂ້າງລຸ່ມນີ້) ສາມາດຖືກນໍາໃຊ້ເພື່ອຊ່ວຍກວດສອບບັນຫາໃນ
ລະຫັດແຫຼ່ງຫຼືລະບົບການກໍ່ສ້າງ.
bug ການຕັ້ງຄ່ານີ້ (ປິດການໃຊ້ງານໂດຍຄ່າເລີ່ມຕົ້ນ) ເພີ່ມທາງເລືອກການເຕືອນໄພໃດຫນຶ່ງທີ່ເຊື່ອຖືໄດ້ກວດພົບ
ລະຫັດແຫຼ່ງທີ່ມີບັນຫາ. ການເຕືອນໄພແມ່ນເປັນອັນຕະລາຍເຖິງຕາຍ.
canary ການຕັ້ງຄ່ານີ້ (ປິດການໃຊ້ງານໂດຍຄ່າເລີ່ມຕົ້ນ) ເພີ່ມຕົວເລືອກ canary dummy ໃສ່ທຸງກໍ່ສ້າງ, ດັ່ງນັ້ນ
ບັນທຶກການສ້າງສາມາດກວດສອບໄດ້ສໍາລັບວິທີການສ້າງທຸງຂະຫຍາຍພັນແລະອະນຸຍາດໃຫ້
ຊອກຫາການລະເວັ້ນການຕັ້ງຄ່າທຸງກໍ່ສ້າງປົກກະຕິ. ພຽງແຕ່ສະຫນັບສະຫນູນໃນປັດຈຸບັນ
ທຸງແມ່ນ CPPFLAGS, ປ້າຍກຳກັບ, OBJCFLAGS, CXXFLAGS ແລະ OBJCXXFLAGS ດ້ວຍທຸງຕັ້ງເປັນ
-D__DEB_CANARY_ທຸງ_id ແບບສຸ່ມ__, ແລະ LDFLAGS ຕັ້ງຄ່າ -Wl,-z,deb-canary-id ແບບສຸ່ມ.
ອະນາໄມ
ຕົວເລືອກການລວບລວມເວລາຫຼາຍອັນ (ລາຍລະອຽດຂ້າງລຸ່ມນີ້) ສາມາດໃຊ້ເພື່ອຊ່ວຍອະນາໄມຜົນໄດ້ຮັບ
binary ຕ້ານການສໍ້ລາດບັງຫຼວງຂອງຫນ່ວຍຄວາມຈໍາ, ການຮົ່ວໄຫລຂອງຫນ່ວຍຄວາມຈໍາ, ການນໍາໃຊ້ຫຼັງຈາກຟຣີ, threading ເຊື້ອຊາດຂໍ້ມູນແລະ
ແມງໄມ້ພຶດຕິກໍາທີ່ບໍ່ໄດ້ກໍານົດ.
ທີ່ຢູ່
ການຕັ້ງຄ່ານີ້ (ປິດໃຊ້ງານໂດຍຄ່າເລີ່ມຕົ້ນ) ເພີ່ມ -fsanitize=ທີ່ຢູ່ to LDFLAGS ແລະ
-fsanitize=ທີ່ຢູ່ -fno-omit-frame-pointer to ປ້າຍກຳກັບ ແລະ CXXFLAGS.
ກະທູ້ ການຕັ້ງຄ່ານີ້ (ປິດໃຊ້ງານໂດຍຄ່າເລີ່ມຕົ້ນ) ເພີ່ມ -fsanitize=ກະທູ້ to ປ້າຍກຳກັບ, CXXFLAGS ແລະ
LDFLAGS.
ຮົ່ວໄຫລ ການຕັ້ງຄ່ານີ້ (ປິດໃຊ້ງານໂດຍຄ່າເລີ່ມຕົ້ນ) ເພີ່ມ -fsanitize=ຮົ່ວ to LDFLAGS. ມັນໄດ້ຮັບ
ປິດການໃຊ້ງານອັດຕະໂນມັດຖ້າຫາກວ່າບໍ່ວ່າຈະ ທີ່ຢູ່ ຫຼື ກະທູ້ ຄຸນນະສົມບັດໄດ້ຖືກເປີດໃຊ້, ເປັນ
ພວກເຂົາເຈົ້າຫມາຍເຖິງມັນ.
undefined
ການຕັ້ງຄ່ານີ້ (ປິດໃຊ້ງານໂດຍຄ່າເລີ່ມຕົ້ນ) ເພີ່ມ -fsanitize=ບໍ່ໄດ້ກຳນົດ to ປ້າຍກຳກັບ, CXXFLAGS
ແລະ LDFLAGS.
ແຂງ
ທາງເລືອກທີ່ໃຊ້ເວລາສັງລວມຫຼາຍ (ລາຍລະອຽດຂ້າງລຸ່ມນີ້) ສາມາດຖືກນໍາໃຊ້ເພື່ອຊ່ວຍໃຫ້ຜົນໄດ້ຮັບແຂງ
binary ຕ້ານການໂຈມຕີການສໍ້ລາດບັງຫຼວງຂອງຫນ່ວຍຄວາມຈໍາ, ຫຼືສະຫນອງຂໍ້ຄວາມເຕືອນເພີ່ມເຕີມໃນລະຫວ່າງການ
ການລວບລວມ. ຍົກເວັ້ນດັ່ງທີ່ບັນທຶກໄວ້ຂ້າງລຸ່ມນີ້, ສິ່ງເຫຼົ່ານີ້ແມ່ນໄດ້ຮັບການເປີດໃຊ້ງານໂດຍຄ່າເລີ່ມຕົ້ນສໍາລັບສະຖາປັດຕະທີ່
ສະຫນັບສະຫນູນພວກເຂົາ.
ຮູບແບບ ການຕັ້ງຄ່ານີ້ (ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ) ເພີ່ມ -Wformat -Werror=format-security to ປ້າຍກຳກັບ,
CXXFLAGS, OBJCFLAGS ແລະ OBJCXXFLAGS. ນີ້ຈະເຕືອນກ່ຽວກັບສະຕຣິງຮູບແບບທີ່ບໍ່ຖືກຕ້ອງ
ໃຊ້, ແລະຈະລົ້ມເຫລວເມື່ອຟັງຊັນຮູບແບບຖືກນໍາໃຊ້ໃນວິທີທີ່ເປັນຕົວແທນທີ່ເປັນໄປໄດ້
ບັນຫາຄວາມປອດໄພ. ໃນປັດຈຸບັນ, ນີ້ເຕືອນກ່ຽວກັບການໂທຫາ printf ແລະ scanf ຫນ້າທີ່
ບ່ອນທີ່ string ຮູບແບບບໍ່ແມ່ນ string literal ແລະບໍ່ມີ argument ຮູບແບບ,
ຄືໃນ printf(foo); ແທນທີ່ printf("%s", foo); ນີ້ອາດຈະເປັນຂຸມຄວາມປອດໄພຖ້າຫາກວ່າ
ຮູບແບບສະຕຣິງມາຈາກການປ້ອນຂໍ້ມູນທີ່ບໍ່ເຊື່ອຖື ແລະປະກອບດ້ວຍ '%n'.
ເສີມສ້າງ
ການຕັ້ງຄ່ານີ້ (ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ) ເພີ່ມ -D_FORTIFY_SOURCE=2 to CPPFLAGS. ໃນລະຫວ່າງລະຫັດ
ການຜະລິດ compiler ຮູ້ຂໍ້ມູນຈໍານວນຫລາຍກ່ຽວກັບຂະຫນາດ buffer (ບ່ອນໃດ
ເປັນໄປໄດ້), ແລະພະຍາຍາມທົດແທນການໂທຟັງຊັນ buffer ຄວາມຍາວບໍ່ຈໍາກັດທີ່ບໍ່ປອດໄພ
ທີ່ມີຄວາມຍາວຈໍາກັດ. ນີ້ແມ່ນເປັນປະໂຫຍດໂດຍສະເພາະສໍາລັບລະຫັດເກົ່າ, cruffy.
ນອກຈາກນັ້ນ, ຮູບແບບສະຕຣິງໃນໜ່ວຍຄວາມຈຳທີ່ສາມາດຂຽນໄດ້ທີ່ມີ '%n' ຖືກບລັອກໄວ້. ຖ້າ
ຄໍາຮ້ອງສະຫມັກແມ່ນຂຶ້ນກັບສະຕຣິງຮູບແບບດັ່ງກ່າວ, ມັນຈະຕ້ອງໄດ້ຮັບການເຮັດວຽກປະມານ.
ໃຫ້ສັງເກດວ່າເພື່ອໃຫ້ທາງເລືອກນີ້ມີຜົນກະທົບໃດກໍ່ຕາມ, ແຫຼ່ງຕ້ອງຖືກລວບລວມດ້ວຍ
-O1 ຫຼືສູງກວ່າ. ຖ້າສະພາບແວດລ້ອມປ່ຽນແປງ DEB_BUILD_OPTIONS ປະກອບດ້ວຍ ໂນປ, ຫຼັງຈາກນັ້ນ
ເສີມສ້າງ ການສະຫນັບສະຫນູນຈະໄດ້ຮັບການພິການ, ເນື່ອງຈາກການເຕືອນໄພໃຫມ່ອອກໂດຍ glibc 2.16
ແລະຕໍ່ມາ.
stackprotector
ການຕັ້ງຄ່ານີ້ (ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຖ້າ stackprotectorstrong ບໍ່ໄດ້ໃຊ້) ເພີ່ມ
-stack-protector --param=ssp-buffer-size=4 to ປ້າຍກຳກັບ, CXXFLAGS, OBJCFLAGS,
OBJCXXFLAGS, GCJFLAGS, ທຸງ ແລະ FCFLAGS. ນີ້ເພີ່ມການກວດສອບຄວາມປອດໄພຕໍ່ກັບ stack
ຂຽນທັບ. ນີ້ເຮັດໃຫ້ການໂຈມຕີລະຫັດສັກຢາທີ່ມີທ່າແຮງຫຼາຍເຂົ້າໄປໃນການເອົາລູກອອກ
ສະຖານະການ. ໃນກໍລະນີທີ່ດີທີ່ສຸດ, ນີ້ຈະປ່ຽນຄວາມອ່ອນແອຂອງການສີດລະຫັດເຂົ້າໄປໃນການປະຕິເສດ
ຂອງການບໍລິການຫຼືເຂົ້າໄປໃນບັນຫາທີ່ບໍ່ແມ່ນ (ຂຶ້ນກັບຄໍາຮ້ອງສະຫມັກ).
ຄຸນນະສົມບັດນີ້ຮຽກຮ້ອງໃຫ້ມີການເຊື່ອມຕໍ່ກັບ glibc (ຫຼືຜູ້ໃຫ້ບໍລິການອື່ນຂອງ
__stack_chk_fail), ດັ່ງນັ້ນຈໍາເປັນຕ້ອງໄດ້ພິການໃນເວລາທີ່ການກໍ່ສ້າງກັບ -nostdlib or
- freestanding ຫຼືຄ້າຍຄືກັນ.
stackprotectorstrong
ການຕັ້ງຄ່ານີ້ (ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ) ເພີ່ມ -fstack-protector-strong to ປ້າຍກຳກັບ,
CXXFLAGS, OBJCFLAGS, OBJCXXFLAGS, GCJFLAGS, ທຸງ ແລະ FCFLAGS. ອັນນີ້ແມ່ນເຂັ້ມແຂງຂຶ້ນ
ຕົວປ່ຽນແປງຂອງ stackprotector, ແຕ່ບໍ່ມີການລົງໂທດການປະຕິບັດທີ່ສໍາຄັນ.
ການປິດການໃຊ້ງານ stackprotector ຍັງຈະປິດການຕັ້ງຄ່ານີ້.
ຄຸນນະສົມບັດນີ້ມີຄວາມຕ້ອງການດຽວກັນກັບ stackprotector, ແລະນອກຈາກນັ້ນຍັງ
ຕ້ອງການ gcc 4.9 ແລະຕໍ່ມາ.
ເຣໂຣ ການຕັ້ງຄ່ານີ້ (ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ) ເພີ່ມ -Wl,-z,relro to LDFLAGS. ໃນລະຫວ່າງໂຄງການ
ໂຫຼດ, ຫຼາຍພາກສ່ວນຄວາມຊົງຈໍາ ELF ຕ້ອງໄດ້ຮັບການລາຍລັກອັກສອນໂດຍຕົວເຊື່ອມຕໍ່. ທຸງນີ້
loader ເພື່ອເຮັດໃຫ້ພາກສ່ວນເຫຼົ່ານີ້ອ່ານໄດ້ເທົ່ານັ້ນກ່ອນທີ່ຈະຫັນປ່ຽນການຄວບຄຸມໄປ
ໂຄງການ. ໂດຍສະເພາະແມ່ນນີ້ປ້ອງກັນການໂຈມຕີ GOT overwrite. ຖ້າທາງເລືອກນີ້ແມ່ນ
ພິການ, bindnow ຈະກາຍເປັນຄົນພິການເຊັ່ນດຽວກັນ.
bindnow
ການຕັ້ງຄ່ານີ້ (ປິດໃຊ້ງານໂດຍຄ່າເລີ່ມຕົ້ນ) ເພີ່ມ -Wl,-z, ດຽວນີ້ to LDFLAGS. ໃນລະຫວ່າງການໂຫຼດໂຄງການ,
ສັນຍາລັກເຄື່ອນໄຫວທັງຫມົດແມ່ນໄດ້ຮັບການແກ້ໄຂ, ອະນຸຍາດໃຫ້ສໍາລັບ PLT ທັງຫມົດທີ່ຈະໄດ້ຮັບການຫມາຍອ່ານ.
ເທົ່ານັ້ນ (ເນື່ອງມາຈາກ ເຣໂຣ ຂ້າງເທິງ). ທາງເລືອກບໍ່ສາມາດຖືກເປີດໃຊ້ໄດ້ຖ້າ ເຣໂຣ ບໍ່ແມ່ນ
enabled
pie ການຕັ້ງຄ່ານີ້ (ປິດໃຊ້ງານໂດຍຄ່າເລີ່ມຕົ້ນ) ເພີ່ມ -fPIE to ປ້າຍກຳກັບ, CXXFLAGS, OBJCFLAGS,
OBJCXXFLAGS, GCJFLAGS, ທຸງ ແລະ FCFLAGS, ແລະ -fPIE -pie to LDFLAGS. ຕໍາແໜ່ງ
Independent Executable ແມ່ນຈໍາເປັນເພື່ອໃຊ້ປະໂຍດຈາກ Address Space Layout
Randomization, ສະຫນັບສະຫນູນໂດຍບາງສະບັບ kernel. ໃນຂະນະທີ່ ASLR ສາມາດຢູ່ແລ້ວ
ບັງຄັບໃຊ້ສໍາລັບພື້ນທີ່ຂໍ້ມູນໃນ stack ແລະ heap (brk ແລະ mmap), ພື້ນທີ່ລະຫັດຕ້ອງ
ໄດ້ຖືກລວບລວມເປັນຕໍາແຫນ່ງເອກະລາດ. ຫ້ອງສະໝຸດທີ່ແບ່ງປັນແລ້ວເຮັດອັນນີ້ (-fPIC), ດັ່ງນັ້ນ
ພວກເຂົາໄດ້ຮັບ ASLR ໂດຍອັດຕະໂນມັດ, ແຕ່ພາກພື້ນ .text binary ຈໍາເປັນຕ້ອງສ້າງ PIE ເພື່ອໃຫ້ໄດ້ຮັບ
ASLR. ເມື່ອສິ່ງດັ່ງກ່າວເກີດຂຶ້ນ, ການໂຈມຕີ ROP (Return Oriented Programming) ແມ່ນຍາກກວ່າ
ເນື່ອງຈາກວ່າບໍ່ມີສະຖານທີ່ຄົງທີ່ທີ່ຈະ bounce ອອກໃນລະຫວ່າງການເສຍຫາຍຂອງຫນ່ວຍຄວາມຈໍາ
ໂຈມຕີ.
ອັນນີ້ບໍ່ເຂົ້າກັນໄດ້ກັບ -fPIC ສະນັ້ນຕ້ອງລະມັດລະວັງໃນເວລາທີ່ການກໍ່ສ້າງຮ່ວມກັນ
ວັດຖຸ.
ນອກຈາກນັ້ນ, ນັບຕັ້ງແຕ່ PIE ຖືກປະຕິບັດໂດຍຜ່ານທະບຽນທົ່ວໄປ, ບາງສະຖາປັດຕະຍະກໍາ
(ໂດຍສະເພາະ i386) ສາມາດເບິ່ງການສູນເສຍປະສິດທິພາບສູງເຖິງ 15% ໃນສ່ວນຂໍ້ຄວາມຫຼາຍ-
ວຽກງານຄໍາຮ້ອງສະຫມັກຫນັກ; ປະລິມານວຽກສ່ວນໃຫຍ່ເຫັນໜ້ອຍກວ່າ 1%. ສະຖາປັດຕະຍະກໍາກັບ
ການລົງທະບຽນທົ່ວໄປຫຼາຍ (ເຊັ່ນ amd64) ບໍ່ໄດ້ເຫັນວ່າເປັນການລົງໂທດທີ່ສູງທີ່ສຸດ.
ແຜ່ພັນໄດ້
ຕົວເລືອກການລວບລວມເວລາທີ່ມີລາຍລະອຽດຂ້າງລຸ່ມນີ້ສາມາດຖືກນໍາໃຊ້ເພື່ອຊ່ວຍປັບປຸງການສ້າງການສືບພັນ
ຫຼືໃຫ້ຂໍ້ຄວາມເຕືອນເພີ່ມເຕີມໃນລະຫວ່າງການລວບລວມ. ຍົກເວັ້ນດັ່ງທີ່ໄດ້ກ່າວໄວ້ຂ້າງລຸ່ມນີ້, ເຫຼົ່ານີ້
ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນສໍາລັບສະຖາປັດຕະຍະກໍາທີ່ສະຫນັບສະຫນູນພວກມັນ.
ບໍ່ມີເວລາ
ການຕັ້ງຄ່ານີ້ (ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ) ເພີ່ມ -Wdate-time to CPPFLAGS. ນີ້ຈະເຮັດໃຫ້ເກີດ
ການເຕືອນໄພໃນເວລາທີ່ __TIME__, __DATE__ ແລະ __TIMESTAMP__ ມະຫາພາກຖືກນໍາໃຊ້.
ENVIRONMENT
ມີ 2 ຊຸດຂອງຕົວແປສະພາບແວດລ້ອມທີ່ດໍາເນີນການດຽວກັນ, ຊຸດທໍາອິດ
(DEB_ທຸງ_op) ບໍ່ຄວນໃຊ້ພາຍໃນ debian/ກົດລະບຽບ. ມັນຫມາຍເຖິງຜູ້ໃຊ້ທີ່ຕ້ອງການ
ເພື່ອສ້າງຊຸດແຫຼ່ງໃຫມ່ດ້ວຍທຸງການກໍ່ສ້າງທີ່ແຕກຕ່າງກັນ. ຊຸດທີສອງ
(DEB_ທຸງ_MAINT_op) ຄວນຈະຖືກນໍາໃຊ້ພຽງແຕ່ໃນ debian/ກົດລະບຽບ ໂດຍຜູ້ຮັກສາຊຸດເພື່ອປ່ຽນແປງ
ທຸງການກໍ່ສ້າງຜົນໄດ້ຮັບ.
DEB_ທຸງ_SET
DEB_ທຸງ_MAINT_SET
ຕົວແປນີ້ສາມາດຖືກໃຊ້ເພື່ອບັງຄັບໃຫ້ຜົນຕອບແທນຂອງຄ່າທີ່ໃຫ້ ທຸງ.
DEB_ທຸງ_STRIP
DEB_ທຸງ_MAINT_STRIP
ຕົວແປນີ້ສາມາດຖືກນໍາໃຊ້ເພື່ອສະຫນອງຊ່ອງແຍກລາຍການທາງເລືອກທີ່ຈະເປັນ
ຖອດຈາກຊຸດຂອງທຸງສົ່ງຄືນສໍາລັບການໃຫ້ ທຸງ.
DEB_ທຸງ_APPEND
DEB_ທຸງ_MAINT_APPEND
ຕົວແປນີ້ສາມາດຖືກໃຊ້ເພື່ອຕື່ມຕົວເລືອກເສີມໃສ່ກັບຄ່າທີ່ສົ່ງກັບ
ມອບໃຫ້ ທຸງ.
DEB_ທຸງ_PREPEND
DEB_ທຸງ_MAINT_PREPEND
ຕົວແປນີ້ສາມາດຖືກນໍາໃຊ້ເພື່ອ prepend ທາງເລືອກເພີ່ມເຕີມຕໍ່ກັບມູນຄ່າທີ່ສົ່ງຄືນ
ສໍາລັບການໃຫ້ ທຸງ.
DEB_BUILD_OPTIONS
DEB_BUILD_MAINT_OPTIONS
ຕົວແປເຫຼົ່ານີ້ສາມາດໃຊ້ໂດຍຜູ້ໃຊ້ຫຼືຜູ້ຮັກສາເພື່ອປິດການໃຊ້ງານ / ເປີດໃຊ້ພື້ນທີ່ຕ່າງໆ
ລັກສະນະທີ່ມີຜົນກະທົບຕໍ່ການສ້າງທຸງ. ໄດ້ DEB_BUILD_MAINT_OPTIONS ການລົບລ້າງຕົວແປ
ການຕັ້ງຄ່າໃດໆໃນ DEB_BUILD_OPTIONS ພື້ນທີ່ຄຸນນະສົມບັດ. ເບິ່ງ ຄຸນນະສົມບັດ AREAS ສ່ວນ
ສໍາລັບລາຍລະອຽດ.
ໃຊ້ dpkg-buildflags ອອນໄລນ໌ໂດຍໃຊ້ບໍລິການ onworks.net