ELF2 64-bits: Use /dev/shm (O_TMPFILE) if memfd_create fails

Such as Ubuntu-20.04, Linux kernel 5.15.0-67, #74-20.04.1, 2023-02-22
	modified:   ../misc/testsuite/upx_testsuite_1-expected_sha256sums.sh
	modified:   stub/Makefile
	modified:   stub/src/amd64-linux.elf-entry.S
	modified:   stub/src/amd64-linux.elf-fold.S
	modified:   stub/src/amd64-linux.elf-main2.c
	modified:   stub/src/arm64-linux.elf-fold.S
	modified:   stub/src/upxfd_android.c
           plus generated *.h *.map *.dump
This commit is contained in:
John Reiser
2024-06-26 13:38:46 -07:00
parent 5f6bdb0a8f
commit e561da33bd
13 changed files with 2113 additions and 2038 deletions
+21 -21
View File
@@ -46,12 +46,12 @@ b8c35fa2956da17ca505956e9f5017bb5f3a746322647e24ccb8ff28059cafa4 *powerpc-linux.
a0950546dc17fca9437219431d8ddb0249ce5b08e899e0c799a87ac982adee70 *powerpc64le-linux.elf/upx-3.95 a0950546dc17fca9437219431d8ddb0249ce5b08e899e0c799a87ac982adee70 *powerpc64le-linux.elf/upx-3.95
" "
expected_sha256sums__t110_compress_ucl_nrv2b_3_no_filter="\ expected_sha256sums__t110_compress_ucl_nrv2b_3_no_filter="\
4b12bf795c5a05986e10a3e3e64a78c35f2cdb7dea8236b32b464c201ee0f9d8 *amd64-linux.elf/upx-3.91 f70f80d375d105c4d90549f074c74799e659e8f3754067e3e26c4def2800bbfb *amd64-linux.elf/upx-3.91
d0f25e563332a0cf31b921c75f3f2d6857f9c17c89c0f342fa7d99eaad5bd818 *amd64-linux.elf/upx-3.95 b2be85af5a5bf4dd81637d18bbffb920e98054ec712ff87d4bda289ae4193b33 *amd64-linux.elf/upx-3.95
1bd70a3cd3b34e635a3c947cacd46c4d66bf07e0fd350cc6d1f3cf60483f75b9 *amd64-win64.pe/upx-3.95.exe 1bd70a3cd3b34e635a3c947cacd46c4d66bf07e0fd350cc6d1f3cf60483f75b9 *amd64-win64.pe/upx-3.95.exe
c9d8d916100e1dd972a2a9a060e4213505b14c62e9705ab6c8b544a8f18e083d *arm-linux.elf/upx-3.95 c9d8d916100e1dd972a2a9a060e4213505b14c62e9705ab6c8b544a8f18e083d *arm-linux.elf/upx-3.95
94422a91473a467dfb534afa3f20247bc38691aeb386a42fb3e0fd18d3d0ae08 *arm-wince.pe/upx-3.91.exe 94422a91473a467dfb534afa3f20247bc38691aeb386a42fb3e0fd18d3d0ae08 *arm-wince.pe/upx-3.91.exe
840e9e0b745092bc667d85539be92ab7ff4b58ce24bc6469cd3c9c250ee60257 *arm64-linux.elf/upx-3.95 402fcc9533e5eb07a16eb4e5bd9df67816b0298ff38fff589a5458df05159eb3 *arm64-linux.elf/upx-3.95
0a9d0d95822a7d645d67b61ebd5b86d8be07b8a36e0f29dbc9b55a8666ed67af *armeb-linux.elf/upx-3.91 0a9d0d95822a7d645d67b61ebd5b86d8be07b8a36e0f29dbc9b55a8666ed67af *armeb-linux.elf/upx-3.91
6e4ff31a80809fc5058ae714ab10ad7810c310bd7d116fad8b198009b9872312 *armeb-linux.elf/upx-3.95 6e4ff31a80809fc5058ae714ab10ad7810c310bd7d116fad8b198009b9872312 *armeb-linux.elf/upx-3.95
e17a126cebc32977991a292b7434d1435a7c95862ccece0e4acbf6e810bd3443 *i386-dos32.djgpp2.coff/upx-3.91.exe e17a126cebc32977991a292b7434d1435a7c95862ccece0e4acbf6e810bd3443 *i386-dos32.djgpp2.coff/upx-3.91.exe
@@ -69,12 +69,12 @@ fcbd8b4709ee324eb772e5de45a85bac5b8e560460fb1d50d0958f2ce568be97 *mipsel-linux.e
d74c348bad0c1f3e776cf78282141492a58746c601f3f4288c9e675b7b425f82 *powerpc64le-linux.elf/upx-3.95 d74c348bad0c1f3e776cf78282141492a58746c601f3f4288c9e675b7b425f82 *powerpc64le-linux.elf/upx-3.95
" "
expected_sha256sums__t120_compress_ucl_nrv2d_3_no_filter="\ expected_sha256sums__t120_compress_ucl_nrv2d_3_no_filter="\
5a2a9af4e1020724207ce44f78c5b4a752926374d736ed9d0042937dcb4f5cb4 *amd64-linux.elf/upx-3.91 84328c2e1cf60ede2d14f4146f6894a5f88bfd027ffccdcad411a05f4b11c6c4 *amd64-linux.elf/upx-3.91
157964226febb66aad14a9446ee7501e68108b8d319de0c67a2765099896a950 *amd64-linux.elf/upx-3.95 628c5714fce61ba99fb78619ad94317abe42508ccf1b6b89e3653ed1603576d4 *amd64-linux.elf/upx-3.95
0314c6974f29d180e46e41a1004d46a3993fe96f03de7f78d45ad89ad3b2177e *amd64-win64.pe/upx-3.95.exe 0314c6974f29d180e46e41a1004d46a3993fe96f03de7f78d45ad89ad3b2177e *amd64-win64.pe/upx-3.95.exe
0f781a70828dc3b939988b96e70c0734cef3f4a7693624e61f7a678b0c8667a6 *arm-linux.elf/upx-3.95 0f781a70828dc3b939988b96e70c0734cef3f4a7693624e61f7a678b0c8667a6 *arm-linux.elf/upx-3.95
d7839b7dee866794e4ca3df32e2b1084b35aa22dee5f060fa14b5ca09c612ba3 *arm-wince.pe/upx-3.91.exe d7839b7dee866794e4ca3df32e2b1084b35aa22dee5f060fa14b5ca09c612ba3 *arm-wince.pe/upx-3.91.exe
40afddfeaface0cb138b82771087af85bf099d35991e8f69653532ff972ab2d0 *arm64-linux.elf/upx-3.95 db8aa50bf2b27ae3b4d9179c308d1fc174e788af61ddc5a46ede11af04ec69bb *arm64-linux.elf/upx-3.95
7ebffb7cd7a0f95e82738cb58728334fe51b5174f54f807303d281e4594037cf *armeb-linux.elf/upx-3.91 7ebffb7cd7a0f95e82738cb58728334fe51b5174f54f807303d281e4594037cf *armeb-linux.elf/upx-3.91
4a9d498ec0df4923ebb475f634c25f9b47eea115998adfd9c46b7dc4a561cf47 *armeb-linux.elf/upx-3.95 4a9d498ec0df4923ebb475f634c25f9b47eea115998adfd9c46b7dc4a561cf47 *armeb-linux.elf/upx-3.95
4a434c3a14686786369c8bede8736d15e307ed7dd8c40cccb8f22003b05db968 *i386-dos32.djgpp2.coff/upx-3.91.exe 4a434c3a14686786369c8bede8736d15e307ed7dd8c40cccb8f22003b05db968 *i386-dos32.djgpp2.coff/upx-3.91.exe
@@ -92,12 +92,12 @@ d05786b4b729f13a9b325322c2ea41ca7db6f60fee9f82c58874a25ee7eca086 *powerpc-linux.
c4888e9ed7c587163b53246c2c0cb2c6118122feacfc5248f371d8f6c8783abd *powerpc64le-linux.elf/upx-3.95 c4888e9ed7c587163b53246c2c0cb2c6118122feacfc5248f371d8f6c8783abd *powerpc64le-linux.elf/upx-3.95
" "
expected_sha256sums__t130_compress_ucl_nrv2e_3_no_filter="\ expected_sha256sums__t130_compress_ucl_nrv2e_3_no_filter="\
9a49d54b4c98579e466a0cd3f41a034de67f16224b172969ba2dd4b00cde48d8 *amd64-linux.elf/upx-3.91 24f1c2077016095f0cdebcef1546777e39fd1a76b39ce0ef9be2f11bb5e4a49f *amd64-linux.elf/upx-3.91
c3cb3cac214da748f585cc7378019202d605d92460d8fd00dc3187f1696db502 *amd64-linux.elf/upx-3.95 2cb7327ce348741a8c6bd1b3d93005e042aee5c6f2f9ac16852c50dbbebc9f90 *amd64-linux.elf/upx-3.95
97bb5953405f3413d9ff9bdc272caf2858697168b3e85dab54213da356b5ea0f *amd64-win64.pe/upx-3.95.exe 97bb5953405f3413d9ff9bdc272caf2858697168b3e85dab54213da356b5ea0f *amd64-win64.pe/upx-3.95.exe
0bf33b6b3f246093a7e15c4a51b0a15f40c7ec9c16fcd38613b8b66004a3b3cb *arm-linux.elf/upx-3.95 0bf33b6b3f246093a7e15c4a51b0a15f40c7ec9c16fcd38613b8b66004a3b3cb *arm-linux.elf/upx-3.95
8c73f5acfc70e3c518be09978af87b9bec4906240cb457a166da0eba05bea4db *arm-wince.pe/upx-3.91.exe 8c73f5acfc70e3c518be09978af87b9bec4906240cb457a166da0eba05bea4db *arm-wince.pe/upx-3.91.exe
bf2fc6aa005cb75e64c1c1c3afe304204ccf743f4b4ab2be45d33312f0c3ffa6 *arm64-linux.elf/upx-3.95 99af85dd3d7fbf8a2b46f4c6d1dd1953dd9edf5816f9f2007361fd915a2321a2 *arm64-linux.elf/upx-3.95
4be1831f03092f1c594115d95663f3d180c0066e10b9d8389f25a350a3976529 *armeb-linux.elf/upx-3.91 4be1831f03092f1c594115d95663f3d180c0066e10b9d8389f25a350a3976529 *armeb-linux.elf/upx-3.91
c3ec4a5148e25f74f6c8dca92b608f65dc5539f9c5a0f839f801612b13505bd1 *armeb-linux.elf/upx-3.95 c3ec4a5148e25f74f6c8dca92b608f65dc5539f9c5a0f839f801612b13505bd1 *armeb-linux.elf/upx-3.95
d454dd376db342e7650a93bd4859546711c94f5da55336e5b969dbea996465d9 *i386-dos32.djgpp2.coff/upx-3.91.exe d454dd376db342e7650a93bd4859546711c94f5da55336e5b969dbea996465d9 *i386-dos32.djgpp2.coff/upx-3.91.exe
@@ -115,12 +115,12 @@ fa3be8f93006a88c7ad3d9fd13f600c4f69745859eb76f7eab317a5b87d256ea *mipsel-linux.e
cf8c7d3616c00e6709eea0ae335cc3959a8debdac3623076541f51724649a6cc *powerpc64le-linux.elf/upx-3.95 cf8c7d3616c00e6709eea0ae335cc3959a8debdac3623076541f51724649a6cc *powerpc64le-linux.elf/upx-3.95
" "
expected_sha256sums__t140_compress_lzma_2_no_filter="\ expected_sha256sums__t140_compress_lzma_2_no_filter="\
282165e9db23bcf497cefb24ff563320dc482ae03605e303811efca0dbcb42a7 *amd64-linux.elf/upx-3.91 5e382e35684d069e54b1c3e06065049f604c6c63a326008fc5a8b07dfe580a09 *amd64-linux.elf/upx-3.91
abdf5ac2a7217c47670258c464c75306cf98f4523fb255444f70db3455194add *amd64-linux.elf/upx-3.95 ce7a33574f54c79a6c774d390f51cefe3fa5628e7b50794e9235dcf5af3ab7de *amd64-linux.elf/upx-3.95
b8815f95e92d6853a04a86069e9054115be2d9aa657fa2c8912d0f37e56c894f *amd64-win64.pe/upx-3.95.exe b8815f95e92d6853a04a86069e9054115be2d9aa657fa2c8912d0f37e56c894f *amd64-win64.pe/upx-3.95.exe
7a832eb6c3c33a04053786334c9e1953796ba2debacc754b5a18632ec987aa40 *arm-linux.elf/upx-3.95 7a832eb6c3c33a04053786334c9e1953796ba2debacc754b5a18632ec987aa40 *arm-linux.elf/upx-3.95
018242f330e19dd7ca2fb78687c0070ad88f1aa2e113be865c30ad3ff94a4ada *arm-wince.pe/upx-3.91.exe 018242f330e19dd7ca2fb78687c0070ad88f1aa2e113be865c30ad3ff94a4ada *arm-wince.pe/upx-3.91.exe
8d680bccb15aaa544bee556ee2878b97badced3e7938851862c31df81ccbab65 *arm64-linux.elf/upx-3.95 5b98de43bde4295c6231417b88b356c3e97cf4d34908fee8037ca20c0943b37d *arm64-linux.elf/upx-3.95
0a64b334793d1d6056241d0072afe8aa34d92ca5680192d05e1df90ca2f3c893 *armeb-linux.elf/upx-3.91 0a64b334793d1d6056241d0072afe8aa34d92ca5680192d05e1df90ca2f3c893 *armeb-linux.elf/upx-3.91
895a9facf830fbcf2953adc0d7cf364fc5ab716f03940fc6165b49343c5253de *armeb-linux.elf/upx-3.95 895a9facf830fbcf2953adc0d7cf364fc5ab716f03940fc6165b49343c5253de *armeb-linux.elf/upx-3.95
4e16bdab8b74ea5c7de4f255eec035189c24ac6374afef883c17696642c4fe16 *i386-dos32.djgpp2.coff/upx-3.91.exe 4e16bdab8b74ea5c7de4f255eec035189c24ac6374afef883c17696642c4fe16 *i386-dos32.djgpp2.coff/upx-3.91.exe
@@ -138,12 +138,12 @@ a214c035d403c1dc7b5d80d6cfd8e00e2278f8600332875f2e53e1c61648fdc2 *powerpc-linux.
e614e62b002d3f8e900099d1683d17a932e8879c53de6b9a9d4a064f551afa8d *powerpc64le-linux.elf/upx-3.95 e614e62b002d3f8e900099d1683d17a932e8879c53de6b9a9d4a064f551afa8d *powerpc64le-linux.elf/upx-3.95
" "
expected_sha256sums__t150_compress_ucl_2_all_filters="\ expected_sha256sums__t150_compress_ucl_2_all_filters="\
9e00165e1608106a0d576a24e53d24bea149c132da319d1e4e42dc54b2ce7f08 *amd64-linux.elf/upx-3.91 352c29b1409142882f937699929b7b5dc06bba8838f5bf3ca1395bc5ae182f48 *amd64-linux.elf/upx-3.91
fc50dad7daeaed52fbbd319a46754ddbd08e7ff6bed199f16361d452ce57b496 *amd64-linux.elf/upx-3.95 b120b86e3fcbcd3aae7f09a50018e811d9020f98f9726bff69bc74b03ea89d07 *amd64-linux.elf/upx-3.95
434732efb16b89114162a1787a28c128e2c11edb9835411f2b707cac5cd475ae *amd64-win64.pe/upx-3.95.exe 434732efb16b89114162a1787a28c128e2c11edb9835411f2b707cac5cd475ae *amd64-win64.pe/upx-3.95.exe
acbb1628a4631ec5ded40ec286c55544839f57a671ef925c89f81a7fff937954 *arm-linux.elf/upx-3.95 acbb1628a4631ec5ded40ec286c55544839f57a671ef925c89f81a7fff937954 *arm-linux.elf/upx-3.95
93e2ead9e54732a1731896681d415e3ce60b7420ad7f3c57822ad7dbd061cdd3 *arm-wince.pe/upx-3.91.exe 93e2ead9e54732a1731896681d415e3ce60b7420ad7f3c57822ad7dbd061cdd3 *arm-wince.pe/upx-3.91.exe
eab327d6f35c9c70d7de4da8ee06aee30624b88f534c49cc791ce2a72de460ce *arm64-linux.elf/upx-3.95 dce835023a600f7a6760c38dc536d1f43f0df6f97aac9945d99cc8c29bc97e22 *arm64-linux.elf/upx-3.95
9d6b8ef721a9af947f8439c5e6805da9ecadf8e5e41f1e5ef54c40f3c8395db2 *armeb-linux.elf/upx-3.91 9d6b8ef721a9af947f8439c5e6805da9ecadf8e5e41f1e5ef54c40f3c8395db2 *armeb-linux.elf/upx-3.91
591f023a8c6506cf8113fcb8a8672d0044890d60c6b9372a7eeeb40c9f5af464 *armeb-linux.elf/upx-3.95 591f023a8c6506cf8113fcb8a8672d0044890d60c6b9372a7eeeb40c9f5af464 *armeb-linux.elf/upx-3.95
2957b481e67689a5ad43dcfdfde207b9eb16142c161f3e43fd0eeff5917fefbd *i386-dos32.djgpp2.coff/upx-3.91.exe 2957b481e67689a5ad43dcfdfde207b9eb16142c161f3e43fd0eeff5917fefbd *i386-dos32.djgpp2.coff/upx-3.91.exe
@@ -161,12 +161,12 @@ e3825daa7fb8d509590c1db347a8403dbd899da453fb43850ebf1d31abbe0cba *powerpc-linux.
3b246002f2dff8e44cf3c2cd2c64701514a1354c27b616c9a704f542df30e04f *powerpc64le-linux.elf/upx-3.95 3b246002f2dff8e44cf3c2cd2c64701514a1354c27b616c9a704f542df30e04f *powerpc64le-linux.elf/upx-3.95
" "
expected_sha256sums__t160_compress_all_methods_1_no_filter="\ expected_sha256sums__t160_compress_all_methods_1_no_filter="\
4d6e7ba9e9e90b33120e313f2670f797d035d2534225b9a4706744fbf5bb3cf5 *amd64-linux.elf/upx-3.91 095796a3c7949b8f7776a87983fe74f70e61dd47254bd3f1834234b11ae4f6bf *amd64-linux.elf/upx-3.91
520254ad0392618ce75641c9606c27d63427986e37a2fbb4e355db2d62afb785 *amd64-linux.elf/upx-3.95 fb0f758cca710724004f3e5fcc33bbf3403e54ee4c9470c665724acbb6b1b3cc *amd64-linux.elf/upx-3.95
f38ff7edc916c1a3e82020035667de858c89d52c98d960dad0e21b4da444ed6c *amd64-win64.pe/upx-3.95.exe f38ff7edc916c1a3e82020035667de858c89d52c98d960dad0e21b4da444ed6c *amd64-win64.pe/upx-3.95.exe
2481a933d3f1bcaed047e9cbc81ae227351e86e7c6c761c4756faea0c525aeb6 *arm-linux.elf/upx-3.95 2481a933d3f1bcaed047e9cbc81ae227351e86e7c6c761c4756faea0c525aeb6 *arm-linux.elf/upx-3.95
bb475839ec547696aaccf4da202b99be927c872e5de298a5eb1f0be0edc06d1d *arm-wince.pe/upx-3.91.exe bb475839ec547696aaccf4da202b99be927c872e5de298a5eb1f0be0edc06d1d *arm-wince.pe/upx-3.91.exe
0c2264c309866b25772210f179499352b335db309ea4e3cffa0363f0b815f0ca *arm64-linux.elf/upx-3.95 d7495b7dc13ba9cb7893bd585009b1c89174068de77c01e356ac9069dd8d3a11 *arm64-linux.elf/upx-3.95
d33a702da5d0c46e744056c24e8323360223ed8e1be07660eecc28ade7b5fc75 *armeb-linux.elf/upx-3.91 d33a702da5d0c46e744056c24e8323360223ed8e1be07660eecc28ade7b5fc75 *armeb-linux.elf/upx-3.91
57790e4d030d32d19ae6ba2a485a5bc6f7244c7e65d3ec4c8b0afe395927dd83 *armeb-linux.elf/upx-3.95 57790e4d030d32d19ae6ba2a485a5bc6f7244c7e65d3ec4c8b0afe395927dd83 *armeb-linux.elf/upx-3.95
8673a20ba4b83e25daab30431ed215dcb35f595fa0cabf67ff57368a07ba4c14 *i386-dos32.djgpp2.coff/upx-3.91.exe 8673a20ba4b83e25daab30431ed215dcb35f595fa0cabf67ff57368a07ba4c14 *i386-dos32.djgpp2.coff/upx-3.91.exe
@@ -184,12 +184,12 @@ c37806b0d68697276cdd208ab37c92e01055bfbab73c6bbdf054c95fe9cef3b9 *powerpc-linux.
bdd174f8e00e1364fba1f821b56e0083fb9993d2bab9e3a93fced8f66ccc84c7 *powerpc64le-linux.elf/upx-3.95 bdd174f8e00e1364fba1f821b56e0083fb9993d2bab9e3a93fced8f66ccc84c7 *powerpc64le-linux.elf/upx-3.95
" "
expected_sha256sums__t170_compress_all_methods_no_lzma_5_no_filter="\ expected_sha256sums__t170_compress_all_methods_no_lzma_5_no_filter="\
4b7c186404b4d029454e6041551e0e8c75a14281c4f1e9aa5292e525cd2752a6 *amd64-linux.elf/upx-3.91 9c0cbd5abc56d506be45a411613883079adbf3e5ff7f5652fd6cc2808bc4212a *amd64-linux.elf/upx-3.91
9766ab5bb49b7f6dbf9e7dece1f95294b055a94024c25f6c377c9614f58cfedd *amd64-linux.elf/upx-3.95 3aa2b0388df377ca3f450332f7c223461e2884f66228e99e1373f4a35f1be4f8 *amd64-linux.elf/upx-3.95
5fccb0f5044baaa74d176efb25eefa3b5810dc737ed0f9d38084d275f7ebe7b8 *amd64-win64.pe/upx-3.95.exe 5fccb0f5044baaa74d176efb25eefa3b5810dc737ed0f9d38084d275f7ebe7b8 *amd64-win64.pe/upx-3.95.exe
90e56eefcce87542dbbc65e54c83c7e921a747877cbe489089c6043165b4f334 *arm-linux.elf/upx-3.95 90e56eefcce87542dbbc65e54c83c7e921a747877cbe489089c6043165b4f334 *arm-linux.elf/upx-3.95
56be0b4046accdfadbe534ecb6e6452b9e3a18bb9eac39da0ee8893c31d24416 *arm-wince.pe/upx-3.91.exe 56be0b4046accdfadbe534ecb6e6452b9e3a18bb9eac39da0ee8893c31d24416 *arm-wince.pe/upx-3.91.exe
fcb30463df67e4e948cf250625011a4cc5b64c7db7e11e5dbfcd63bdb475e332 *arm64-linux.elf/upx-3.95 77dde1deababe02b6504a54bb90b083e20485816bbe65fba98df8890142eea64 *arm64-linux.elf/upx-3.95
0925e9f13460111685bcf3e695a0e191a083f43149cb0a2e6f93ca68f414614b *armeb-linux.elf/upx-3.91 0925e9f13460111685bcf3e695a0e191a083f43149cb0a2e6f93ca68f414614b *armeb-linux.elf/upx-3.91
03e9bb54264382f17dc15e451b9aff634e41d0b3e14585350479bf143b612c09 *armeb-linux.elf/upx-3.95 03e9bb54264382f17dc15e451b9aff634e41d0b3e14585350479bf143b612c09 *armeb-linux.elf/upx-3.95
6f9fbac216cd42aa370cb90965e74669daf33fd403bf0a250aaec06dd3439009 *i386-dos32.djgpp2.coff/upx-3.91.exe 6f9fbac216cd42aa370cb90965e74669daf33fd403bf0a250aaec06dd3439009 *i386-dos32.djgpp2.coff/upx-3.91.exe
+2 -2
View File
@@ -757,8 +757,8 @@ tmp/arm64-expand.o: $(srcdir)/src/$$T.S
$(call tc,gcc) -c $< -o $@ $(call tc,gcc) -c $< -o $@
arm64-linux-objdump-2.25 -Dr $(tc_objdump_disasm_options) tmp/$T.o | $(RTRIM) > tmp/$T.o.disasm arm64-linux-objdump-2.25 -Dr $(tc_objdump_disasm_options) tmp/$T.o | $(RTRIM) > tmp/$T.o.disasm
tmp/arm64-linux.elf-main2.o : $(srcdir)/src/$$T.c tmp/arm64-linux.elf-main2.o : $(srcdir)/src/$$T.c $(srcdir)/src/amd64-linux.elf-main2.c
$(call tc,gcc) -c -Os $< -o $@ $(call tc,gcc) -c -Os $(srcdir)/src/arm64-linux.elf-main2.c -o $@
$(call tc,f-objstrip,$@) $(call tc,f-objstrip,$@)
tmp/arm64-linux.elf-so_main.o : $(srcdir)/src/$$T.c tmp/arm64-linux.elf-so_main.o : $(srcdir)/src/$$T.c
+72 -69
View File
@@ -1,5 +1,5 @@
/* amd64-linux.elf-entry.h /* amd64-linux.elf-entry.h
created from amd64-linux.elf-entry.bin, 1109 (0x455) bytes created from amd64-linux.elf-entry.bin, 1161 (0x489) bytes
This file is part of the UPX executable compressor. This file is part of the UPX executable compressor.
@@ -32,79 +32,82 @@
/* clang-format off */ /* clang-format off */
#define STUB_AMD64_LINUX_ELF_ENTRY_SIZE 1109 #define STUB_AMD64_LINUX_ELF_ENTRY_SIZE 1161
#define STUB_AMD64_LINUX_ELF_ENTRY_ADLER32 0x1d1a3b3a #define STUB_AMD64_LINUX_ELF_ENTRY_ADLER32 0xd1f34e96
#define STUB_AMD64_LINUX_ELF_ENTRY_CRC32 0x9b761203 #define STUB_AMD64_LINUX_ELF_ENTRY_CRC32 0xa3acf450
unsigned char stub_amd64_linux_elf_entry[1109] = { unsigned char stub_amd64_linux_elf_entry[1161] = {
/* 0x0000 */ 127, 69, 76, 70, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0000 */ 127, 69, 76, 70, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0010 */ 1, 0, 62, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0010 */ 1, 0, 62, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0020 */ 0, 0, 0, 0, 0, 0, 0, 0,240, 1, 0, 0, 0, 0, 0, 0, /* 0x0020 */ 0, 0, 0, 0, 0, 0, 0, 0, 40, 2, 0, 0, 0, 0, 0, 0,
/* 0x0030 */ 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, /* 0x0030 */ 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0,
/* 0x0040 */ 89, 84, 95, 81,232, 54, 1, 0, 0,232, 49, 1, 0, 0, 72,139, /* 0x0040 */ 89, 84, 95, 81,232,107, 1, 0, 0,232,102, 1, 0, 0, 72,139,
/* 0x0050 */ 7, 72,139, 79, 8, 72,131,199, 16, 72,131,248, 6,116, 12, 72, /* 0x0050 */ 7, 72,139, 79, 8, 72,131,199, 16, 72,131,248, 6,116, 12, 72,
/* 0x0060 */ 199,193, 0, 16, 0, 0, 72,133,192,117,227, 72,247,217, 81, 82, /* 0x0060 */ 199,193, 0, 16, 0, 0, 72,133,192,117,227, 72,247,217, 81, 82,
/* 0x0070 */ 104,117,112,120, 0, 84, 95,190, 16, 0, 0, 0,184, 63, 1, 0, /* 0x0070 */ 104,117,112,120, 0, 84, 95,190, 16, 0, 0, 0,184, 63, 1, 0,
/* 0x0080 */ 0,232, 6, 1, 0, 0, 73,137,196, 89, 72,141, 61,171,255,255, /* 0x0080 */ 0, 15, 5,133,192,121, 45,133,246,116, 4, 49,246,235,237,232,
/* 0x0090 */ 255,139, 15, 72, 41,207, 72,141, 53, 0, 0, 0, 0,173,147, 65, /* 0x0090 */ 17, 0, 0, 0,192, 1, 0, 0, 2, 0, 65, 0, 47,100,101,118,
/* 0x00a0 */ 137,221,173,146,131,194, 16, 82,106,255, 87, 72, 41,217, 81, 72, /* 0x00a0 */ 47,115,104,109, 0, 94,173,146,173, 86,150, 95,106, 2, 88,232,
/* 0x00b0 */ 1,251, 83, 84, 93, 72, 41,212, 72,131,228,192, 84, 95,173, 80, /* 0x00b0 */ 13, 1, 0, 0, 73,137,196, 89, 72,141, 61,125,255,255,255,139,
/* 0x00c0 */ 173,102,131,248, 2,116, 1,244, 88, 72, 1,240, 80, 85, 49,219, /* 0x00c0 */ 15, 72, 41,207, 72,141, 53, 0, 0, 0, 0,173,147, 65,137,221,
/* 0x00d0 */ 49,201, 72,141, 21,200, 0, 0, 0,106,255, 93,252,168,164,255, /* 0x00d0 */ 173,146,131,194, 16, 82,106,255, 87, 72, 41,217, 81, 72, 1,251,
/* 0x00e0 */ 210,114,251,141, 65, 1,255,210, 17,192,255,210,115,248,131,232, /* 0x00e0 */ 83, 84, 93, 72, 41,212, 72,131,228,192, 84, 95,173, 80,173,102,
/* 0x00f0 */ 3,114, 12,193,224, 8,172,131,240,255,116, 47, 72, 99,232,141, /* 0x00f0 */ 131,248, 2,116, 1,244, 88, 72, 1,240, 80, 85, 49,219, 49,201,
/* 0x0100 */ 65, 1,255,210, 17,201,255,210, 17,201,117, 13,137,193,131,192, /* 0x0100 */ 72,141, 21,207, 0, 0, 0,106,255, 93,252,168,164,255,210,114,
/* 0x0110 */ 2,255,210, 17,201,255,210,115,248,129,253, 0,243,255,255, 17, /* 0x0110 */ 251,141, 65, 1,255,210, 17,192,255,210,115,248,131,232, 3,114,
/* 0x0120 */ 193, 86, 72,141, 52, 47,243,164, 94,235,180, 93, 89, 72, 57,206, /* 0x0120 */ 12,193,224, 8,172,131,240,255,116, 47, 72, 99,232,141, 65, 1,
/* 0x0130 */ 116, 1,244, 72,139, 69, 48, 72,137, 4, 36, 72,139, 85, 32, 72, /* 0x0130 */ 255,210, 17,201,255,210, 17,201,117, 13,137,193,131,192, 2,255,
/* 0x0140 */ 131,234, 16, 84, 94, 76,137,231,106, 1, 88,232, 60, 0, 0, 0, /* 0x0140 */ 210, 17,201,255,210,115,248,129,253, 0,243,255,255, 17,193, 86,
/* 0x0150 */ 85, 92, 69, 41,201, 77,137,224,106, 1, 65, 90, 82, 94,106, 7, /* 0x0150 */ 72,141, 52, 47,243,164, 94,235,180, 93, 89, 72, 57,206,116, 1,
/* 0x0160 */ 90, 41,255,106, 9, 88,232, 33, 0, 0, 0, 80, 72,137, 69, 24, /* 0x0160 */ 244, 72,139, 69, 48, 72,137, 4, 36, 72,139, 85, 32, 72,131,234,
/* 0x0170 */ 65, 80, 95,106, 3, 88, 15, 5, 88, 72,131,192, 8,255,224, 72, /* 0x0170 */ 16, 84, 94, 76,137,231, 82,106, 1, 88,232, 66, 0, 0, 0, 72,
/* 0x0180 */ 139, 7, 72,131,199, 8, 72,133,192,117,244,195, 80, 15, 5, 89, /* 0x0180 */ 1,198, 41,194,117,241, 94, 85, 92, 77, 49,201, 77,137,224,106,
/* 0x0190 */ 72, 61, 0,240,255,255,114, 1,244,195, 72,139, 60, 36,102,175, /* 0x0190 */ 1, 65, 90,106, 7, 90, 41,255,106, 9, 88,232, 33, 0, 0, 0,
/* 0x01a0 */ 195, 1,219,116, 2,243,195,139, 30, 72,131,238,252, 17,219,243, /* 0x01a0 */ 80, 72,137, 69, 24, 65, 80, 95,106, 3, 88, 15, 5, 88, 72,131,
/* 0x01b0 */ 195, 0, 0, 0, 0, 0, 0, 0,102,105,108,101, 32,102,111,114, /* 0x01b0 */ 192, 8,255,224, 72,139, 7, 72,131,199, 8, 72,133,192,117,244,
/* 0x01c0 */ 109, 97,116, 32,101,108,102, 54, 52, 45,120, 56, 54, 45, 54, 52, /* 0x01c0 */ 195, 80, 15, 5, 89, 72, 61, 0,240,255,255,114, 1,244,195, 72,
/* 0x01d0 */ 10, 10, 83,101, 99,116,105,111,110,115, 58, 10, 73,100,120, 32, /* 0x01d0 */ 139, 60, 36,102,175,195, 1,219,116, 2,243,195,139, 30, 72,131,
/* 0x01e0 */ 78, 97,109,101, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 83,105, /* 0x01e0 */ 238,252, 17,219,243,195, 0, 0, 0, 0, 0, 0,102,105,108,101,
/* 0x01f0 */ 122,101, 32, 32, 32, 32, 32, 32, 86, 77, 65, 32, 32, 32, 32, 32, /* 0x01f0 */ 32,102,111,114,109, 97,116, 32,101,108,102, 54, 52, 45,120, 56,
/* 0x0200 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 76, 77, 65, 32, 32, 32, /* 0x0200 */ 54, 45, 54, 52, 10, 10, 83,101, 99,116,105,111,110,115, 58, 10,
/* 0x0210 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 70,105,108,101, /* 0x0210 */ 73,100,120, 32, 78, 97,109,101, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x0220 */ 32,111,102,102, 32, 32, 65,108,103,110, 32, 32, 70,108, 97,103, /* 0x0220 */ 32, 32, 83,105,122,101, 32, 32, 32, 32, 32, 32, 86, 77, 65, 32,
/* 0x0230 */ 115, 10, 32, 32, 48, 32, 69, 76, 70, 77, 65, 73, 78, 88, 32, 32, /* 0x0230 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 76, 77,
/* 0x0240 */ 32, 32, 32, 32, 48, 49, 55, 49, 32, 32, 48, 32, 32, 48, 32, 32, /* 0x0240 */ 65, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x0250 */ 48, 52, 48, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, /* 0x0250 */ 70,105,108,101, 32,111,102,102, 32, 32, 65,108,103,110, 32, 32,
/* 0x0260 */ 78, 84, 83, 10, 32, 32, 49, 32, 69, 76, 70, 77, 65, 73, 78, 90, /* 0x0260 */ 70,108, 97,103,115, 10, 32, 32, 48, 32, 69, 76, 70, 77, 65, 73,
/* 0x0270 */ 32, 32, 32, 32, 32, 32, 48, 52, 32, 32, 48, 32, 32, 48, 32, 32, /* 0x0270 */ 78, 88, 32, 32, 32, 32, 32, 32, 48, 49, 97, 54, 32, 32, 48, 32,
/* 0x0280 */ 48, 49, 98, 52, 32, 32, 50, 42, 42, 50, 32, 32, 67, 79, 78, 84, /* 0x0280 */ 32, 48, 32, 32, 48, 52, 48, 32, 32, 50, 42, 42, 48, 32, 32, 67,
/* 0x0290 */ 69, 78, 84, 83, 10, 83, 89, 77, 66, 79, 76, 32, 84, 65, 66, 76, /* 0x0290 */ 79, 78, 84, 69, 78, 84, 83, 10, 32, 32, 49, 32, 69, 76, 70, 77,
/* 0x02a0 */ 69, 58, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x02a0 */ 65, 73, 78, 90, 32, 32, 32, 32, 32, 32, 48, 52, 32, 32, 48, 32,
/* 0x02b0 */ 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 69, 76, 70, 77, /* 0x02b0 */ 32, 48, 32, 32, 48, 49,101, 56, 32, 32, 50, 42, 42, 50, 32, 32,
/* 0x02c0 */ 65, 73, 78, 90, 32, 48, 32, 69, 76, 70, 77, 65, 73, 78, 90, 10, /* 0x02c0 */ 67, 79, 78, 84, 69, 78, 84, 83, 10, 83, 89, 77, 66, 79, 76, 32,
/* 0x02d0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x02d0 */ 84, 65, 66, 76, 69, 58, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x02e0 */ 32,108, 32, 32, 32, 32,100, 32, 32, 69, 76, 70, 77, 65, 73, 78, /* 0x02e0 */ 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32,
/* 0x02f0 */ 88, 32, 48, 32, 69, 76, 70, 77, 65, 73, 78, 88, 10, 48, 48, 48, /* 0x02f0 */ 69, 76, 70, 77, 65, 73, 78, 90, 32, 48, 32, 69, 76, 70, 77, 65,
/* 0x0300 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,103, 32, /* 0x0300 */ 73, 78, 90, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x0310 */ 32, 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 88, 32, 48, /* 0x0310 */ 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 69, 76, 70,
/* 0x0320 */ 32, 95,115,116, 97,114,116, 10, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x0320 */ 77, 65, 73, 78, 88, 32, 48, 32, 69, 76, 70, 77, 65, 73, 78, 88,
/* 0x0330 */ 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 32, 32, 32, 32, 32, 32, /* 0x0330 */ 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x0340 */ 32, 42, 85, 78, 68, 42, 32, 48, 32, 79, 95, 66, 73, 78, 70, 79, /* 0x0340 */ 48, 32,103, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73,
/* 0x0350 */ 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, /* 0x0350 */ 78, 88, 32, 48, 32, 95,115,116, 97,114,116, 10, 48, 48, 48, 48,
/* 0x0360 */ 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 69, 76, 70, 77, 65, 73, /* 0x0360 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 32, 32,
/* 0x0370 */ 78, 88, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 32, 32, /* 0x0370 */ 32, 32, 32, 32, 32, 42, 85, 78, 68, 42, 32, 48, 32, 79, 95, 66,
/* 0x0380 */ 32, 32, 32, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, /* 0x0380 */ 73, 78, 70, 79, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78,
/* 0x0390 */ 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, /* 0x0390 */ 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 69, 76,
/* 0x03a0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 53, 57, 32, 82, /* 0x03a0 */ 70, 77, 65, 73, 78, 88, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32,
/* 0x03b0 */ 95, 88, 56, 54, 95, 54, 52, 95, 80, 67, 51, 50, 32, 32, 32, 32, /* 0x03b0 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 84, 89, 80, 69, 32, 32,
/* 0x03c0 */ 32, 69, 76, 70, 77, 65, 73, 78, 90, 43, 48,120,102,102,102,102, /* 0x03c0 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85,
/* 0x03d0 */ 102,102,102,102,102,102,102,102,102,102,102, 99, 10, 10, 82, 69, /* 0x03d0 */ 69, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x03e0 */ 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, /* 0x03e0 */ 56, 55, 32, 82, 95, 88, 56, 54, 95, 54, 52, 95, 80, 67, 51, 50,
/* 0x03f0 */ 32, 70, 79, 82, 32, 91, 69, 76, 70, 77, 65, 73, 78, 90, 93, 58, /* 0x03f0 */ 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 90, 43, 48,120,
/* 0x0400 */ 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 32, 32, 32, 32, 32, 32, /* 0x0400 */ 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102, 99,
/* 0x0410 */ 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, /* 0x0410 */ 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67,
/* 0x0420 */ 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, 48, /* 0x0420 */ 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 69, 76, 70, 77, 65, 73,
/* 0x0430 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 82, 95, 88, 56, 54, /* 0x0430 */ 78, 90, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 32, 32,
/* 0x0440 */ 95, 54, 52, 95, 51, 50, 32, 32, 32, 32, 32, 32, 32, 79, 95, 66, /* 0x0440 */ 32, 32, 32, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32,
/* 0x0450 */ 73, 78, 70, 79, 10 /* 0x0450 */ 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48,
/* 0x0460 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 82,
/* 0x0470 */ 95, 88, 56, 54, 95, 54, 52, 95, 51, 50, 32, 32, 32, 32, 32, 32,
/* 0x0480 */ 32, 79, 95, 66, 73, 78, 70, 79, 10
}; };
+906 -902
View File
File diff suppressed because it is too large Load Diff
+1001 -991
View File
File diff suppressed because it is too large Load Diff
+27 -6
View File
@@ -118,12 +118,29 @@ AT_PAGESZ= 6 // /usr/include/elf.h
neg %rcx; push %rcx // F_PMASK neg %rcx; push %rcx // F_PMASK
push %rdx // F_RDX push %rdx // F_RDX
// Create anonymous temporary file on mfd #define arg2l esi
push $'u'|('p'<<8)|('x'<<16)|(0<<24) #define arg3l edx
// Create anonymous temporary file on mfd; like upxfd_create
push $'u'|('p'<<8)|('x'<<16)|(0<<24) // MATCH_22
push %rsp; pop %arg1 // "upx" push %rsp; pop %arg1 // "upx"
mov $MFD_EXEC,%arg2l mov $MFD_EXEC,%arg2l
movl $__NR_memfd_create,%eax; call sys_check; mov %rax,%r12 // mfd 0: // try memfd_create
pop %rcx // discard "upx" movl $__NR_memfd_create,%eax; syscall
test %eax,%eax; jns ok_memfd // success
test %arg2l,%arg2l; jz no_memfd // memfd_create failed twice
xor %arg2l,%arg2l; jmp 0b // try again without MFD_EXEC
no_memfd: // so try /dev/shm
O_RDWR= 2
O_DIRECTORY= 0200000 // 0x010000
O_TMPFILE= 020000000 // 0x400000
call 0f; .int 0700, O_RDWR|O_DIRECTORY|O_TMPFILE; .asciz "/dev/shm"; 0: pop %rsi
lodsl; xchg %eax,%arg3l
lodsl; push %rsi; xchg %eax,%arg2l
pop %arg1
push $__NR_open; pop %rax; call sys_check
ok_memfd:
mov %rax,%r12 // mfd
pop %rcx // MATCH_22 discard "upx"
lea sz_pack2(%rip),%rdi lea sz_pack2(%rip),%rdi
mov (%rdi),%ecx // sz_pack2: length before stub mov (%rdi),%ecx // sz_pack2: length before stub
@@ -242,15 +259,19 @@ eof_n2b:
sub $INSURANCE,%arg3 // memcheck limit sub $INSURANCE,%arg3 // memcheck limit
push %rsp; pop %arg2 // buffer push %rsp; pop %arg2 // buffer
mov %r12,%arg1 // mfd mov %r12,%arg1 // mfd
push %arg3 // MATCH_21 save LENU
0: // /dev/shm might be restricted to 8KiB at a time!
push $__NR_write; pop %rax; call sys_check push $__NR_write; pop %rax; call sys_check
add %rax,%arg2 // advance ptr
sub %eax,%arg3l; jnz 0b // decrement count
pop %arg2 // MATCH_21 restore LENU to mmap.len
// de-alloca() // de-alloca()
push old_sp; pop %rsp push old_sp; pop %rsp
// Map unfolded code the SELinux way // Map unfolded code the SELinux way
sub %arg6l,%arg6l // 0 offset xor %arg6,%arg6 // 0 offset
mov %r12,%arg5 // mfd mov %r12,%arg5 // mfd
push $MAP_SHARED; pop %sys4 push $MAP_SHARED; pop %sys4
push %arg3; pop %arg2 // LENU
push $PROT_WRITE|PROT_READ|PROT_EXEC; pop %arg3 // FIXME: add PROT_WRITE for DEBUG only push $PROT_WRITE|PROT_READ|PROT_EXEC; pop %arg3 // FIXME: add PROT_WRITE for DEBUG only
subl %edi,%edi // (%arg1)dst = 0; // kernel chooses addr subl %edi,%edi // (%arg1)dst = 0; // kernel chooses addr
push $__NR_mmap; pop %rax; call sys_check push $__NR_mmap; pop %rax; call sys_check
+18 -2
View File
@@ -216,8 +216,23 @@ my_bkpt: .globl my_bkpt
proc_self_exe: proc_self_exe:
.asciz "/proc/self/exe" .asciz "/proc/self/exe"
memfd_create: .globl memfd_create upxfd_create: .globl upxfd_create // (char *tag, unsigned flags)
mov $__NR_memfd_create,%eax; jmp sysgo2 0: // try memfd_create
movl $__NR_memfd_create,%eax; syscall
test %eax,%eax; jns ok_memfd // success
test %arg2l,%arg2l; jz no_memfd // memfd_create failed twice
xor %arg2l,%arg2l; jmp 0b // try again without MFD_EXEC
no_memfd: // so try /dev/shm
O_RDWR= 2
O_DIRECTORY= 0200000 // 0x010000
O_TMPFILE= 020000000 // 0x400000
call 0f; .int 0700, O_RDWR|O_DIRECTORY|O_TMPFILE; .asciz "/dev/shm"; 0: pop %rsi
lodsl; xchg %eax,%arg3l
lodsl; push %rsi; xchg %eax,%arg2l
pop %arg1
push $__NR_open; pop %rax; call sys_check
ok_memfd:
ret
Pmap: .globl Pmap // page-align the lo end Pmap: .globl Pmap // page-align the lo end
mov PAGE_MASK(%rip),%rax; not %rax // frag mask mov PAGE_MASK(%rip),%rax; not %rax // frag mask
@@ -230,6 +245,7 @@ mmap: .globl mmap
sysgo: # NOTE: kernel demands 4th arg in %sys4, NOT %arg4 sysgo: # NOTE: kernel demands 4th arg in %sys4, NOT %arg4
movzbl %al,%eax movzbl %al,%eax
sysgo2: sysgo2:
sys_check:
push %rax // save __NR_ push %rax // save __NR_
syscall // %rax= -errno syscall // %rax= -errno
pop %rcx // recover __NR_ pop %rcx // recover __NR_
+7 -4
View File
@@ -34,6 +34,9 @@
#endif //} #endif //}
#include "include/linux.h" #include "include/linux.h"
// memfd_create, but fall back to /dev/shm
// such as Ubuntu-20.04, Linux kernel 5.15.0-67, #74-20.04.1, 2023-02-22
extern int upxfd_create(char const *tag, unsigned flags);
#define MFD_EXEC 0x0010 #define MFD_EXEC 0x0010
extern void *memcpy(void *dst, void const *src, size_t n); extern void *memcpy(void *dst, void const *src, size_t n);
@@ -259,7 +262,7 @@ make_hatch_x86_64(
((long *)hatch)[0] = 0xc35a050f; // syscall; pop %arg3{%rdx); ret ((long *)hatch)[0] = 0xc35a050f; // syscall; pop %arg3{%rdx); ret
} }
else { // Does not fit at hi end of .text, so must use a new page "permanently" else { // Does not fit at hi end of .text, so must use a new page "permanently"
int mfd = memfd_create(addr_string("upx"), MFD_EXEC); // the directory entry int mfd = upxfd_create(addr_string("upx"), MFD_EXEC); // the directory entry
write(mfd, addr_string("\x0f\x05\x5a\xc3"), sz_code); write(mfd, addr_string("\x0f\x05\x5a\xc3"), sz_code);
hatch = mmap(0, sz_code, PROT_READ|PROT_EXEC, MAP_SHARED, mfd, 0); hatch = mmap(0, sz_code, PROT_READ|PROT_EXEC, MAP_SHARED, mfd, 0);
close(mfd); close(mfd);
@@ -294,7 +297,7 @@ make_hatch_ppc64(
memcpy(hatch, code, sz_code); memcpy(hatch, code, sz_code);
} }
else { // Does not fit at hi end of .text, so must use a new page "permanently" else { // Does not fit at hi end of .text, so must use a new page "permanently"
int mfd = memfd_create(addr_string("upx"), MFD_EXEC); // the directory entry int mfd = upxfd_create(addr_string("upx"), MFD_EXEC); // the directory entry
write(mfd, code, sz_code); write(mfd, code, sz_code);
hatch = mmap(0, sz_code, PROT_READ|PROT_EXEC, MAP_SHARED, mfd, 0); hatch = mmap(0, sz_code, PROT_READ|PROT_EXEC, MAP_SHARED, mfd, 0);
close(mfd); close(mfd);
@@ -329,7 +332,7 @@ make_hatch_arm64(
memcpy(hatch, code, sz_code); memcpy(hatch, code, sz_code);
} }
else { // Does not fit at hi end of .text, so must use a new page "permanently" else { // Does not fit at hi end of .text, so must use a new page "permanently"
int mfd = memfd_create(addr_string("upx"), MFD_EXEC); // the directory entry int mfd = upxfd_create(addr_string("upx"), MFD_EXEC); // the directory entry
write(mfd, code, sz_code); write(mfd, code, sz_code);
hatch = mmap(0, sz_code, PROT_READ|PROT_EXEC, MAP_SHARED, mfd, 0); hatch = mmap(0, sz_code, PROT_READ|PROT_EXEC, MAP_SHARED, mfd, 0);
close(mfd); close(mfd);
@@ -551,7 +554,7 @@ do_xmap(
// Cannot set PROT_EXEC except via mmap() into a region (Linux "vma") // Cannot set PROT_EXEC except via mmap() into a region (Linux "vma")
// that has never had PROT_WRITE. So use a Linux-only "memory file" // that has never had PROT_WRITE. So use a Linux-only "memory file"
// to hold the contents. // to hold the contents.
mfd = memfd_create(addr_string("upx"), MFD_EXEC); // the directory entry mfd = upxfd_create(addr_string("upx"), MFD_EXEC); // the directory entry
ftruncate(mfd, mlen); // Allocate the pages in the file. ftruncate(mfd, mlen); // Allocate the pages in the file.
if (frag) { if (frag) {
// Note: *addr does not exist yet, and figuring out a substitute // Note: *addr does not exist yet, and figuring out a substitute
+21 -3
View File
@@ -319,8 +319,10 @@ space3eq:
.ascii " =" .ascii " ="
proc_self_exe: proc_self_exe:
.asciz "/proc/self/exe" .asciz "/proc/self/exe"
.balign 4 devshm:
.asciz "/dev/shm"
.balign 4
f_unfilter: // (char *ptr, uint len, uint cto, uint fid) f_unfilter: // (char *ptr, uint len, uint cto, uint fid)
ptr .req x0 ptr .req x0
len .req x1 len .req x1
@@ -497,8 +499,24 @@ brk: do_sys __NR_brk; ret
.globl munmap .globl munmap
munmap: do_sys __NR_munmap; ret munmap: do_sys __NR_munmap; ret
.globl memfd_create ufdc_bits: .int O_RDWR|O_DIRECTORY|O_TMPFILE
memfd_create: do_sys __NR_memfd_create; ret upxfd_create: .globl upxfd_create // (char *tag, unsigned flags)
0: // try memfd_create
mov w8,#__NR_memfd_create; svc #0
tst w0,w0; bpl ok_memfd // success
cbz w1, no_memfd // memfd_create failed twice
mov w1,#0; b 0b // try again without MFD_EXEC
no_memfd: // so try /dev/shm
O_RDWR= 2
O_DIRECTORY= 0200000 // 0x010000
O_TMPFILE= 020000000 // 0x400000
mov w3,#0700
ldr w2,ufdc_bits
adr x1,devshm
mov w0,#AT_FDCWD
mov w8,#__NR_openat; svc #0
ok_memfd:
ret
.globl ftruncate .globl ftruncate
ftruncate: do_sys __NR_ftruncate; ret ftruncate: do_sys __NR_ftruncate; ret
+2 -2
View File
@@ -7,14 +7,14 @@
*/ */
#if defined(__i386__) //}{ #if defined(__i386__) //}{
#define addr_string(string) ({ \ #define addr_string(string) (char *)({ \
char const *str; \ char const *str; \
asm("call 0f; .asciz \"" string "\"; 0: pop %0" \ asm("call 0f; .asciz \"" string "\"; 0: pop %0" \
/*out*/ : "=r"(str) ); \ /*out*/ : "=r"(str) ); \
str; \ str; \
}) })
#elif defined(__arm__) //}{ #elif defined(__arm__) //}{
#define addr_string(string) ({ \ #define addr_string(string) (char *)({ \
char const *str; \ char const *str; \
asm("bl 0f; .string \"" string "\"; .balign 4; 0: mov %0,lr" \ asm("bl 0f; .string \"" string "\"; .balign 4; 0: mov %0,lr" \
/*out*/ : "=r"(str) \ /*out*/ : "=r"(str) \
+3 -3
View File
@@ -2,8 +2,8 @@ file format elf64-x86-64
Sections: Sections:
Idx Name Size VMA LMA File off Algn Flags Idx Name Size VMA LMA File off Algn Flags
0 ELFMAINX 0171 0 0 040 2**0 CONTENTS 0 ELFMAINX 01a6 0 0 040 2**0 CONTENTS
1 ELFMAINZ 04 0 0 01b4 2**2 CONTENTS 1 ELFMAINZ 04 0 0 01e8 2**2 CONTENTS
SYMBOL TABLE: SYMBOL TABLE:
0000000000000000 l d ELFMAINZ 0 ELFMAINZ 0000000000000000 l d ELFMAINZ 0 ELFMAINZ
0000000000000000 l d ELFMAINX 0 ELFMAINX 0000000000000000 l d ELFMAINX 0 ELFMAINX
@@ -12,7 +12,7 @@ SYMBOL TABLE:
RELOCATION RECORDS FOR [ELFMAINX]: RELOCATION RECORDS FOR [ELFMAINX]:
OFFSET TYPE VALUE OFFSET TYPE VALUE
0000000000000059 R_X86_64_PC32 ELFMAINZ+0xfffffffffffffffc 0000000000000087 R_X86_64_PC32 ELFMAINZ+0xfffffffffffffffc
RELOCATION RECORDS FOR [ELFMAINZ]: RELOCATION RECORDS FOR [ELFMAINZ]:
OFFSET TYPE VALUE OFFSET TYPE VALUE
+17 -17
View File
@@ -46,24 +46,24 @@ LOAD tmp/amd64-expand.o
LOAD tmp/amd64-linux.elf-main2.o LOAD tmp/amd64-linux.elf-main2.o
OUTPUT(tmp/amd64-linux.elf-fold.bin elf64-x86-64) OUTPUT(tmp/amd64-linux.elf-fold.bin elf64-x86-64)
SYSCALLS 0x0000000000000000 0x8e SYSCALLS 0x0000000000000000 0xc0
SYSCALLS 0x0000000000000000 0x8e tmp/amd64-linux.elf-fold.o SYSCALLS 0x0000000000000000 0xc0 tmp/amd64-linux.elf-fold.o
0x0000000000000018 Pmap 0x000000000000004a Pmap
0x000000000000006a munmap 0x000000000000009c munmap
0x000000000000007a ftruncate 0x00000000000000ac ftruncate
0x000000000000002a mmap 0x000000000000005c mmap
0x0000000000000086 write 0x00000000000000b8 write
0x0000000000000011 memfd_create 0x00000000000000bc read
0x000000000000008a read 0x0000000000000011 upxfd_create
0x0000000000000000 my_bkpt 0x0000000000000000 my_bkpt
0x0000000000000045 Pprotect 0x0000000000000077 Pprotect
0x0000000000000086 Pwrite 0x00000000000000b8 Pwrite
0x000000000000005a Punmap 0x000000000000008c Punmap
0x000000000000006e exit 0x00000000000000a0 exit
0x0000000000000072 brk 0x00000000000000a4 brk
0x000000000000007e open 0x00000000000000b0 open
0x0000000000000082 mprotect 0x00000000000000b4 mprotect
0x0000000000000076 close 0x00000000000000a8 close
LZMA_DEC10 0x0000000000000000 0x9f7 LZMA_DEC10 0x0000000000000000 0x9f7
LZMA_DEC10 0x0000000000000000 0x9f7 tmp/amd64-expand.o LZMA_DEC10 0x0000000000000000 0x9f7 tmp/amd64-expand.o
+16 -16
View File
@@ -12,17 +12,17 @@ LOAD tmp/arm64-expand.o
LOAD tmp/arm64-linux.elf-main2.o LOAD tmp/arm64-linux.elf-main2.o
OUTPUT(tmp/arm64-linux.elf-fold.bin elf64-littleaarch64) OUTPUT(tmp/arm64-linux.elf-fold.bin elf64-littleaarch64)
.text 0x0000000000000000 0xa98 .text 0x0000000000000000 0xaa0
.text 0x0000000000000000 0x240 tmp/arm64-linux.elf-fold.o .text 0x0000000000000000 0x248 tmp/arm64-linux.elf-fold.o
0x0000000000000008 get_page_mask 0x0000000000000008 get_page_mask
0x0000000000000018 mmap_privanon 0x0000000000000018 mmap_privanon
0x0000000000000028 mmap 0x0000000000000028 mmap
0x0000000000000044 Pprotect 0x0000000000000044 Pprotect
0x0000000000000044 mprotect 0x0000000000000044 mprotect
.text 0x0000000000000240 0x0 tmp/arm64-expand.o .text 0x0000000000000248 0x0 tmp/arm64-expand.o
.text 0x0000000000000240 0x858 tmp/arm64-linux.elf-main2.o .text 0x0000000000000248 0x858 tmp/arm64-linux.elf-main2.o
0x00000000000008f4 underlay 0x00000000000008fc underlay
0x0000000000000960 upx_main 0x0000000000000968 upx_main
.data 0x0000000000000000 0x0 .data 0x0000000000000000 0x0
.data 0x0000000000000000 0x0 tmp/arm64-linux.elf-fold.o .data 0x0000000000000000 0x0 tmp/arm64-linux.elf-fold.o
@@ -34,8 +34,8 @@ OUTPUT(tmp/arm64-linux.elf-fold.bin elf64-littleaarch64)
.bss 0x0000000000000000 0x0 tmp/arm64-expand.o .bss 0x0000000000000000 0x0 tmp/arm64-expand.o
.bss 0x0000000000000000 0x0 tmp/arm64-linux.elf-main2.o .bss 0x0000000000000000 0x0 tmp/arm64-linux.elf-main2.o
SYSCALLS 0x0000000000000000 0xe0 SYSCALLS 0x0000000000000000 0x110
SYSCALLS 0x0000000000000000 0xe0 tmp/arm64-linux.elf-fold.o SYSCALLS 0x0000000000000000 0x110 tmp/arm64-linux.elf-fold.o
0x0000000000000000 my_bkpt 0x0000000000000000 my_bkpt
0x0000000000000008 exit 0x0000000000000008 exit
0x0000000000000010 read 0x0000000000000010 read
@@ -44,14 +44,14 @@ SYSCALLS 0x0000000000000000 0xe0
0x0000000000000034 getpid 0x0000000000000034 getpid
0x0000000000000040 brk 0x0000000000000040 brk
0x000000000000004c munmap 0x000000000000004c munmap
0x0000000000000058 memfd_create 0x000000000000005c upxfd_create
0x0000000000000064 ftruncate 0x0000000000000094 ftruncate
0x0000000000000070 unlink 0x00000000000000a0 unlink
0x0000000000000084 readlink 0x00000000000000b4 readlink
0x000000000000008c open 0x00000000000000bc open
0x00000000000000a8 __clear_cache 0x00000000000000d8 __clear_cache
0x00000000000000bc memcpy 0x00000000000000ec memcpy
0x00000000000000d0 memset 0x0000000000000100 memset
EXP_HEAD 0x0000000000000000 0x104 EXP_HEAD 0x0000000000000000 0x104
EXP_HEAD 0x0000000000000000 0x104 tmp/arm64-expand.o EXP_HEAD 0x0000000000000000 0x104 tmp/arm64-expand.o