one_gadget 1.9.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +217 -0
- data/README.md +381 -118
- data/lib/one_gadget/abi.rb +49 -2
- data/lib/one_gadget/builds/libc-2.19-cf699a15caae64f50311fc4655b86dc39a479789.rb +269 -7
- data/lib/one_gadget/builds/libc-2.19-fd51b20e670e9a9f60dc3b06dc9761fb08c9358b.rb +118 -10
- data/lib/one_gadget/builds/libc-2.23-60131540dadc6796cab33388349e6e4e68692053.rb +230 -9
- data/lib/one_gadget/builds/libc-2.23-679ad41a6bc9e718a11a36cf9879cac97197e565.rb +82 -4
- data/lib/one_gadget/builds/libc-2.23-926eb99d49cab2e5622af38ab07395f5b32035e9.rb +147 -6
- data/lib/one_gadget/builds/libc-2.23-991d173c6b9056712812d98507cbe95f937db7cf.rb +133 -0
- data/lib/one_gadget/builds/libc-2.24-8cba3297f538691eb1875be62986993c004f3f4d.rb +120 -5
- data/lib/one_gadget/builds/libc-2.24-fd0655c4d2073eda4235084e1d0e558f0251be8a.rb +67 -7
- data/lib/one_gadget/builds/libc-2.26-2104f3d4ad5cf68603afbe7ba1a17f5ac99c5988.rb +192 -8
- data/lib/one_gadget/builds/libc-2.26-ddcc13122ddbfe5e5ef77d4ebe66d124ae5762c2.rb +246 -10
- data/lib/one_gadget/builds/libc-2.26-f65648a832414f2144ce795d75b6045a1ec2e252.rb +151 -4
- data/lib/one_gadget/builds/libc-2.27-53f40c1d2f3739ae017dcdcef1a17314786e3709.rb +134 -5
- data/lib/one_gadget/builds/libc-2.27-63b3d43ad45e1b0f601848c65b067f9e9b40528b.rb +154 -4
- data/lib/one_gadget/builds/libc-2.27-8c2d375f8d23a7b58de23a60b37bef2d80b23aef.rb +167 -0
- data/lib/one_gadget/builds/libc-2.27-b417c0ba7cc5cf06d1d1bed6652cedb9253c60d0.rb +198 -8
- data/lib/one_gadget/builds/libc-2.31-00537087f0a4c4381deb83f49cc19e6abfd47a12.rb +68 -0
- data/lib/one_gadget/builds/libc-2.31-5792732f783158c66fb4f3756458ca24e46e827d.rb +308 -0
- data/lib/one_gadget/builds/libc-2.31-749e6d13e587d608128a097381cd44b9aca59927.rb +416 -0
- data/lib/one_gadget/builds/libc-2.31-9fdb74e7b217d06c93172a8243f8547f947ee6d1.rb +217 -31
- data/lib/one_gadget/builds/libc-2.31-aa18dedb2aa800a743aac3bb546b8bd5816dbca6.rb +278 -0
- data/lib/one_gadget/builds/libc-2.35-1a0246cddde3e301e0cd5a85630aa26e89cb34b5.rb +83 -0
- data/lib/one_gadget/builds/libc-2.35-22ca0a83a4004122e30a69b597be96e134068616.rb +263 -0
- data/lib/one_gadget/builds/libc-2.35-4a81130bc30ded618f1edc030ecc5439e066dc68.rb +248 -0
- data/lib/one_gadget/builds/libc-2.35-a91d1bc05ce8f54989de1172c24b2b736378901f.rb +221 -0
- data/lib/one_gadget/builds/libc-2.39-328820b908de8ea1ef79afa8995e302e819163d7.rb +174 -0
- data/lib/one_gadget/builds/libc-2.39-54ae5337044aaabab70d65e0c3444f7e4735e059.rb +291 -0
- data/lib/one_gadget/builds/libc-2.39-70d6616bcfd43eaa73962220df98dd9c82ca6687.rb +282 -0
- data/lib/one_gadget/builds/libc-2.39-a7e93008cd7dad7a713e3eaf1f9dec78ce7c68a6.rb +66 -0
- data/lib/one_gadget/builds/libc-2.39-f5b510cd91b956148e885994f55a0e476462bf92.rb +282 -0
- data/lib/one_gadget/builds/libc-2.43-7a08e84aa7f1e0bd80a7da6227c3a006c3ff327d.rb +75 -0
- data/lib/one_gadget/builds/libc-2.43-8c7af7f227b3871d6afba752cbb617f317023de5.rb +279 -0
- data/lib/one_gadget/builds/libc-2.43-90ebd03ae9d9f42b23b4eb82fdf70352cf744198.rb +96 -0
- data/lib/one_gadget/builds/libc-2.43-b50ceafbd17dc6bceee344a66671c7eaa152bef4.rb +447 -0
- data/lib/one_gadget/cli.rb +50 -30
- data/lib/one_gadget/emulators/aarch64.rb +56 -77
- data/lib/one_gadget/emulators/amd64.rb +48 -2
- data/lib/one_gadget/emulators/arm.rb +306 -0
- data/lib/one_gadget/emulators/arm_family.rb +300 -0
- data/lib/one_gadget/emulators/conditional.rb +348 -0
- data/lib/one_gadget/emulators/i386.rb +2 -2
- data/lib/one_gadget/emulators/instruction.rb +6 -5
- data/lib/one_gadget/emulators/lambda.rb +58 -9
- data/lib/one_gadget/emulators/processor.rb +594 -29
- data/lib/one_gadget/emulators/register_file.rb +97 -0
- data/lib/one_gadget/emulators/safe_calls.rb +56 -0
- data/lib/one_gadget/emulators/x86.rb +165 -73
- data/lib/one_gadget/error.rb +12 -0
- data/lib/one_gadget/fetchers/aarch64.rb +42 -7
- data/lib/one_gadget/fetchers/amd64.rb +7 -34
- data/lib/one_gadget/fetchers/arm.rb +256 -0
- data/lib/one_gadget/fetchers/base.rb +727 -87
- data/lib/one_gadget/fetchers/i386.rb +27 -6
- data/lib/one_gadget/fetchers/objdump.rb +1 -1
- data/lib/one_gadget/fetchers/x86.rb +41 -4
- data/lib/one_gadget/fetchers.rb +99 -0
- data/lib/one_gadget/gadget.rb +344 -26
- data/lib/one_gadget/helper.rb +53 -39
- data/lib/one_gadget/logger.rb +4 -1
- data/lib/one_gadget/one_gadget.rb +20 -11
- data/lib/one_gadget/update.rb +2 -2
- data/lib/one_gadget/version.rb +1 -1
- metadata +53 -859
- data/lib/one_gadget/builds/libc-2.19-01e14462fc6097604edd54a2ee63664c65b2c12b.rb +0 -49
- data/lib/one_gadget/builds/libc-2.19-01e23c38126dad7db569b176808a7c54db64a086.rb +0 -47
- data/lib/one_gadget/builds/libc-2.19-02093f433808b294939b7a84c436c9eb4ec7f084.rb +0 -45
- data/lib/one_gadget/builds/libc-2.19-0301225d38bb881df8962a45d8c7f97449628511.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-036830b8f13a440ab4f419e46889b60e6e2b4211.rb +0 -49
- data/lib/one_gadget/builds/libc-2.19-03913aa050d557a99cc18f7b10e35f06e7c9265e.rb +0 -47
- data/lib/one_gadget/builds/libc-2.19-05438cea9c1f9b3bbca9d9718319ee3742937f2e.rb +0 -49
- data/lib/one_gadget/builds/libc-2.19-05d284a054b0c444fe40e91b25155a637b5cd35b.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-081d1ade5e735e7bbd0d2c1655a1eb7a0ab546ad.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-09aa28fd1054ee91085a7e13da58891c2d22058d.rb +0 -46
- data/lib/one_gadget/builds/libc-2.19-0b3a9eb5ffbd93527a046585e2eb0c8ae804498b.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-0ca781d9dae5d7689f112aa047b949ba253a1a24.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-0cfe51d12d5ffdc0b80469a74e6e5afb8130cafb.rb +0 -47
- data/lib/one_gadget/builds/libc-2.19-0dd7691bd47c4270c2ce9343dff1fbe0e27ad9f3.rb +0 -45
- data/lib/one_gadget/builds/libc-2.19-0e1a9dd2ea0a174b53ad15979b049628cb2d7fd0.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-0fe755222a275227e03414bf80fe98560038cf7e.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-10c913aa6554f3128781afb7846ac481b64c10b6.rb +0 -45
- data/lib/one_gadget/builds/libc-2.19-1142f4753ddff69c217e1e539272eaaf7d75da4c.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-12d7f074b08cab569614830552b5fe8a32707295.rb +0 -47
- data/lib/one_gadget/builds/libc-2.19-145bd51d758bf9c3e3b45949a2023cbaa0941e37.rb +0 -47
- data/lib/one_gadget/builds/libc-2.19-15b6f6d06e3435a22c15398ce99c3d649112f576.rb +0 -47
- data/lib/one_gadget/builds/libc-2.19-15c42742a61d7b2fe40dca9ca659a8f8f8ffea32.rb +0 -47
- data/lib/one_gadget/builds/libc-2.19-1606a4f3d8e807c5bf9b273ab202901115aa7a1e.rb +0 -49
- data/lib/one_gadget/builds/libc-2.19-17e8467dfe433c3622e6874d5795f6ac8edc8951.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-1d7ac0a26e8dd7a9b8443fe4a5f59e46ee16ce74.rb +0 -45
- data/lib/one_gadget/builds/libc-2.19-1dae2bc5818d22b565ed441211d0e2df6e942c25.rb +0 -45
- data/lib/one_gadget/builds/libc-2.19-1db2291c040579630f551b3568d0bc8758aa25d7.rb +0 -47
- data/lib/one_gadget/builds/libc-2.19-1dcad38451d0f4e339ac91079d6a20e40015d7f4.rb +0 -49
- data/lib/one_gadget/builds/libc-2.19-20f983ed5f4a8d177a9839b4abe44ffa35e1eade.rb +0 -49
- data/lib/one_gadget/builds/libc-2.19-21f20ffd821a693d32e258aa6a64e6bde5c5bdaf.rb +0 -45
- data/lib/one_gadget/builds/libc-2.19-22325505e6f257ab00ca32d46cd444c903d5dc89.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-22ea459c5bf13179544fc0bc92372ebe52792f53.rb +0 -49
- data/lib/one_gadget/builds/libc-2.19-267899ea9a83d7e5bd2ae3e53943cd57da6a01e7.rb +0 -47
- data/lib/one_gadget/builds/libc-2.19-26d70c7187d46c01bea7c22e8428fd6569d0f29c.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-27ae159e7958021d9c784daa60ac582aeb2e380c.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-286f68616b18ea86201b1bd81c4e39ab441a876f.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-29ad0fae22588909ae24075cf3d30123d3563a3c.rb +0 -46
- data/lib/one_gadget/builds/libc-2.19-29c9abe596db30c86fe28d30dc275485c7e3f240.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-2aebf61fd92ce11ccbc35f4f5e1da8843415ff2f.rb +0 -47
- data/lib/one_gadget/builds/libc-2.19-2b7794adc3efbe94dd7f17bb28382f42415ef32c.rb +0 -45
- data/lib/one_gadget/builds/libc-2.19-2bb9296b7b2843ef007f7de1b2995bc33ec8294d.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-2bba9d358bac63ff81597767b5bc229316bd12e0.rb +0 -47
- data/lib/one_gadget/builds/libc-2.19-2dad3f021a0e10d56a36a3e6e83c641013bb8d0d.rb +0 -47
- data/lib/one_gadget/builds/libc-2.19-2dc3a77a63a29cdfce5000c5e562da4574560802.rb +0 -49
- data/lib/one_gadget/builds/libc-2.19-2ee2c632ffc91afb8662573f6870c70a03fecaad.rb +0 -45
- data/lib/one_gadget/builds/libc-2.19-2fc2eb810e87cbb9d2a9c79bb1aa31c3b84330c0.rb +0 -49
- data/lib/one_gadget/builds/libc-2.19-309303fe5b44867525d535b4b8df1d9890128765.rb +0 -47
- data/lib/one_gadget/builds/libc-2.19-30c94dc66a1fe95180c3d68d2b89e576d5ae213c.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-30d456d1974436ca70141610c206bbd4e9ac127f.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-30dfa78b54091b3517212562fbe71c82031135df.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-319d6e67364b59468f00c62003e31f9698590885.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-325f373d48d6e3eb950fb4a1841cee80adf696e4.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-335b30edc15f874730295594b30528ba178aeca7.rb +0 -46
- data/lib/one_gadget/builds/libc-2.19-33adc3316a61d4db3e78e167be8f2d1c8b4a0474.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-34eca1b0e54755d19a70d3a74b744911f746902a.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-35597c5d9140178626b2989b0f3049c825f17249.rb +0 -49
- data/lib/one_gadget/builds/libc-2.19-3565b3bf199d386bd0188a3690135b2ef82a559e.rb +0 -45
- data/lib/one_gadget/builds/libc-2.19-365c74dde459303730e276b4d6022f1eacda06fd.rb +0 -49
- data/lib/one_gadget/builds/libc-2.19-3691e2c3b9f75fbaf99c93f201c86a2df07a98d2.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-3701aa1820d0a1dc12ac27ffde0ca8c63c50ab4a.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-3883c7733b2a0819e0c7c2dcbadfdac26e0e2b72.rb +0 -45
- data/lib/one_gadget/builds/libc-2.19-395c995bb2028f96efb60a6ebce75ed51d58c0b0.rb +0 -45
- data/lib/one_gadget/builds/libc-2.19-39612ce36adeb6f7e92658cd62c737bc3a260586.rb +0 -49
- data/lib/one_gadget/builds/libc-2.19-397c84e78c14cbffba39a48184db482211df9fb3.rb +0 -41
- data/lib/one_gadget/builds/libc-2.19-39f403e178f6c4db89f200bae5afd6c55f61e34b.rb +0 -49
- data/lib/one_gadget/builds/libc-2.19-3bbdc31d826a2bd8af0919d958620342c295c557.rb +0 -47
- data/lib/one_gadget/builds/libc-2.19-3ea89e2234c5203ef245cd4146b515794079ceac.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-3f8df0a32477b9b5c8521116e4d554f4dd784e9c.rb +0 -47
- data/lib/one_gadget/builds/libc-2.19-40410c37ab2b3867bcc1efa841c4bd990bbaced6.rb +0 -47
- data/lib/one_gadget/builds/libc-2.19-40443517ebed72833c0cea4364db0346c422be75.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-410c538cbb80e04ba67f8f93ead7c915cb8b151e.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-410c5d16e862678b3263a8250ad936b99554050c.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-42150628cea5ef0a4f7f48267f0d6fd206d7bef4.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-4315ee2103b2f1797d8d18ef03714dbdc4417095.rb +0 -45
- data/lib/one_gadget/builds/libc-2.19-4360063303905bf941489398b5601c5e2bc6c3a7.rb +0 -47
- data/lib/one_gadget/builds/libc-2.19-441d0bc3f372750187a7cc29528fca0f2fa4297d.rb +0 -45
- data/lib/one_gadget/builds/libc-2.19-444c5eaa7cb665ed9b90d3edc47e07c9eeb22c49.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-458c7913f032820ce7610496892f79a4779b0224.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-460355a265c134c0c801820ab5e80e37e2cd9b00.rb +0 -45
- data/lib/one_gadget/builds/libc-2.19-47411da31c1af33c897d1646f68d4443c3a156f2.rb +0 -47
- data/lib/one_gadget/builds/libc-2.19-482a813d828d5fe257838e679dff9b7be56bf4fb.rb +0 -47
- data/lib/one_gadget/builds/libc-2.19-484428905d6e138e0b88e97107732ace68c12752.rb +0 -45
- data/lib/one_gadget/builds/libc-2.19-4866fc3ad424dfb788e9ad11039b7759f3b51574.rb +0 -47
- data/lib/one_gadget/builds/libc-2.19-48b333aa64a86c31334714305379a6c1f1701c69.rb +0 -45
- data/lib/one_gadget/builds/libc-2.19-49f3ac15a25f78f0258283b3a207017e51ced583.rb +0 -49
- data/lib/one_gadget/builds/libc-2.19-4a384b8c751de6c0e2652261310104bf1b2127d5.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-4a5eeadb796e6dba8f289a90de2b53e71c8e8788.rb +0 -49
- data/lib/one_gadget/builds/libc-2.19-4daad26169c5c868b8ae90587fff76cc28e7b309.rb +0 -49
- data/lib/one_gadget/builds/libc-2.19-4e304f78f3cfb52dd521bd6fd8ae7a0c7400104e.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-4e9b0243eb28ea1a14539448a5317d6215fa13fa.rb +0 -49
- data/lib/one_gadget/builds/libc-2.19-4eda8ff01be3fba1c7bdd442a8690c3dc7397b6a.rb +0 -47
- data/lib/one_gadget/builds/libc-2.19-4f953c59dca85d439af86c6564c9fdb07cccafd5.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-509ee0c9616c4c3ed81951501a8950e1f529bbff.rb +0 -41
- data/lib/one_gadget/builds/libc-2.19-50c2ed4707152ba59bfacfd4e1fabc3b28ddc140.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-50e2c3560712d3d9f7af3d155cdeb69687045dd2.rb +0 -47
- data/lib/one_gadget/builds/libc-2.19-512993e1c66001e0ad11feea73ddfc22f9c0767b.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-515cd2920490d13129bbad0514c7c7c7e67c18bc.rb +0 -49
- data/lib/one_gadget/builds/libc-2.19-51a7763b217be74d9da6fd006c32f82ef82477b5.rb +0 -45
- data/lib/one_gadget/builds/libc-2.19-5382058b69031caa9b9996c11061cd164c9398ff.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-5455f3eafe22e7a085c3568bebc324a2ade811ea.rb +0 -49
- data/lib/one_gadget/builds/libc-2.19-54b97c45aa9ce58ba4dea4eda316f49927e51cff.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-54fe99efd891702e87da514403a2d3d8cae8032b.rb +0 -49
- data/lib/one_gadget/builds/libc-2.19-5537ab284321fdc6efd07276d6e4c524014bf069.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-55e62f166b419389a0de90ceab52c337946ba643.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-56338f83f1b656ee4395a8d3bddf810725151e91.rb +0 -49
- data/lib/one_gadget/builds/libc-2.19-58915015546da78c4116e45480be238bac4c59a7.rb +0 -45
- data/lib/one_gadget/builds/libc-2.19-58cabb8c6f68b05a1c1c9a707a43f22c3a55a3e9.rb +0 -45
- data/lib/one_gadget/builds/libc-2.19-5962ff0ec39da4ea3c572535d1da0c0d3b10cfe9.rb +0 -45
- data/lib/one_gadget/builds/libc-2.19-5a49bf8def435ac3fe9208df3c6b5622fe347a97.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-5a49ee56df5b5ab48a6f5607bb46a0b92a3d1c34.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-5a7a0413044f37bc4096c7bc4c33d1ea6880d856.rb +0 -47
- data/lib/one_gadget/builds/libc-2.19-5a968877a4a31019701f53ed38130c1313a5e0ad.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-5ab6a00d805f696b8aa6d0d2ee29d511b41499d1.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-5b344bb54cc929c6849371987107f587bd9e0d48.rb +0 -47
- data/lib/one_gadget/builds/libc-2.19-5b60e04aabbebdb248f5c03dad0ca1a9fab8be5f.rb +0 -49
- data/lib/one_gadget/builds/libc-2.19-5ba8f97e1beb7f068474d473e2db786c07df8561.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-5c02e6b0e80785f5944265c698dc811862018d21.rb +0 -49
- data/lib/one_gadget/builds/libc-2.19-5c14523f13f0fb9be3366f446e9e48165373ddf8.rb +0 -45
- data/lib/one_gadget/builds/libc-2.19-5e1e27a45fbd02cfa9a95bf657fc4aa53af75421.rb +0 -47
- data/lib/one_gadget/builds/libc-2.19-605a6d751871d12a83e34359ff4d73c895d6f4ce.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-60b315c3b5a4b7e4bf699cf79a137d19a9a13d89.rb +0 -47
- data/lib/one_gadget/builds/libc-2.19-60c7d280d7c8af6758a3a951524487641f349460.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-61eeda0c442c32c20f93008acbc978e28cca956d.rb +0 -45
- data/lib/one_gadget/builds/libc-2.19-63b04eb27336fd6c68f7bd8ba76ccbcc8df1b46c.rb +0 -49
- data/lib/one_gadget/builds/libc-2.19-6573062b2d3648b5970f82fbd63cd154c9d84661.rb +0 -49
- data/lib/one_gadget/builds/libc-2.19-6573e7dbcbb6179989e2308746f65b95c4117485.rb +0 -45
- data/lib/one_gadget/builds/libc-2.19-6850f318041a1a5a202ab0512dda55e80ff19ec8.rb +0 -45
- data/lib/one_gadget/builds/libc-2.19-68977b6661c8b646d7d88e32d81916937e346001.rb +0 -45
- data/lib/one_gadget/builds/libc-2.19-69673214041206e0eee5b9b5b47fd12d733127e1.rb +0 -46
- data/lib/one_gadget/builds/libc-2.19-6a6d6625087a1de6139a620795ef8b2360a06592.rb +0 -45
- data/lib/one_gadget/builds/libc-2.19-6abcb030391dbadd0fda38c3975ad6dcfe7fe20c.rb +0 -49
- data/lib/one_gadget/builds/libc-2.19-6aff6d091954955fe931bb720a17708513aabda7.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-6b536aa43eabd040e5117034f582d1c0374980cd.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-6d7e55c204d097c75f6b89717876c17f0dc1779a.rb +0 -45
- data/lib/one_gadget/builds/libc-2.19-6d8d0b8321b58b20d824cfa9d68d66769caa9b42.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-6ee0f980c1c75935d8802d0ea84e0a9f09874c51.rb +0 -47
- data/lib/one_gadget/builds/libc-2.19-700e2a19dfcc8e20b41145039b6c823123676696.rb +0 -45
- data/lib/one_gadget/builds/libc-2.19-705f27d45e46aeda2619beb62fc804d1c2fbe26c.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-707bc133809b86abab918bb8a8fc7791fe916765.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-74a3b58450e957c04e2cca3619695cb3d73bb68e.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-74bf136a60dee4fe2f7ca0d9b40fbdd6b0115496.rb +0 -45
- data/lib/one_gadget/builds/libc-2.19-7553121919b4b6bb1d86f8b1eb8eb152e6fb1218.rb +0 -47
- data/lib/one_gadget/builds/libc-2.19-77063a4c59e02c182d5afae288f450c7cdf5b6da.rb +0 -49
- data/lib/one_gadget/builds/libc-2.19-77504f0405a2d81d64310f262ac559cdc8375b04.rb +0 -47
- data/lib/one_gadget/builds/libc-2.19-77bcde9cd55f5ca93684b46705e0851585b94019.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-78c0362905c145cfc28aa2ff409962f3c8b2cb6b.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-7a02d454ba0e8af69e3a284c381318b55908deda.rb +0 -36
- data/lib/one_gadget/builds/libc-2.19-7a7914eec99efd40990d0b1978a01caf46612636.rb +0 -47
- data/lib/one_gadget/builds/libc-2.19-7ccbbd7f1713d8eebb6042a8da7e9f2ac1878d42.rb +0 -49
- data/lib/one_gadget/builds/libc-2.19-7cf04fce2326ced25e80c0d7972408574a0817e6.rb +0 -47
- data/lib/one_gadget/builds/libc-2.19-7d415bffb8dbc06c96e116d8e8f0d8deababbd9e.rb +0 -47
- data/lib/one_gadget/builds/libc-2.19-7e523a4a16878ad1fcb7844e93bdd4d474843f86.rb +0 -49
- data/lib/one_gadget/builds/libc-2.19-7e97512d5895e6d5e26dc5b26b31c575a80f0188.rb +0 -52
- data/lib/one_gadget/builds/libc-2.19-7f380884708f0bac5c779705562e01ccc7ecf223.rb +0 -45
- data/lib/one_gadget/builds/libc-2.19-7f6d04c0ad1b67e316c80cd606720675fc111b50.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-7fbf66aed8b38b67a1a5653e27e9e4d430b9ada6.rb +0 -49
- data/lib/one_gadget/builds/libc-2.19-80c8143bd0180bbeb21b7d8c12687d043ae81c7d.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-8131bf46e87501516970176f3f7e86762ffcc3bf.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-83aef0e751f3dddd4b56c5be57524239e39eecaa.rb +0 -45
- data/lib/one_gadget/builds/libc-2.19-83f3af43ecaf52a63801ea59ad113835dfb31d58.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-845104cd0116005c9b9569fe3c6d5afd3689a01e.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-8564abd306654cfc468a54117954244e1a2c9102.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-863b5d3db2ef5af0b32dba633dca439a3908c42e.rb +0 -47
- data/lib/one_gadget/builds/libc-2.19-866e18be92e8dcab711b7c1e3402065deff5df70.rb +0 -49
- data/lib/one_gadget/builds/libc-2.19-869f691faebbe08548ec64381e41acf5997c0fb0.rb +0 -49
- data/lib/one_gadget/builds/libc-2.19-87805ebef970b79b4a1fb5facb43719a26c335af.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-887a7db21e668f6153604d9e00d1026137f777ee.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-8b05579712ebaea7cae547f4fc461c0828e9c446.rb +0 -49
- data/lib/one_gadget/builds/libc-2.19-8c5d5643cd08bc078f22310103f7c6af4ed37921.rb +0 -47
- data/lib/one_gadget/builds/libc-2.19-8cb4573f8cc3764df7570800247a76dd63d847b4.rb +0 -47
- data/lib/one_gadget/builds/libc-2.19-8d935a42f2f2a1149aa52d3098b32b1d5012cb67.rb +0 -41
- data/lib/one_gadget/builds/libc-2.19-8dbcbca713ca58e2c7e4970e8218d536154bb64e.rb +0 -36
- data/lib/one_gadget/builds/libc-2.19-8e4150ea59c3a6fdc9f001ba17274f7c48e4be21.rb +0 -47
- data/lib/one_gadget/builds/libc-2.19-8fa762223d6b8ee6d47af7455c691a5e238c8209.rb +0 -49
- data/lib/one_gadget/builds/libc-2.19-90b068141be8b0f52ef8dc93e8327cda87a632bc.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-913a7e92e674593c7e1121b0013d81e20cebe85c.rb +0 -47
- data/lib/one_gadget/builds/libc-2.19-9356622cb19154bd2d3bb21e67f188e3cc3e2902.rb +0 -45
- data/lib/one_gadget/builds/libc-2.19-95287be8acccc7b5723f4306e6a5eca6dfe7bffd.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-9a970aa5f863d2ccecd63ceef8bb57d28e55be11.rb +0 -46
- data/lib/one_gadget/builds/libc-2.19-9bf807e100d6c152efd7e845c65ecfb92e2e202e.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-9d1dd2edd9ada4b73ddc73ea10ba1c9ef0810248.rb +0 -47
- data/lib/one_gadget/builds/libc-2.19-9e817f4c472417e94d161b392e13d6aeb76f0b5a.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-a13df1fb206f167af0eef4d438f3949d80f8bce3.rb +0 -47
- data/lib/one_gadget/builds/libc-2.19-a1818c2dd8e7c4a3d4f61270b4b29330d6b51391.rb +0 -49
- data/lib/one_gadget/builds/libc-2.19-a2d884479c5c8f73fbb82e6fefa5083623826cc1.rb +0 -49
- data/lib/one_gadget/builds/libc-2.19-a3386004b2a158b95ba4c26c01e421e6c2191a47.rb +0 -49
- data/lib/one_gadget/builds/libc-2.19-a3c88cff23421ec2e3c97860bdf28868592ed14c.rb +0 -47
- data/lib/one_gadget/builds/libc-2.19-a3ebc8ad2873288cbd2a510de65161c697310e5c.rb +0 -49
- data/lib/one_gadget/builds/libc-2.19-a4b13a91fc5d961be3e1a68a30938ba840ae4290.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-a6222959a65e5367ec3f2b54d7f114f6a2c8ce28.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-a62a3aed804ccd4faac1ae52ee39165dd1cf4ebe.rb +0 -45
- data/lib/one_gadget/builds/libc-2.19-a71e7ba2ffe12012ab7e5c0ff7d83d6f627a7548.rb +0 -45
- data/lib/one_gadget/builds/libc-2.19-a7204938a680127c01c9799462c3b33035f06358.rb +0 -49
- data/lib/one_gadget/builds/libc-2.19-a77581d3046ec7a2176ba4bebc222562668d9fd6.rb +0 -49
- data/lib/one_gadget/builds/libc-2.19-a77d09f3b8cbad4c430378157308f6cb71549a5a.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-a7e2264ecf52a64ea3ab55163132240c3142eafd.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-a820f849dda0b99ed06dd59bb88404969b3a5f88.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-a9f67b66e93e0abd79f1d8028188377397e4536b.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-ab474a836c41aed0f0bad2ddc66388253bfa75af.rb +0 -45
- data/lib/one_gadget/builds/libc-2.19-ad03e0bcbda2213489f10a6bf63a7f5fe3dd6558.rb +0 -47
- data/lib/one_gadget/builds/libc-2.19-ad0ce0a6b6e201c9a8195b2d55043afcd4f5db00.rb +0 -36
- data/lib/one_gadget/builds/libc-2.19-ad91c7db0fad11b03e3ce92eda28f673cb36db5d.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-adf7d21d8b442e6b601ad3dcc180608193d2d041.rb +0 -45
- data/lib/one_gadget/builds/libc-2.19-b166aefc9dff38869ad893bea2e9ce5e848628b1.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-b2c58c0aaead4cc02a5ad606edf4284ca598c0ef.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-b32788d3f2b080bd447b295cf59ace25fbfce313.rb +0 -46
- data/lib/one_gadget/builds/libc-2.19-b4fbe819a1dc946528b4added1887eb9ca130275.rb +0 -45
- data/lib/one_gadget/builds/libc-2.19-b571f83a8a6f5bb22d3558cddda9f943a2a67fd1.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-b700a5d57528fde5c441b020bcc4e19a9099e05b.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-b71ed2c38888a9d0e2c977877193e01a64e97a5d.rb +0 -49
- data/lib/one_gadget/builds/libc-2.19-b9082b0162f9d256c1ccf28b9d35d2cce9f6a6a4.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-ba1b1c588dbf0ebb80c646060af92e5a93825fee.rb +0 -49
- data/lib/one_gadget/builds/libc-2.19-bb34f13b7ae5fe42cdd14b96dc278f9726424cac.rb +0 -49
- data/lib/one_gadget/builds/libc-2.19-bb91233a6ef2a6c754a8ff20f7ba117d7d57707a.rb +0 -46
- data/lib/one_gadget/builds/libc-2.19-bd25bd030c2467d343581ee0d8d8aa7a32c7aa29.rb +0 -49
- data/lib/one_gadget/builds/libc-2.19-bd69ec1fafeef65209d9874025fd45e093b23144.rb +0 -49
- data/lib/one_gadget/builds/libc-2.19-be4425690f42dd1807770d974ff87b88c51d306d.rb +0 -49
- data/lib/one_gadget/builds/libc-2.19-bf368b38f238cfe2c12eac2b487ee8ae58a3a0d8.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-c00c9b70ba01f92a952474258bed608c3e7be6b9.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-c0ee9400445c93ecbc8562e006a8b95ed4d07834.rb +0 -49
- data/lib/one_gadget/builds/libc-2.19-c24f77af0c861079dbcbbdf09f4b8eee8eb7130c.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-c379cc4f4e8a55319c70e4d3ce4dc2a4c30f151a.rb +0 -49
- data/lib/one_gadget/builds/libc-2.19-c40027c0c6f76c27293f7570888b9d64e1a93285.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-c41ed0ae53a1a559a44a1140c77c3b274a38e442.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-c4278754b0c28c437e1e5bd195d82b6d9e4a6d73.rb +0 -47
- data/lib/one_gadget/builds/libc-2.19-c46746723526fa9feb3cdf4218ec24c9179131ad.rb +0 -45
- data/lib/one_gadget/builds/libc-2.19-c5affb5af2f506eb7d48c471160790d4c24e81ae.rb +0 -46
- data/lib/one_gadget/builds/libc-2.19-c5e45bf4881c526999786f4dd2718042b20e582c.rb +0 -49
- data/lib/one_gadget/builds/libc-2.19-c7cab037359898862b1584a1e3c3372683daad3f.rb +0 -47
- data/lib/one_gadget/builds/libc-2.19-c83833a5f5ca5636f8f914c2c9f1726860fce8b1.rb +0 -45
- data/lib/one_gadget/builds/libc-2.19-cad76dba04139f928612ee55bf9e14b74e1b7c3f.rb +0 -45
- data/lib/one_gadget/builds/libc-2.19-cafa8de523249f48aebec877e9f45f904e4d62a4.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-cb46f5139038116d66a73281a3aca373f8ac7428.rb +0 -49
- data/lib/one_gadget/builds/libc-2.19-cb6e2a7a6812e08f621a5c6b5b3372ab5126fc84.rb +0 -47
- data/lib/one_gadget/builds/libc-2.19-cb8c8a8edf5ff17d2df7e68e63f6cb242d85b524.rb +0 -49
- data/lib/one_gadget/builds/libc-2.19-cba6f22d1ee9163390664add53a9ef135c664903.rb +0 -45
- data/lib/one_gadget/builds/libc-2.19-ce25be66ee91861336df34413f53446cb41a2601.rb +0 -47
- data/lib/one_gadget/builds/libc-2.19-cf43a056242aa025a153e4a7b6698edd7497f305.rb +0 -45
- data/lib/one_gadget/builds/libc-2.19-d06fb2560475e149d6d2401eae955164eb8262fa.rb +0 -45
- data/lib/one_gadget/builds/libc-2.19-d11506d7facb213bd2c6063f010a42fa9d723879.rb +0 -45
- data/lib/one_gadget/builds/libc-2.19-d1c6ec21d9d74bb0d866a08635b1fc075c4a2e40.rb +0 -49
- data/lib/one_gadget/builds/libc-2.19-d2b9e70520a7dbf92895b3d08c9e6a92010571cf.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-d56aa9d47cf61192f75e28fef805c0ce20502157.rb +0 -46
- data/lib/one_gadget/builds/libc-2.19-d66b201cb2987a585890d4be28cf92dad14cb760.rb +0 -47
- data/lib/one_gadget/builds/libc-2.19-d6c3d9e55db8600672a2ef744f57aa84e6bea41a.rb +0 -49
- data/lib/one_gadget/builds/libc-2.19-d80f3b321f845a71f3c47d913dd3e65152565863.rb +0 -49
- data/lib/one_gadget/builds/libc-2.19-d8adddcd7476a6b09bdf02fe1e1d73bd393b6ed7.rb +0 -47
- data/lib/one_gadget/builds/libc-2.19-d9a10b8ef90300628dd0a3a535106967714d7328.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-db3fac1541a95bdab2d9ae20bdef3c2f1c13b7e0.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-dd1b1c22eae3c8f0faa0b355bbcdca8f7c0cd91d.rb +0 -49
- data/lib/one_gadget/builds/libc-2.19-df559a150829d9f3cdd0b5ce1e5b4d512d20f55f.rb +0 -52
- data/lib/one_gadget/builds/libc-2.19-e01fa6a6b4685ecaebc6756679c283c6572eb6f2.rb +0 -45
- data/lib/one_gadget/builds/libc-2.19-e10149c2a9bf0df3c9149b351168fcd32adb41c6.rb +0 -46
- data/lib/one_gadget/builds/libc-2.19-e13d310493f24ceb84f232c5f72469cbe516d57a.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-e2773917e0ca89ebc16787d8cbc96400088583ec.rb +0 -49
- data/lib/one_gadget/builds/libc-2.19-e4c3a6a564aeddbafa8be691efffc79e755fa8a4.rb +0 -49
- data/lib/one_gadget/builds/libc-2.19-e53d50e134c10f91f8cf52b1778f85b7926147cc.rb +0 -45
- data/lib/one_gadget/builds/libc-2.19-e540f810b37a33fab5b3116fdbf8bcaacc000c16.rb +0 -45
- data/lib/one_gadget/builds/libc-2.19-e5bd51e1eefbc5c3d96a3aba4dcb50a0cec162de.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-e6ac06f6c982d98a419cec51de313ea609f2b1f2.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-e6e4c4588d098e16d0fba7e15ba9c81f294074a4.rb +0 -49
- data/lib/one_gadget/builds/libc-2.19-e70d0551a6ce8feb294de6c138135b58d8763e85.rb +0 -47
- data/lib/one_gadget/builds/libc-2.19-e806961cc6bc18acfd55df2613b100a9e733cebd.rb +0 -47
- data/lib/one_gadget/builds/libc-2.19-e882a1c9195b6bc1a62b3aeda9b63733109abd2f.rb +0 -49
- data/lib/one_gadget/builds/libc-2.19-e892e2e9d5818511e2390e642edd1d4cf2331885.rb +0 -47
- data/lib/one_gadget/builds/libc-2.19-e89b2153fd6795f03d6cd1dd789241326a7ee458.rb +0 -49
- data/lib/one_gadget/builds/libc-2.19-ebc3c6d17edbddfdcb000366fae4e7cab6ba420c.rb +0 -45
- data/lib/one_gadget/builds/libc-2.19-ecc10e3f1443d65007126bef8184ac84bfdf6b7c.rb +0 -47
- data/lib/one_gadget/builds/libc-2.19-edc2302cd47e8eedfc2e45da9fddecbdb07b4f21.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-edd5ba629053d507cb963d5269db6e7ae5bde36e.rb +0 -47
- data/lib/one_gadget/builds/libc-2.19-f3a1e60201c31bb9fef972279d08dfc33dbb3ce9.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-f5c375701c2c4406306201e19b42521f504175ec.rb +0 -49
- data/lib/one_gadget/builds/libc-2.19-f5e1349016d93661914069bcc7254e702434e445.rb +0 -49
- data/lib/one_gadget/builds/libc-2.19-f6248141094bb965d660fd2ce31d8534593c1003.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-f6ba6844f5bba0603e13b577328b9f326d4fef8a.rb +0 -45
- data/lib/one_gadget/builds/libc-2.19-f8cc1a32de8229e21b61215844be0462c6ac49a6.rb +0 -45
- data/lib/one_gadget/builds/libc-2.19-f9b5531180de2f0ce620bc03b5fc4d7f8570fd18.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-fb899b514fa6763ad006688efb32ecf9ca691ff3.rb +0 -49
- data/lib/one_gadget/builds/libc-2.19-fd5df0d8007d692d1c00226f81ba04b4f734b5b2.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-fe493bf9ecadc1f26aa36d4a95c718e9f227ad3a.rb +0 -50
- data/lib/one_gadget/builds/libc-2.19-fe76e177d397e9bdccf270232cc7e3a06e84aeb1.rb +0 -49
- data/lib/one_gadget/builds/libc-2.20-024df4febc9c789a8eeb052385d5e780b98a379f.rb +0 -48
- data/lib/one_gadget/builds/libc-2.20-074a896d13132ebfb22b89fd4d026b8608b84d01.rb +0 -46
- data/lib/one_gadget/builds/libc-2.20-0a1de0cc524dacd5b00c678daf50dde4d4539203.rb +0 -46
- data/lib/one_gadget/builds/libc-2.20-22fcfb6d820fec1bd07ebc3506236a1c10d2a74e.rb +0 -46
- data/lib/one_gadget/builds/libc-2.20-317589ae8050581abdfc414151c4655abc3cdfcd.rb +0 -48
- data/lib/one_gadget/builds/libc-2.20-370ce0ece788e8e73d938f2fb3ce6adb890eb417.rb +0 -48
- data/lib/one_gadget/builds/libc-2.20-389e645d86ab23c5f6acd039caacb18a02c3cfa2.rb +0 -46
- data/lib/one_gadget/builds/libc-2.20-398115bd423958b1769317a6f7e4928df141eb57.rb +0 -46
- data/lib/one_gadget/builds/libc-2.20-62fa1628ae33cc45efe8313a24ec8c475c9dffa6.rb +0 -46
- data/lib/one_gadget/builds/libc-2.20-6daaba13e3623d964ca116f91948afc5231732a8.rb +0 -48
- data/lib/one_gadget/builds/libc-2.20-765f172661014a4db8bb05b203bbc07c8686aa25.rb +0 -46
- data/lib/one_gadget/builds/libc-2.20-8bb8c78658cc612de895ec59a8026a08c86662e5.rb +0 -46
- data/lib/one_gadget/builds/libc-2.20-a8e57776dcdd5da9b7c9f60e65d28eaeb5b8173f.rb +0 -46
- data/lib/one_gadget/builds/libc-2.20-ad272c3f76f36f4fe1357514d4b207a06f7f536c.rb +0 -46
- data/lib/one_gadget/builds/libc-2.20-aefe2d045393dbe3e0a2acef88b6f31a78d3a27c.rb +0 -46
- data/lib/one_gadget/builds/libc-2.20-b1217615db4b7a86b90436982610bf86a03ca881.rb +0 -46
- data/lib/one_gadget/builds/libc-2.20-f3063b7115d5a383189937852ce356f4c60fd190.rb +0 -46
- data/lib/one_gadget/builds/libc-2.20-f53b8ad377a1988dcf6329bbdfa7b1201431656e.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-04f18629ef42b062ed0c8f60d5bfaa40a7d28ef7.rb +0 -52
- data/lib/one_gadget/builds/libc-2.21-092fa8483d177952f4b38a4b9be8305baef60466.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-096d4c9ce21618defe0b3e4694dc5380e0189009.rb +0 -51
- data/lib/one_gadget/builds/libc-2.21-13495a0bf9fc076d41056041922792ddb58ac456.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-169a143e9c40cfd9d09695333e45fd67743cd2d6.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-1800fb8ed39680604091e8268cd21cb8ee6f747f.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-185ab573783653be4ea1784a59be3a1499ca64c7.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-1a266f551f39283eff85f4ab8913d8b6d57fb290.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-1dfdbdb3ed58b70e07e1a94ff3e95d84652cb0f1.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-1ee253f6aeaec7a001984e257b86ad7224e46469.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-20b088455f100a9a72e94a69e843b6e0831cbedb.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-2466292818ad2b41c64ea7107123fe96010e1b96.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-24c3f01054f36f8184ba673743310b5178354334.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-25dd428fb4c350c16dfee20491f1a06484a2bfa3.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-2c092eb4091e8d3a20313a09194418595efca9db.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-2e9718e58257bda1dc0d751665a3ee233bf606f2.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-3141017330a2057c655dcb61bd3d9b2c98399181.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-39f1a0bc7f66ea42f3341c0d629bae8caef2346d.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-3af67b618c87a9cfadcf4be33331e34f77f5c842.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-3b9bef61c919475929cfcc3608bdadb86c3b1c6e.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-3c9e3250b31dfe4b5e139cda266e7beabc47e504.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-3eab56f86f3ee1745baa9e6fa771e652340487cc.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-3f08a19432b31835c71ea7d5b3687562cef053e3.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-3faf7b9bab86ba7024b62d99c859136333b8a70d.rb +0 -42
- data/lib/one_gadget/builds/libc-2.21-3fc95a6cdd31b66c550d64d90d0431f68ed43571.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-41530fe252a0d5854827649ddf6e2c8fba9d1653.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-4a0864552f6b027689c7a69efa12e277009c5999.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-4b7de972132a4762898ccb1210ffb7cfc0e6f14e.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-4ce84d266a07230287b230ac4ce8ba2d2f3f854e.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-4dec520cda38e785c80e30db8fcd5428cee0f324.rb +0 -42
- data/lib/one_gadget/builds/libc-2.21-4f14eb66c408453973042c95d25f4e014bf4e364.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-503c5dd98cc9529359e601c1595c995cf359df30.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-505a88bc8f93a7ba339895ce27dc4ad8331cad7d.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-53377f31675a81af793df0c63b40e193a4a6999b.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-53b6f3047638b0703bf1091fe4c3afe79445d546.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-570c7051e379d909016cb81933bc5701daecd428.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-591e5a56f9d466a7c70baf6684d99843ab8c45d1.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-59b7200857a55acdfa5de730a573eed0cfec0962.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-59c981c8e0e729ae7c562daa00be2cdb8e0c090a.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-59eae8a903584dcbc14cf07c719cd23b9f65e230.rb +0 -49
- data/lib/one_gadget/builds/libc-2.21-5a22b7ec63fd7c5dc6a92875046515f4beac727d.rb +0 -42
- data/lib/one_gadget/builds/libc-2.21-5c9f149296e581c181529723f7eb44bf10a7d746.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-5ccd94c4e3483df05be240ff1fb8a3f53794cc6f.rb +0 -49
- data/lib/one_gadget/builds/libc-2.21-5f977df2af6a6a25e48e60dd867680d79dc6da8e.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-60e1d8111d5fec5580da9105670e78a63287732e.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-629ae1554ea01c67fdedb7874de4686f6c30b6e3.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-63c3d4b45af73dff54258c5a5cab9e3d828cc766.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-64125575d05a0aedbfe187ef0f95431229c5aac8.rb +0 -42
- data/lib/one_gadget/builds/libc-2.21-6980ac7f9370d2bbb2aade5ceeedc8afc4f02f3e.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-7b173624b62ee3bd8049bdeaaff990839eb4cb36.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-7d672538d6a08ce14e4bd6e931392bf63156f490.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-7f4a3fabc90bc1e410fe6377e2a1826d426c8f57.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-80e8cfbc6550fde842cfb72ba97d916827d462df.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-82d7d2a5db69a59c01ca5d2a63250ca6a6bd08a3.rb +0 -52
- data/lib/one_gadget/builds/libc-2.21-834a46faae116cb9500c57d6c06e701f98a52e2e.rb +0 -42
- data/lib/one_gadget/builds/libc-2.21-83d46f5dc4d7894ea923bf566f6b38bfceedc6e1.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-847fa75888ee989393032f4ae5a133902df3e2cb.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-8626995277c9a0db7fec384061c564c3ea50eeae.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-86d752d92fbf1e8b558018e4b122dab52b304ab6.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-879c9c4ffc5aabfd0a9c9d1b1c73d5f1df969aac.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-87ded6f6ac3f40a59e17170307d0b15c1170552c.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-8acd43cf74a9756cd727b8516b08679ee071a92d.rb +0 -49
- data/lib/one_gadget/builds/libc-2.21-8e845b188299cb419b70cf5de27c22a50f776fce.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-924acd9c6de558f26574bdc2eaa3048b597f2e5e.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-93d704dff1ec8dceb660b58863d2a36afd52b66e.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-9595d37f80a7925dc75efa522c839df34edb4b46.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-9ac81172d5ff96f40d984fe7c10073a98f1a6b2e.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-9c764e8fb2df1bccb33ffedd92cd8659aab98e33.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-9cf342a68f1a7b4b6ba4df62667c5f4ee8cf7687.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-9d0884395161c74567d7fea747e15c9a31785e06.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-a0ccdc12ed6ad0d67778aff9b49abc3c8eb30b9a.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-a167f5367b27f9493cefac9b23e68f180239e96c.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-a1f20771562e9a58f6d2746d38a09694d4cbc345.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-a235f288513fa6064a856c499e0453f9f4a44f8a.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-a5c1de4517ba044d2f7cfa479e69f29bbc673c6a.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-a890a8ee268f8ae36ae0810b6eea7c45766b4133.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-a9274e5d52fbb32ba32bae055f69ba1741771e79.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-ab066cff9171d55efb0dd884d31c18682ae6922b.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-af2daffab6880d8bc68db4143643c132164dc7ca.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-b180bd3047be9b4b70fb28455365546001b76e85.rb +0 -42
- data/lib/one_gadget/builds/libc-2.21-b440183d6aefac5a9259f6e2de824e43e85ed341.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-b551bf2740c7e79d1722776a6e0d35d65885d037.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-b7ac9e99f0fc2fb83f98b6a01615c0508de638a8.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-b8c6428b947bad767595961d6cb907493073183c.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-b8daa3ddab3acf64323b47fee32338d5c9591c4d.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-bbfccd958f34a2292058d60a0ddf19e1fcd4ec1e.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-bda2fd9acb85c5de61a1d4c7e2098fce25f3199f.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-c164b79c008a3ad0c2f0277688274a0c3c98e79b.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-c2f12c8aed093770731d57b19dc039c32423246b.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-c3318940121036465913d946fa62fef61459b68a.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-c4969c549a0d0099304108e50a77ff68602ed922.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-c51ca19ec6c53db97a15c67eea8ed00761570689.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-c601601a621be82612e36dd2a981121c141c72c9.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-c6654d8229ff494d5b5c067e8a1dbf184fcdd57d.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-c91d043eaeb023885cdd80a3c0872d9fde9867bb.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-cb732feec2d8bae5ebb5d072a86cd31aca65f89b.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-cf580407d98ed9bec9c92c1ae2241eca8604e4d5.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-d0cbed817be7f8947339e1796d1964567e9dfe96.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-d1c4dd44416a5a2781b37f7d9111961c8dc58583.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-dc53884306f13d86e310d893433556d93ef7facc.rb +0 -49
- data/lib/one_gadget/builds/libc-2.21-dc70ee31ce02e89d989cb38dc885438e19dc5919.rb +0 -49
- data/lib/one_gadget/builds/libc-2.21-e174b9dc46c7d38d1f153f2a4f9c059484042cdc.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-e3a06c9d90272ed9dd49863667de02579971fefd.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-e6f442dc2d29e0e16cd34dc787d3c95fafeb90cc.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-e91a3a679d219196e597358caa46469961c471fd.rb +0 -42
- data/lib/one_gadget/builds/libc-2.21-f08b44317fec610d418f62d5d24fafaec0510353.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-f0c24219cbba0605e39e02123398437c5dbbb104.rb +0 -51
- data/lib/one_gadget/builds/libc-2.21-f233903e448d3ae08e72a23b0e742ecfc8b6ccc1.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-f5043f1299e2b98ddf8a1ba08f731f260492601a.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-f9e9b2f3225a520c823f0d81aea92a3dacfd621f.rb +0 -46
- data/lib/one_gadget/builds/libc-2.21-fe668be19c2dadb3cef5e6eafb6796acabf0b8f1.rb +0 -49
- data/lib/one_gadget/builds/libc-2.21.90-d8785e62882096798b9a47645c401e2db0c3da87.rb +0 -54
- data/lib/one_gadget/builds/libc-2.21.90-ec2edee6fe6141b914f74b6d3541e986c1995420.rb +0 -54
- data/lib/one_gadget/builds/libc-2.22-056b23405739592e947a92cb210791fbfe9d9938.rb +0 -52
- data/lib/one_gadget/builds/libc-2.22-057feedce849edba19d94bf3920903b4c297e249.rb +0 -52
- data/lib/one_gadget/builds/libc-2.22-06a01f4986991b8605b775bd21c3829c071c7e01.rb +0 -46
- data/lib/one_gadget/builds/libc-2.22-07627a0a76d4347858dc9b2533aac197920feb67.rb +0 -42
- data/lib/one_gadget/builds/libc-2.22-079d0ce21fe81c5c95f687db4b944d28c121a849.rb +0 -52
- data/lib/one_gadget/builds/libc-2.22-0f1e39397cbf59f35018306725336d275b33fad6.rb +0 -46
- data/lib/one_gadget/builds/libc-2.22-111a78efce1a05c176c84381f9a8687564c124dd.rb +0 -46
- data/lib/one_gadget/builds/libc-2.22-11c38e8940f7cd6be485bf6903fdb169d71617dd.rb +0 -46
- data/lib/one_gadget/builds/libc-2.22-121137de182d11744ae6be8683de568a64edca7f.rb +0 -46
- data/lib/one_gadget/builds/libc-2.22-124cbcd567a508befc4d08238d209749a6f81ef6.rb +0 -46
- data/lib/one_gadget/builds/libc-2.22-13fbe87df7583cb37d64da775d5298d139d6c645.rb +0 -46
- data/lib/one_gadget/builds/libc-2.22-142110382cc91407cee827f639c811fa41aad081.rb +0 -46
- data/lib/one_gadget/builds/libc-2.22-157a6d46c53ff9cd3176239d342644bd34cc9e6a.rb +0 -46
- data/lib/one_gadget/builds/libc-2.22-172387e0713d81467e907f48691fd8a3a9d9b745.rb +0 -46
- data/lib/one_gadget/builds/libc-2.22-1853ca84fd72235c89ca6c71dc2fd586035fb508.rb +0 -52
- data/lib/one_gadget/builds/libc-2.22-18c9fd18d79dce6408c752dc974b0b895286f861.rb +0 -46
- data/lib/one_gadget/builds/libc-2.22-190d9018168d767820b7fc6fac5cb62d1a40d819.rb +0 -52
- data/lib/one_gadget/builds/libc-2.22-1c3905611074ae1c586d90e5312e49817dfb1454.rb +0 -46
- data/lib/one_gadget/builds/libc-2.22-1ef0e3b0b75b086f54c2fb8ad958db46c199de28.rb +0 -52
- data/lib/one_gadget/builds/libc-2.22-20d1cd3333f60c045ee0d71cd32ac74a6b721b85.rb +0 -46
- data/lib/one_gadget/builds/libc-2.22-22585efc70794668f1b7f01f4392daef49f476e0.rb +0 -46
- data/lib/one_gadget/builds/libc-2.22-263aaed35e720148fbc396f8311138d46d099d7e.rb +0 -46
- data/lib/one_gadget/builds/libc-2.22-26ce2dab7bee96ee1c9d290100ffae593a644ddf.rb +0 -42
- data/lib/one_gadget/builds/libc-2.22-2881424e7394f45d7b7e4b9d7bee0ac3336fb53c.rb +0 -42
- data/lib/one_gadget/builds/libc-2.22-291a696d50e945b55f27ad1b7055adb4d94d611e.rb +0 -52
- data/lib/one_gadget/builds/libc-2.22-2da1c94523e9778bedccac2922cdb5582b3bab99.rb +0 -52
- data/lib/one_gadget/builds/libc-2.22-34701c7aa9501f113595ba20117d03fbab4a7edf.rb +0 -46
- data/lib/one_gadget/builds/libc-2.22-34a1e432068988d1d05ded9a1ff3a5a4d9ba957d.rb +0 -46
- data/lib/one_gadget/builds/libc-2.22-35dad9bbfda68f466fdb0784359dfa8be8f2e636.rb +0 -46
- data/lib/one_gadget/builds/libc-2.22-372f377ce426f864bf68f2a32cd703d595664885.rb +0 -46
- data/lib/one_gadget/builds/libc-2.22-37acef3594b4fbe5bdb37cfab88155ea223bac9d.rb +0 -46
- data/lib/one_gadget/builds/libc-2.22-3d8a83ac6553abcf5e18c10a39e5020352cf1fb2.rb +0 -52
- data/lib/one_gadget/builds/libc-2.22-3e86d1920edbc9fb506c499301164f3920a3e141.rb +0 -46
- data/lib/one_gadget/builds/libc-2.22-461f342f6e88de1977eb60aecd9554335b3602be.rb +0 -46
- data/lib/one_gadget/builds/libc-2.22-49c585626bc777823124cce965150be221723855.rb +0 -52
- data/lib/one_gadget/builds/libc-2.22-4bccfeb62282482e2bb5fe47523cc26cc9891d9d.rb +0 -52
- data/lib/one_gadget/builds/libc-2.22-4e7b4e6104632c48765f27c7e53ce073c73b03c2.rb +0 -46
- data/lib/one_gadget/builds/libc-2.22-515163d8d5ee351c62d0ef6438b1cb492b882128.rb +0 -46
- data/lib/one_gadget/builds/libc-2.22-53e3e8ce017c356969e16f4bb329fc45e948a045.rb +0 -46
- data/lib/one_gadget/builds/libc-2.22-5f40eb5a5f32b9824ba0cb2547ffb2b6964f6414.rb +0 -46
- data/lib/one_gadget/builds/libc-2.22-6281300a16a309db14773233ab085dadc65f0081.rb +0 -52
- data/lib/one_gadget/builds/libc-2.22-6293d42412b9a87b7233bcb5f5cbf4496c8c90dd.rb +0 -52
- data/lib/one_gadget/builds/libc-2.22-661a81563d20e7823c63828ff38348ec1b80adcc.rb +0 -46
- data/lib/one_gadget/builds/libc-2.22-6670937bc44571ec34ab812a7a7d2ce839a382ad.rb +0 -46
- data/lib/one_gadget/builds/libc-2.22-669abe13c2975dbdc59eb4cf3a6e9bd28ecd376c.rb +0 -52
- data/lib/one_gadget/builds/libc-2.22-66b3470fd1603fc11a54f8f1c69b81d85f2f0074.rb +0 -46
- data/lib/one_gadget/builds/libc-2.22-67222017b4ae03b81a41387cb81b0814654e2dd6.rb +0 -46
- data/lib/one_gadget/builds/libc-2.22-6758f608b9326b54464784a72149d9991ce839d1.rb +0 -46
- data/lib/one_gadget/builds/libc-2.22-68afe0b2e7d234d495d38ec6bf35257a42f229de.rb +0 -52
- data/lib/one_gadget/builds/libc-2.22-695c07ac1193aad1d8ee9871ee425e5653408a4d.rb +0 -46
- data/lib/one_gadget/builds/libc-2.22-6c9019c65a7a835172e1e88ca2f88d1f14fb23e1.rb +0 -52
- data/lib/one_gadget/builds/libc-2.22-765dbc5efb8e378d36cd0742b6e5a65bd9046168.rb +0 -46
- data/lib/one_gadget/builds/libc-2.22-775336aa55e307ff5c730b375f8220b85ede2e34.rb +0 -52
- data/lib/one_gadget/builds/libc-2.22-7d3f57aba43d34ae3cfab2df04a3050efbd1dfed.rb +0 -46
- data/lib/one_gadget/builds/libc-2.22-84681ac612616253b2eb8e99e1b68836b7d68cac.rb +0 -46
- data/lib/one_gadget/builds/libc-2.22-87066f8392926c00ab4a5969f52aade616c1e314.rb +0 -52
- data/lib/one_gadget/builds/libc-2.22-871cd1cac63b0dcd8f2cdd231291f9f89fe7c099.rb +0 -52
- data/lib/one_gadget/builds/libc-2.22-87e1ed146ef347cf326650e230524a6c8d4ed43d.rb +0 -46
- data/lib/one_gadget/builds/libc-2.22-8c48d3a9f8dea201de2948aa7f78c6a42ffa47cf.rb +0 -46
- data/lib/one_gadget/builds/libc-2.22-916b3d65c4f43150dea643a905c1a2a68efc3fb6.rb +0 -52
- data/lib/one_gadget/builds/libc-2.22-91dee95c3183246a5332357b814a08ba9c05d999.rb +0 -46
- data/lib/one_gadget/builds/libc-2.22-91fcf48a9dd99f320b205a2feef18c2edfdbaeba.rb +0 -42
- data/lib/one_gadget/builds/libc-2.22-92f57ef98cf5dc8e4d6b5df5cd1b9260b7e9975a.rb +0 -46
- data/lib/one_gadget/builds/libc-2.22-94075f4ca5cff8f90934c9e1706db8022e7d4ba1.rb +0 -46
- data/lib/one_gadget/builds/libc-2.22-94140487ddd020e65cb6c3f9ae09275ca91dc47c.rb +0 -46
- data/lib/one_gadget/builds/libc-2.22-94b271ac2dedc103ec8d042bb40a418a042dceb9.rb +0 -42
- data/lib/one_gadget/builds/libc-2.22-9686e55d792fbbcc0ae8589a69c8b15d2444ac65.rb +0 -46
- data/lib/one_gadget/builds/libc-2.22-a352f9564e9d19391f222c67e5c64e09f949df4e.rb +0 -42
- data/lib/one_gadget/builds/libc-2.22-a506f6e38353adbb19bd22872b2fa8831c32c63d.rb +0 -52
- data/lib/one_gadget/builds/libc-2.22-a5a6daa9eb710b5fc311bdd17696bb25e98d9dab.rb +0 -46
- data/lib/one_gadget/builds/libc-2.22-a61e9f882f22a77b803a1fa28912b2636913ea56.rb +0 -52
- data/lib/one_gadget/builds/libc-2.22-ac771fb8769897775bb6df04fe982d7a79684c8a.rb +0 -46
- data/lib/one_gadget/builds/libc-2.22-b213a4604fc2c8fd113ae890a97c3c2ad4022ceb.rb +0 -46
- data/lib/one_gadget/builds/libc-2.22-b916e3c1d80069d0209f6376b33e42b75ec49eda.rb +0 -52
- data/lib/one_gadget/builds/libc-2.22-b941d9b157b159697c7cbfa154c410b23be1a7af.rb +0 -42
- data/lib/one_gadget/builds/libc-2.22-bdbc01430dbd0c80011dea9852f3ae257bcf3138.rb +0 -46
- data/lib/one_gadget/builds/libc-2.22-bfdfa3833107e0041ab896c1dbfd0a4f1c4fec77.rb +0 -52
- data/lib/one_gadget/builds/libc-2.22-c2931cdba68412c1b871f960b4005f70847b29c3.rb +0 -52
- data/lib/one_gadget/builds/libc-2.22-c65d9bac0e2687bd08337088466a686c40479e5d.rb +0 -46
- data/lib/one_gadget/builds/libc-2.22-c6799f7a3df15cf4c4b5c273686e7cb3283e0337.rb +0 -52
- data/lib/one_gadget/builds/libc-2.22-cb354ede0283a824c81183b1ffb6add90255edb6.rb +0 -52
- data/lib/one_gadget/builds/libc-2.22-cee6e82b12f7c94f715fc96dcd4544a44997dbb5.rb +0 -46
- data/lib/one_gadget/builds/libc-2.22-d0516d4ba12ccc659906a5f122f8637279970bf4.rb +0 -52
- data/lib/one_gadget/builds/libc-2.22-d088eee45f6cbd649b53ae99b68a91823d86c6d6.rb +0 -46
- data/lib/one_gadget/builds/libc-2.22-dcc06a908986f225fded745f7f884bf50fd5b434.rb +0 -42
- data/lib/one_gadget/builds/libc-2.22-dd900e0adc14d176fe33f2b6e5d8dbe2bacb48d0.rb +0 -46
- data/lib/one_gadget/builds/libc-2.22-e1d7f9459324fd489e82a931f9bbe3b10cfc4436.rb +0 -42
- data/lib/one_gadget/builds/libc-2.22-e259f9732c7269eccd67dc7f8bbceded2a909972.rb +0 -52
- data/lib/one_gadget/builds/libc-2.22-e7e6d42611b69819d39439c2ee93305f6305ed90.rb +0 -46
- data/lib/one_gadget/builds/libc-2.22-eb0fe6bc985d025bfeeb207924823e7c2c7a77e6.rb +0 -46
- data/lib/one_gadget/builds/libc-2.22-eb2c0cc31e0d158b487d1010b30fa7ed358fcbd7.rb +0 -42
- data/lib/one_gadget/builds/libc-2.22-ee60bf5cd327f0aa534fd8c37a8733e942707a0a.rb +0 -46
- data/lib/one_gadget/builds/libc-2.22-efd6084786349d5763237b1caeb3d5d9f61dce75.rb +0 -46
- data/lib/one_gadget/builds/libc-2.22-f21f4b63fbd354522a1c37a982da46973b6a95ef.rb +0 -52
- data/lib/one_gadget/builds/libc-2.22-f43f58b45b8c7fe20d3c3c9f812f50a7755615d3.rb +0 -46
- data/lib/one_gadget/builds/libc-2.22-fa6cf8c4105217d0cf2609ab83ec3c9d4d3c5d41.rb +0 -46
- data/lib/one_gadget/builds/libc-2.22-faef9af5a88432766d76d7da2cf961c75b6e0e0b.rb +0 -52
- data/lib/one_gadget/builds/libc-2.22-ff7fbdaaef014460825b4ef5848e86834aa3880c.rb +0 -42
- data/lib/one_gadget/builds/libc-2.23-012683a92d161c37d51d89711c4870ba30904c3d.rb +0 -46
- data/lib/one_gadget/builds/libc-2.23-088165fba081e659b7ea6463eab7bcac70363656.rb +0 -46
- data/lib/one_gadget/builds/libc-2.23-088a6e00a1814622219f346b41e775b8dd46c518.rb +0 -46
- data/lib/one_gadget/builds/libc-2.23-0ae3de55854513a2a7d4979337176c0717efce8a.rb +0 -46
- data/lib/one_gadget/builds/libc-2.23-0c23056feb23daf0cb1d2f90e153b5f892df83c6.rb +0 -46
- data/lib/one_gadget/builds/libc-2.23-11ae3441756e6c2ebf5c962434bf9f07b3ea3deb.rb +0 -46
- data/lib/one_gadget/builds/libc-2.23-131c254aed46e6a24cb08f3abe802ea0ef50e5f9.rb +0 -46
- data/lib/one_gadget/builds/libc-2.23-1800a4bdb0c42a7bb7a570ed90724fa04de8a4fe.rb +0 -46
- data/lib/one_gadget/builds/libc-2.23-18f761287ed46e213bec29c2e440e73fd72373be.rb +0 -46
- data/lib/one_gadget/builds/libc-2.23-1b1d19add6d861e16e04e4b8e9864a7bc16c1327.rb +0 -46
- data/lib/one_gadget/builds/libc-2.23-1ca54a6e0d76188105b12e49fe6b8019bf08803a.rb +0 -46
- data/lib/one_gadget/builds/libc-2.23-1e80992437b5e1cb76bf56605ee8991e76e85f69.rb +0 -42
- data/lib/one_gadget/builds/libc-2.23-1f1cf1c7ff279aa37add352423fd850e06be1098.rb +0 -46
- data/lib/one_gadget/builds/libc-2.23-2052ef79d1bb69a8f5c5340eee984f2659b75e39.rb +0 -46
- data/lib/one_gadget/builds/libc-2.23-233dde1d38ecdc54bef352f1b5ee4e007ec9df26.rb +0 -46
- data/lib/one_gadget/builds/libc-2.23-2891dc7656eed3d8d4f255c41ca6a28caf532079.rb +0 -46
- data/lib/one_gadget/builds/libc-2.23-29e38445a740bba5a77b86691e3c51a7e48dc79b.rb +0 -46
- data/lib/one_gadget/builds/libc-2.23-2aedae2bb27ac85cf14c36da79747dd88bb2b633.rb +0 -46
- data/lib/one_gadget/builds/libc-2.23-2c4ed1bebc9ede033fbbb422f84da9a93cacd88e.rb +0 -46
- data/lib/one_gadget/builds/libc-2.23-30773be8cf5bfed9d910c8473dd44eaab2e705ab.rb +0 -49
- data/lib/one_gadget/builds/libc-2.23-336976f90c600be7c95a68be6c2f0652cc22347c.rb +0 -46
- data/lib/one_gadget/builds/libc-2.23-3612e20f3e2705dcf8fd81ac494a0e20b9e16764.rb +0 -46
- data/lib/one_gadget/builds/libc-2.23-369de0e1d833caa693af17f17c83ba937f0a4dad.rb +0 -49
- data/lib/one_gadget/builds/libc-2.23-39fa51127c50ad10c32a19e0a1a587a05b8d450b.rb +0 -46
- data/lib/one_gadget/builds/libc-2.23-408d0e9e7720923def88a5aea9988cbaa0142b64.rb +0 -46
- data/lib/one_gadget/builds/libc-2.23-414c35398dffe74ac9ed945e176d8fd99446d9de.rb +0 -46
- data/lib/one_gadget/builds/libc-2.23-49bd3f83d9b34b9f043e68624271c5ef90820021.rb +0 -46
- data/lib/one_gadget/builds/libc-2.23-4df2711ee6c911fe238cf10f43b08099201e57ec.rb +0 -40
- data/lib/one_gadget/builds/libc-2.23-54128118082b61b311247f8fa6672b8df938748a.rb +0 -46
- data/lib/one_gadget/builds/libc-2.23-5d45b750d14b7b6ea11c2b57c73746b61592437b.rb +0 -46
- data/lib/one_gadget/builds/libc-2.23-5d511bfe32efcb567933d13ab9dc87f0a02d3651.rb +0 -42
- data/lib/one_gadget/builds/libc-2.23-60ea46dff84c256650d44c1a32ca609168bee1a6.rb +0 -46
- data/lib/one_gadget/builds/libc-2.23-635101aec7213fdc442419bf65a92047a862ff32.rb +0 -46
- data/lib/one_gadget/builds/libc-2.23-6462f7cc95a34bd03f42ad150211db68fcf27d44.rb +0 -46
- data/lib/one_gadget/builds/libc-2.23-697f7d05a70ecde852a2eed480bea6a6779b4a27.rb +0 -46
- data/lib/one_gadget/builds/libc-2.23-72ac40020fbf2b0b6a16b5ff4e0efdff1e71fa92.rb +0 -29
- data/lib/one_gadget/builds/libc-2.23-7598dcdd3567efa7befebc6d97977e83d758c649.rb +0 -46
- data/lib/one_gadget/builds/libc-2.23-78e2b4f1945abc8f1db6d82acf6d1ef593d01e06.rb +0 -46
- data/lib/one_gadget/builds/libc-2.23-89cc3bb9361ad139a1967462175759416c9dc82b.rb +0 -46
- data/lib/one_gadget/builds/libc-2.23-8b51f0e99fae7170859f393ba0118cc955c337b9.rb +0 -46
- data/lib/one_gadget/builds/libc-2.23-8c436e0b35bb19702fba4b5effb3f94edecc3c46.rb +0 -45
- data/lib/one_gadget/builds/libc-2.23-8ccf267bc9d0f4706559d85cbeb704782dae9ede.rb +0 -46
- data/lib/one_gadget/builds/libc-2.23-946025a5cad7b5f2dfbaebc6ebd1fcc004349b48.rb +0 -40
- data/lib/one_gadget/builds/libc-2.23-94ab3e046784e5da65532a9aded8555c3bdc3778.rb +0 -46
- data/lib/one_gadget/builds/libc-2.23-9600225be309ec27d01385dd52df9196e86ed3c0.rb +0 -46
- data/lib/one_gadget/builds/libc-2.23-961068caa1dcd5005b27c7c6abe32e94102eae3f.rb +0 -46
- data/lib/one_gadget/builds/libc-2.23-96f8c796364693379a2a0c753133fecbd1c52434.rb +0 -46
- data/lib/one_gadget/builds/libc-2.23-99de357f509368d89f95b0e92b0d5227e8b8addc.rb +0 -46
- data/lib/one_gadget/builds/libc-2.23-9a6b57c7a4f93d7e54e61bccb7df996c8bc58141.rb +0 -46
- data/lib/one_gadget/builds/libc-2.23-9e85392b0c4e3e2c8fdc063dfda4c3d0e0156e54.rb +0 -46
- data/lib/one_gadget/builds/libc-2.23-a594a9c73a6067ab00a0f8db78d665be147acdc1.rb +0 -38
- data/lib/one_gadget/builds/libc-2.23-a6fe771348e04d552fa1e6dcaf610699719bdd0e.rb +0 -46
- data/lib/one_gadget/builds/libc-2.23-a71b122dbcd9503767b6f176d7745749fb4aaf89.rb +0 -46
- data/lib/one_gadget/builds/libc-2.23-ac333186c6b532511a68d16aca4c61422eb772da.rb +0 -46
- data/lib/one_gadget/builds/libc-2.23-b078f2c07ab3751dbcbc3fbd2a11a8a162c35576.rb +0 -42
- data/lib/one_gadget/builds/libc-2.23-b2994712adbb4db7b768554149443ddee829cb91.rb +0 -46
- data/lib/one_gadget/builds/libc-2.23-b5381a457906d279073822a5ceb24c4bfef94ddb.rb +0 -49
- data/lib/one_gadget/builds/libc-2.23-b8aaf9d529588ee96e6e399ab8a15cbd58ab8b54.rb +0 -46
- data/lib/one_gadget/builds/libc-2.23-b978afd6ca2cf3f8768d6055581ece3c3e7d7b27.rb +0 -46
- data/lib/one_gadget/builds/libc-2.23-bde4e8b0230b1b474cd8a1ca6e9f81bb2b438914.rb +0 -46
- data/lib/one_gadget/builds/libc-2.23-c0a199289365088782dcaceab6a81721d0d8ae0c.rb +0 -46
- data/lib/one_gadget/builds/libc-2.23-c0cc47b9f732f8150eb2bbfb18d0d60a7b3564a9.rb +0 -46
- data/lib/one_gadget/builds/libc-2.23-c4fd86ec1eed57a09c79ce601f6c6e3796f574df.rb +0 -49
- data/lib/one_gadget/builds/libc-2.23-cbfa941a8eb7a11e4f90e81b66fcd5a820995d7c.rb +0 -38
- data/lib/one_gadget/builds/libc-2.23-d10743a8f3a9a7a2e9807b1af78026c0b5363f6b.rb +0 -46
- data/lib/one_gadget/builds/libc-2.23-d10fbfd9328f5ffaca50aa93562cb3bfb618fbcc.rb +0 -46
- data/lib/one_gadget/builds/libc-2.23-d1df77a9cc06ba60c213852b01bc24282e49696a.rb +0 -46
- data/lib/one_gadget/builds/libc-2.23-d26149b8dc15c0c3ea8a5316583757f69b39e037.rb +0 -29
- data/lib/one_gadget/builds/libc-2.23-d2be9dbf540a6ca8b559ddfbd17f47b53e84ba8d.rb +0 -46
- data/lib/one_gadget/builds/libc-2.23-d61f734abbd95e2ddeab19046141020d00aa2aaf.rb +0 -42
- data/lib/one_gadget/builds/libc-2.23-d67449e7e9672f074e72fd37ffa9335c6c483bc8.rb +0 -43
- data/lib/one_gadget/builds/libc-2.23-dcd02728e55c40d4a4b0d1482abe75cf2b853c2e.rb +0 -46
- data/lib/one_gadget/builds/libc-2.23-dd5192a769e33ed6ca68a6ab5740ff9e8ec678a7.rb +0 -46
- data/lib/one_gadget/builds/libc-2.23-e388b883ef50189a2eb5e6c7931c52e03761a7fd.rb +0 -46
- data/lib/one_gadget/builds/libc-2.23-e7b96675bca2ca2e2e746ebcb706d9236178564c.rb +0 -40
- data/lib/one_gadget/builds/libc-2.23-e7c57c7dc7a4d8ca964993f19fd8b0fc4f72b617.rb +0 -46
- data/lib/one_gadget/builds/libc-2.23-e8df4c3d58e99c87f9b22655e9180c7ac31cb44f.rb +0 -46
- data/lib/one_gadget/builds/libc-2.23-edceed30099baad51871c5fc277daf9b74dc726a.rb +0 -46
- data/lib/one_gadget/builds/libc-2.23-ee0b5a0f65e25f536a868d84e1d912403b56e742.rb +0 -46
- data/lib/one_gadget/builds/libc-2.23-ee525f6c9b018c094beedd17b87a4573d7ea7e2e.rb +0 -46
- data/lib/one_gadget/builds/libc-2.23-f0c2e03955a845c9a7f9c85228b12c9700d66c50.rb +0 -46
- data/lib/one_gadget/builds/libc-2.23-f202f01f10e845e14e7d8ca44cf5d9e4742fca6a.rb +0 -40
- data/lib/one_gadget/builds/libc-2.23-f2f2f2af4f3e8597cca1fdff1008a834c78de42b.rb +0 -46
- data/lib/one_gadget/builds/libc-2.23-f303ce47c562225a4f3475170333494965760a6a.rb +0 -46
- data/lib/one_gadget/builds/libc-2.23-f33f3937b8f458ffd96cf10a22deea1bd85ac61a.rb +0 -46
- data/lib/one_gadget/builds/libc-2.23-f4490657edfef482025fff60e85acd5928e0d05b.rb +0 -46
- data/lib/one_gadget/builds/libc-2.23-ffb3662a7bc5e136fa8f464fc14ec23efb8d1817.rb +0 -40
- data/lib/one_gadget/builds/libc-2.23.90-203feaf8a7e40cef8a75568a406a22fdeda94f8b.rb +0 -40
- data/lib/one_gadget/builds/libc-2.23.90-392b643118f919a1827477e978d9cea2b09a34fc.rb +0 -46
- data/lib/one_gadget/builds/libc-2.23.90-52e411aed4443fbbcb9706fffa2362e4a108f28f.rb +0 -46
- data/lib/one_gadget/builds/libc-2.23.90-604d873b711edeb971328656c4c17bbc15c7427f.rb +0 -46
- data/lib/one_gadget/builds/libc-2.23.90-63fbdf3e3928f6dc2bcac10e28aa233a625a3d27.rb +0 -46
- data/lib/one_gadget/builds/libc-2.23.90-7439c4311f0dd7307f78c1b5530f52a590230e45.rb +0 -46
- data/lib/one_gadget/builds/libc-2.23.90-b23fcdbc7bead3c59600e0a6acfe9220c42e1b93.rb +0 -46
- data/lib/one_gadget/builds/libc-2.23.90-c5238226a11b5538d56c713c97db1a36722e6322.rb +0 -40
- data/lib/one_gadget/builds/libc-2.23.90-e1b43c632d35649e9b128528994426e34ae40d1a.rb +0 -46
- data/lib/one_gadget/builds/libc-2.23.90-e9ab765fb32204de2215d6117dcbc1fb92f26b9a.rb +0 -40
- data/lib/one_gadget/builds/libc-2.23.90-ef3765f1e2595771cefa96291c647d0eff8a81e0.rb +0 -40
- data/lib/one_gadget/builds/libc-2.23.90-f149edaf4dee34b38f831bf0914af2ecf0a1a317.rb +0 -46
- data/lib/one_gadget/builds/libc-2.24-024385baa7aaf9c62ae336e896bcf245dda0fc01.rb +0 -46
- data/lib/one_gadget/builds/libc-2.24-04b6f2a9e244a36a9f107febf832bbadea9f252c.rb +0 -46
- data/lib/one_gadget/builds/libc-2.24-0b88546716e2f1924986596ee7cc9215df89c6f5.rb +0 -46
- data/lib/one_gadget/builds/libc-2.24-0c11fd6524ef7a7da877f940fba181ed746edb0a.rb +0 -46
- data/lib/one_gadget/builds/libc-2.24-0f523a27b7460f50befd3d281238c6f189c92d84.rb +0 -46
- data/lib/one_gadget/builds/libc-2.24-1c3ec3a011b1005cb1c2c32fc6dbc4e6e9cef4bb.rb +0 -45
- data/lib/one_gadget/builds/libc-2.24-1da8c8ac3c71c30040cf58b563ae48e39bbae86f.rb +0 -40
- data/lib/one_gadget/builds/libc-2.24-1ddd6fca9cd87c66e6a19df018f5992e9fa6453d.rb +0 -46
- data/lib/one_gadget/builds/libc-2.24-1f253610e390e5237eb7949212e08166fba3ca4b.rb +0 -46
- data/lib/one_gadget/builds/libc-2.24-1f7bdfb9a24714835cee6e6597ea7aa782821371.rb +0 -46
- data/lib/one_gadget/builds/libc-2.24-206b2bb216b6cdb6b1be565a6fcd29f3862db060.rb +0 -52
- data/lib/one_gadget/builds/libc-2.24-20cbb98b62f46ee16b182d1b357146577c40ebb7.rb +0 -40
- data/lib/one_gadget/builds/libc-2.24-236e52c7896f5403d8065cf3965fdb2d31d56891.rb +0 -46
- data/lib/one_gadget/builds/libc-2.24-24b1296687d36e24bd48b8c412157d94f074ecc2.rb +0 -40
- data/lib/one_gadget/builds/libc-2.24-253debb34a7d493c0b8e2d6db2079e3d680459f5.rb +0 -40
- data/lib/one_gadget/builds/libc-2.24-26e84118fee5788eb5d8dda66b7e7f029d2c7800.rb +0 -52
- data/lib/one_gadget/builds/libc-2.24-2ee9e1740da616757f2e6d5ba58576c0c7302fff.rb +0 -40
- data/lib/one_gadget/builds/libc-2.24-30acfe88fed30ad3f8cb88425b80ea96899655aa.rb +0 -46
- data/lib/one_gadget/builds/libc-2.24-33801a6f55c5c3cdf7d83590b433adcbab08a688.rb +0 -40
- data/lib/one_gadget/builds/libc-2.24-349119af9e223829ea24f6b7226bdff0182e73f2.rb +0 -52
- data/lib/one_gadget/builds/libc-2.24-35764bd71c58942e9131e3547b7c343098212d03.rb +0 -46
- data/lib/one_gadget/builds/libc-2.24-389260a6758c3f1dbc741c197e747341ed277cd2.rb +0 -46
- data/lib/one_gadget/builds/libc-2.24-3b24749bb184473f81819312e3d86903915eaf65.rb +0 -46
- data/lib/one_gadget/builds/libc-2.24-3ea4c67e60e49b8164b692166115bbf927e521db.rb +0 -45
- data/lib/one_gadget/builds/libc-2.24-3f89db5baa7e88162377fab6a1590f732a355401.rb +0 -45
- data/lib/one_gadget/builds/libc-2.24-3fce81d490804af9759c70bf197380bc05a584c2.rb +0 -46
- data/lib/one_gadget/builds/libc-2.24-43adbb1e7368c94fba1ba9020d8ef0808bff5bc4.rb +0 -40
- data/lib/one_gadget/builds/libc-2.24-43faee19af5e1d20163c6492862fca1a4146b668.rb +0 -40
- data/lib/one_gadget/builds/libc-2.24-45adab2b0ad8604e35eeea0b30d6ec1ad11642af.rb +0 -40
- data/lib/one_gadget/builds/libc-2.24-46bb6303e03d21ec9b79334370e1b39a51f883b1.rb +0 -46
- data/lib/one_gadget/builds/libc-2.24-497931f8d2346a6d0e300a65d8fc6106c6c88c15.rb +0 -46
- data/lib/one_gadget/builds/libc-2.24-4d0bb76f378375d584a373929f6d5b695f53db99.rb +0 -40
- data/lib/one_gadget/builds/libc-2.24-4dac034d41342a93593b3e18aa05f4b69c2909c9.rb +0 -45
- data/lib/one_gadget/builds/libc-2.24-4fa7401566d6b3e2c7ee5df3b4d85a01f85b595c.rb +0 -46
- data/lib/one_gadget/builds/libc-2.24-5284cbfbd543755c2fa4df64a20ccb14e7ded30c.rb +0 -46
- data/lib/one_gadget/builds/libc-2.24-53bab59259db20458dc7d753dd2950916f6e47de.rb +0 -46
- data/lib/one_gadget/builds/libc-2.24-568d20b7e0d08bc282fb42ae405c7054e4209ede.rb +0 -40
- data/lib/one_gadget/builds/libc-2.24-595aeaf311d354bbcd3f311e218f6b40fe711046.rb +0 -46
- data/lib/one_gadget/builds/libc-2.24-5a75868ead9dbb03eb4d668ff2918f341f949387.rb +0 -46
- data/lib/one_gadget/builds/libc-2.24-5b72576ff331e93852355123afecdec70fd247b5.rb +0 -52
- data/lib/one_gadget/builds/libc-2.24-6194e9b483a157d38ab633a5bf3c37f9ed6b7e04.rb +0 -40
- data/lib/one_gadget/builds/libc-2.24-6a5885d005a0e25074da79038453af3c1bbd16a1.rb +0 -40
- data/lib/one_gadget/builds/libc-2.24-6a6d4ead4f4d511091e34c8baebaab04b97913e0.rb +0 -46
- data/lib/one_gadget/builds/libc-2.24-6d3ffad6407f2ea71f9121d761426f3a917f4216.rb +0 -46
- data/lib/one_gadget/builds/libc-2.24-6dd40dc4bc5ee908b857c00c1b2a00c58ebc1596.rb +0 -45
- data/lib/one_gadget/builds/libc-2.24-756da9d194e16bccf2c342a12d8ea01e677fcba7.rb +0 -40
- data/lib/one_gadget/builds/libc-2.24-7a7fafb866f1680656f7343e9d38fa76986bcfff.rb +0 -45
- data/lib/one_gadget/builds/libc-2.24-7e0f1b3a8efe3adcf3080b20447ac4bd47aaf489.rb +0 -40
- data/lib/one_gadget/builds/libc-2.24-805005b60c0c3e63eb593a5041fc9f7803e3b87d.rb +0 -46
- data/lib/one_gadget/builds/libc-2.24-856e263a6c8431b34f1ab69b55abbe453a135c52.rb +0 -45
- data/lib/one_gadget/builds/libc-2.24-8a683c08dbc27e1ceab72d87cd00b5d6208f7620.rb +0 -40
- data/lib/one_gadget/builds/libc-2.24-8eb1e49d70f349433d3d4a712b4746c73481012d.rb +0 -46
- data/lib/one_gadget/builds/libc-2.24-91b0020fb992b67e3c368576943fde81e4ec7ec9.rb +0 -40
- data/lib/one_gadget/builds/libc-2.24-9378343c5442ef04933110045638b2daafa16098.rb +0 -46
- data/lib/one_gadget/builds/libc-2.24-976f2a94a6a1db73c935bce8db1e5a28a46d8535.rb +0 -46
- data/lib/one_gadget/builds/libc-2.24-980296526a2060e4e53dfa8ded76917c3f9b851c.rb +0 -46
- data/lib/one_gadget/builds/libc-2.24-9a006ea92b333aa035fdecc8dc0b28e1d04edd37.rb +0 -46
- data/lib/one_gadget/builds/libc-2.24-9ae48d5843f29af366655a00fb0636db91328abb.rb +0 -40
- data/lib/one_gadget/builds/libc-2.24-9b7db6636c9f2f03c9523b02db229741e2250550.rb +0 -40
- data/lib/one_gadget/builds/libc-2.24-9e638553dc7a08748d03c42455ecd6bb9bd8f8cd.rb +0 -46
- data/lib/one_gadget/builds/libc-2.24-a4c01d397b6584f7040ef266b16a5d4da0b7a087.rb +0 -52
- data/lib/one_gadget/builds/libc-2.24-a51ace667ccae6a8887837efb18259a906704bed.rb +0 -46
- data/lib/one_gadget/builds/libc-2.24-a822e789c3428254f309f81600b9e5ae551a3461.rb +0 -46
- data/lib/one_gadget/builds/libc-2.24-aad7dbe330f23ea00ca63daf793b766b51aceb5d.rb +0 -52
- data/lib/one_gadget/builds/libc-2.24-acd08eb60d44e32e85530f0537d46f8cd422403e.rb +0 -46
- data/lib/one_gadget/builds/libc-2.24-b81a06f0ac241c4aa8860602d9abcc903adbb675.rb +0 -46
- data/lib/one_gadget/builds/libc-2.24-b8a944084a03aec90d871ca8a5fac48801cc064d.rb +0 -46
- data/lib/one_gadget/builds/libc-2.24-b95a6603e6113924f82409ff65e6ed1514afd3db.rb +0 -40
- data/lib/one_gadget/builds/libc-2.24-bb0d156759d9bdfec06f5decd1c03785bcbc0ba1.rb +0 -46
- data/lib/one_gadget/builds/libc-2.24-bccffaa4c34e166b9c09e8802ce09989d1e8f46a.rb +0 -40
- data/lib/one_gadget/builds/libc-2.24-be6d412ecc4816c46eb49e750b02f714a9131c4e.rb +0 -46
- data/lib/one_gadget/builds/libc-2.24-c116abd24efe14f6dc2f98cef3d673934f6d66d0.rb +0 -42
- data/lib/one_gadget/builds/libc-2.24-c1fd7dc1c8a6915e5f7a7f24a5901a239d473f08.rb +0 -46
- data/lib/one_gadget/builds/libc-2.24-c451b072ff6aa62ba6e054c06e633fa297a3a7eb.rb +0 -40
- data/lib/one_gadget/builds/libc-2.24-c5a0679981d0258465ddba6b975c9340cbf20d22.rb +0 -40
- data/lib/one_gadget/builds/libc-2.24-c62f8c5ce9f5304f054922d39d0c0fa94d9e9531.rb +0 -46
- data/lib/one_gadget/builds/libc-2.24-c7d3ac73ddd0865d350bd570771cf3a964a1ddbd.rb +0 -46
- data/lib/one_gadget/builds/libc-2.24-c9133ae8d86b5d469422e0c51a19e7910ebeae41.rb +0 -40
- data/lib/one_gadget/builds/libc-2.24-cc7e13208dfc283e75a9491f8507429f647eac05.rb +0 -40
- data/lib/one_gadget/builds/libc-2.24-d2a8a8ac188a6c3bafa4813a3d2789240ee49489.rb +0 -46
- data/lib/one_gadget/builds/libc-2.24-d67af93d54c07bbe5d252ef6f176ec77b866c786.rb +0 -46
- data/lib/one_gadget/builds/libc-2.24-d8ba284042773fed1189bcf927960999f4c1de55.rb +0 -45
- data/lib/one_gadget/builds/libc-2.24-da518391ad926bb7535f2095df0be265180eeed5.rb +0 -40
- data/lib/one_gadget/builds/libc-2.24-dab413a7e3b33dde527af308a09a55ade6b41e84.rb +0 -40
- data/lib/one_gadget/builds/libc-2.24-dc799b9197929f88cebc6aa72e3be388cacfb1df.rb +0 -46
- data/lib/one_gadget/builds/libc-2.24-deefae132c5a39ba892bc189edd91f73c1ea1f14.rb +0 -40
- data/lib/one_gadget/builds/libc-2.24-dff06414a29b97b865ef938e06a7751fe8b1b2d0.rb +0 -46
- data/lib/one_gadget/builds/libc-2.24-e0206d9b8d7ad3abc39a94dbc37bb3b42c9f1345.rb +0 -46
- data/lib/one_gadget/builds/libc-2.24-e5dc6c0caa39828fa10ed37e642723a581acdb6d.rb +0 -40
- data/lib/one_gadget/builds/libc-2.24-e7de387eec0b57da248cc4e74edefcfcb55bd204.rb +0 -45
- data/lib/one_gadget/builds/libc-2.24-eaadebbded05e24bc9853c39b2241436f96d41ef.rb +0 -46
- data/lib/one_gadget/builds/libc-2.24-eb6b0b1e1c5cf4579e66eadb083885884dc0b648.rb +0 -40
- data/lib/one_gadget/builds/libc-2.24-f5ffc1b2b1282d79097f4ce84b519d326dce1247.rb +0 -40
- data/lib/one_gadget/builds/libc-2.24-fb431a54ddae802fd1c59850cbbc408a05d3deb8.rb +0 -46
- data/lib/one_gadget/builds/libc-2.24-fc121fe8b1eaa6ea0babbc3b8ce6e12adfcc3719.rb +0 -45
- data/lib/one_gadget/builds/libc-2.24-fe976940471b3f683eeebb268f095b7ff1c898c1.rb +0 -46
- data/lib/one_gadget/builds/libc-2.25-58c735bc7b19b0aeb395cce70cf63bd62ac75e4a.rb +0 -52
- data/lib/one_gadget/builds/libc-2.25-912fc00c0da67045111928bd5c8a350e5be18c41.rb +0 -52
- data/lib/one_gadget/builds/libc-2.25-e5eb6347f0629b37bf698200022a683b7efb10ed.rb +0 -46
- data/lib/one_gadget/builds/libc-2.25-eae5038c2b9ae67d9eda345aa9fbe0a7185ab436.rb +0 -52
- data/lib/one_gadget/builds/libc-2.26-1c39b3b3faa2a2cbb0fa0b6845b29332562262d3.rb +0 -52
- data/lib/one_gadget/builds/libc-2.26-3b850bf60461afbdd83317b248b3f687e52ff18e.rb +0 -52
- data/lib/one_gadget/builds/libc-2.26-499b381aaf00ce85ee5d4a12770ea369b30d2a41.rb +0 -52
- data/lib/one_gadget/builds/libc-2.26-4cc84abfe1fd26a485fc2b1b954c281ce9d358fd.rb +0 -52
- data/lib/one_gadget/builds/libc-2.26-4ea852c9d6a5084b8b58509b3b3d37d3d8cddb90.rb +0 -52
- data/lib/one_gadget/builds/libc-2.26-6d2b609f0c8e7b338f767b08c5ac712fac809d31.rb +0 -64
- data/lib/one_gadget/builds/libc-2.26-d4dd444f86cfc66c97c5e3eecb69fc5b86ea6539.rb +0 -52
- data/lib/one_gadget/builds/libc-2.26-fb587bc4429e7d1b0de31a3b9ee8ae78ee797eb0.rb +0 -52
- data/lib/one_gadget/builds/libc-2.27-06a8004be6e10c4aeabbe0db74423ace392a2d6b.rb +0 -47
- data/lib/one_gadget/builds/libc-2.27-0e188ec5f09c187a7a92784d4b97aa251b15a93c.rb +0 -47
- data/lib/one_gadget/builds/libc-2.27-14cd15d2eb0bc25c89045873cf807f7533e4788d.rb +0 -47
- data/lib/one_gadget/builds/libc-2.27-2d1c5e0b85cb06ff47fa6fa088ec22cb6e06074e.rb +0 -47
- data/lib/one_gadget/builds/libc-2.27-4b06dfe2c46f5e537b3d0a310ab0bda11bcbd681.rb +0 -32
- data/lib/one_gadget/builds/libc-2.27-71f0f3074a929e519e85f6a5c03a7d1fd976bfe4.rb +0 -47
- data/lib/one_gadget/builds/libc-2.27-73cd526a553b3b47c6dd0d6dc62175263cdc646e.rb +0 -41
- data/lib/one_gadget/builds/libc-2.27-9dd0bb57f81671704475d1e5163405f7b4d4b454.rb +0 -41
- data/lib/one_gadget/builds/libc-2.27-a5e88eb34369fb48113b9eda7a92e07b372f3cb7.rb +0 -41
- data/lib/one_gadget/builds/libc-2.27-afdabd83c53f0fc60a059c3305c4f3b57198e51b.rb +0 -47
- data/lib/one_gadget/builds/libc-2.27-ba63c4a5f5c2b51e6e7e5df94017dc98b20e397a.rb +0 -47
- data/lib/one_gadget/builds/libc-2.27-cc6dd208d3af4bc505f599a90ef8af52f16116e4.rb +0 -41
- data/lib/one_gadget/builds/libc-2.27-ce450eb01a5e5acc7ce7b8c2633b02cc1093339e.rb +0 -47
- data/lib/one_gadget/builds/libc-2.27-cf1599aa8b3cb35f79dcaea7a8b48704ecf42a19.rb +0 -47
- data/lib/one_gadget/builds/libc-2.27-d1237c55f6778f53b369cf22ff81979b2fe340bb.rb +0 -41
- data/lib/one_gadget/builds/libc-2.27-d3cf764b2f97ac3efe366ddd07ad902fb6928fd7.rb +0 -47
- data/lib/one_gadget/builds/libc-2.27-d831493b564a8632d1da5cc0fe44af45713cfeb6.rb +0 -47
- data/lib/one_gadget/builds/libc-2.27-f4929d2a8af4629477103af6f1cfb3bebce80883.rb +0 -47
- data/lib/one_gadget/builds/libc-2.28-26b3c1a40c8a0bd026975a262774bf52aec55107.rb +0 -44
- data/lib/one_gadget/builds/libc-2.28-44f5a3efb0e5733fa9d97e690cb36cd4c682bcdb.rb +0 -41
- data/lib/one_gadget/builds/libc-2.28-5784a31a1c26f6d2157e585205ebb63dd19ff90f.rb +0 -41
- data/lib/one_gadget/builds/libc-2.28-5b157f49586a3ca84d55837f97ff466767dd3445.rb +0 -59
- data/lib/one_gadget/builds/libc-2.28-65ed813688b116fdce9e866ad2fef2e734167337.rb +0 -50
- data/lib/one_gadget/builds/libc-2.28-6ee9454b96efa9e343f9e8105f2fa4529265ea05.rb +0 -50
- data/lib/one_gadget/builds/libc-2.29-2195ff86b0ddead43a7c08f46b95b0887cdb96fa.rb +0 -32
- data/lib/one_gadget/builds/libc-2.29-5b7203920d3d786ac40af8e0d5104683335f11be.rb +0 -74
- data/lib/one_gadget/builds/libc-2.29-6d8abbab5b004d65bfdf909fd4982103499cd1c9.rb +0 -23
- data/lib/one_gadget/builds/libc-2.29-85d5020664b11fd2708859275de41d5ab9d104cf.rb +0 -74
- data/lib/one_gadget/builds/libc-2.29-9a1100ebab15d22bbc31836b0656d2fa5a6a1252.rb +0 -23
- data/lib/one_gadget/builds/libc-2.29-a8af6c81cb28a37bf3a546970bf64224402f8bd4.rb +0 -74
- data/lib/one_gadget/builds/libc-2.29-c19c88c33b60742ca906e0f9f96fe31b8b79ea9c.rb +0 -74
- data/lib/one_gadget/builds/libc-2.29-d389232dd725501db38f08e2aca0b44ab3af314f.rb +0 -23
- data/lib/one_gadget/builds/libc-2.29-d561ec515222887a1e004555981169199d841024.rb +0 -83
- data/lib/one_gadget/builds/libc-2.30-00854a16b9b4b73893627ccb730d97907837e320.rb +0 -26
- data/lib/one_gadget/builds/libc-2.30-135c0b4a030ec9b6306ed6b621e1e0dedfd614a3.rb +0 -23
- data/lib/one_gadget/builds/libc-2.30-2155f455ad56bd871c8225bcca85ee25c1c197c4.rb +0 -107
- data/lib/one_gadget/builds/libc-2.30-33d1f350f13728651d74dd2a56bad1e4e4648f5e.rb +0 -74
- data/lib/one_gadget/builds/libc-2.30-3f72ae987c135c35f2e721c61991ec46df8816ab.rb +0 -32
- data/lib/one_gadget/builds/libc-2.30-4ab6143b59defc12c3d50d176c78b4e6e5a2c179.rb +0 -23
- data/lib/one_gadget/builds/libc-2.30-71373fd43ed6a83e0aab983c3a971e32d459e15f.rb +0 -38
- data/lib/one_gadget/builds/libc-2.30-75e3e2d9596aae251330ae7ef3f91a847fc62641.rb +0 -38
- data/lib/one_gadget/builds/libc-2.30-7a1e2ae26cef50584af2c60a5ad3a7ae3e9b1446.rb +0 -74
- data/lib/one_gadget/builds/libc-2.30-884362aa891ab565e4cf904cd60be984a7941acd.rb +0 -26
- data/lib/one_gadget/builds/libc-2.30-93abe093a13b9b10f83b5e6de4a63a0d29175c89.rb +0 -32
- data/lib/one_gadget/builds/libc-2.30-bef538440d5b4b0ac6b4575acb3aac4a65316061.rb +0 -26
- data/lib/one_gadget/builds/libc-2.30-c0a4471ee8f24f2ecc0ad1ccbd4633fa6fa36654.rb +0 -26
- data/lib/one_gadget/builds/libc-2.30-c60a7605ae87b9b40426e3123b12a91bfe2036f3.rb +0 -26
- data/lib/one_gadget/builds/libc-2.30-c841931c41e7affad89dfe70a45f01afafa9a37a.rb +0 -32
- data/lib/one_gadget/builds/libc-2.30-cbe9cff3c43b979739af1681b61a3d585725577b.rb +0 -107
- data/lib/one_gadget/builds/libc-2.30-cd779a06a5df37cdad8dfcfa12cb2c8db36f62f4.rb +0 -26
- data/lib/one_gadget/builds/libc-2.30-dc43d2c2d727158000c9bef6d47e17722d41ec2d.rb +0 -26
- data/lib/one_gadget/builds/libc-2.30-e3e238714a7998a958651faa0a5e97fafa229ec3.rb +0 -26
- data/lib/one_gadget/builds/libc-2.30-f07144cc3d0ac50415f3a2e061be6da672c914ba.rb +0 -74
- data/lib/one_gadget/builds/libc-2.30-f44469d65b4efd2e5951513ed7cbf773657f1283.rb +0 -74
- data/lib/one_gadget/builds/libc-2.31-012f3f1e614cb9c829b8d1590d228cc6a9506a03.rb +0 -26
- data/lib/one_gadget/builds/libc-2.31-05dd8f45f3f82869e5ca8cb214475816e41f469a.rb +0 -26
- data/lib/one_gadget/builds/libc-2.31-099b9225bcb0d019d9d60884be583eb31bb5f44e.rb +0 -122
- data/lib/one_gadget/builds/libc-2.31-0d1b3211736c4ca528a32ea0d565d41a2ede3b58.rb +0 -80
- data/lib/one_gadget/builds/libc-2.31-0df979b8b244294bbc29bbe8f7f6dd6bf89c6820.rb +0 -26
- data/lib/one_gadget/builds/libc-2.31-12e412d1938ec3ff79751f0e85f31bc52f7e3722.rb +0 -80
- data/lib/one_gadget/builds/libc-2.31-2886817dc06a87bdeef50544c0d6c12de13a8148.rb +0 -80
- data/lib/one_gadget/builds/libc-2.31-4d4d0853eb075b8b0cfaee0aee7cdf4254a3e877.rb +0 -80
- data/lib/one_gadget/builds/libc-2.31-58a58f2fcdafddacb4a08439ea2ee163ff645d1d.rb +0 -26
- data/lib/one_gadget/builds/libc-2.31-634252e0c5f8b03957a2e529719d4101699a894a.rb +0 -122
- data/lib/one_gadget/builds/libc-2.31-6b143503744b9d6c22e479941488d6a9e6e3f1c5.rb +0 -26
- data/lib/one_gadget/builds/libc-2.31-6c6ea8a57519f219a10c9d6a6d199dd813680226.rb +0 -26
- data/lib/one_gadget/builds/libc-2.31-6dbad1709854c527793f6401666e45a791b7c793.rb +0 -80
- data/lib/one_gadget/builds/libc-2.31-6fe07009bc57e6917030d052370d8bed414dd7c0.rb +0 -32
- data/lib/one_gadget/builds/libc-2.31-78702aff0796336ccdd432310ba6f84c728c9b3c.rb +0 -26
- data/lib/one_gadget/builds/libc-2.31-85d7bb2dad0f8172d1c02c0311a00c4695933beb.rb +0 -26
- data/lib/one_gadget/builds/libc-2.31-8614995a8f0152ad4b1b45e28070588546ca7ac8.rb +0 -26
- data/lib/one_gadget/builds/libc-2.31-8629fa2eea681f639a0c18305d4548850dde3450.rb +0 -26
- data/lib/one_gadget/builds/libc-2.31-94761ae31db09ce9140ca55cb6986a5ea9110abc.rb +0 -80
- data/lib/one_gadget/builds/libc-2.31-a9053cb60c51ead85c68c941ca4d02f9381844f9.rb +0 -26
- data/lib/one_gadget/builds/libc-2.31-b61d34c10e608722a90d339bd9a7ff28b18cd501.rb +0 -23
- data/lib/one_gadget/builds/libc-2.31-c9d56de82ddd00d822d6100034f3075ef1709cd2.rb +0 -122
- data/lib/one_gadget/builds/libc-2.31-cdaf4c7a78acdea7ede78ea0240a3d8d5833110f.rb +0 -26
- data/lib/one_gadget/builds/libc-2.31-e67e80e70619717709e3180e552a11a285036a54.rb +0 -80
- data/lib/one_gadget/builds/libc-2.31-eb3c5cf73a0a6b7f2b3895a56dbc443806700971.rb +0 -80
- data/lib/one_gadget/builds/libc-2.31-f3aa1ef59e51e64ff8438f46d225e4ae256c1b03.rb +0 -26
- data/lib/one_gadget/builds/libc-2.31-f3ff3fda80b817c464a56eed59ff09dc864eaeb0.rb +0 -32
- data/lib/one_gadget/builds/libc-2.31-fb7626dd8b8a50f7685920487e992528834f6775.rb +0 -26
- data/lib/one_gadget/builds/libc-2.32-0e5c8d8738927eb715941480b3726fa764cc50ed.rb +0 -29
- data/lib/one_gadget/builds/libc-2.32-1e3fb06b8c86b5e282e3e11bd207d399fb4952e2.rb +0 -122
- data/lib/one_gadget/builds/libc-2.32-7ec3e74da842ca3c6a9ba20b21303ce1bc7a45af.rb +0 -122
- data/lib/one_gadget/builds/libc-2.32-7fba7abef941659c229c2636aa0905c28652ee3f.rb +0 -80
- data/lib/one_gadget/builds/libc-2.32-82f6b69e698bb579baefb35a3fb0346632fa2c4d.rb +0 -122
- data/lib/one_gadget/builds/libc-2.32-87f011a7e4cc3fc60a54d0d3dd690e7438decc8d.rb +0 -80
- data/lib/one_gadget/builds/libc-2.32-92199dd358616182fb49c992330fb05e42eaa423.rb +0 -29
- data/lib/one_gadget/builds/libc-2.32-9d60d4bd625a7fe2439db781a5fc91bb69684903.rb +0 -29
- data/lib/one_gadget/builds/libc-2.32-a75b0c335a4987f12d17d3b4adb8dc430432b082.rb +0 -29
- data/lib/one_gadget/builds/libc-2.32-ac287babd169c70013b752da2713dfb96d9a503f.rb +0 -122
- data/lib/one_gadget/builds/libc-2.32-aebd80372a00285a5c486ef72917f935eb8f91be.rb +0 -29
- data/lib/one_gadget/builds/libc-2.32-bd0e9dc4e27475b5ab7dc59141daaa2626b8a760.rb +0 -29
- data/lib/one_gadget/builds/libc-2.32-bddeb6374fc99723cef3b3baafe48ac78fce13b4.rb +0 -29
- data/lib/one_gadget/builds/libc-2.32-cb91dd613d38b806a16bed1b364c084ad63d1a1f.rb +0 -80
- data/lib/one_gadget/builds/libc-2.32-d3f1cf7f55b985fd6d989880ec3599724fe40a26.rb +0 -29
- data/lib/one_gadget/builds/libc-2.32-e13b24f94b260dd6394bdb2433d2a78e37078d5c.rb +0 -80
- data/lib/one_gadget/builds/libc-2.32-e1596c76d0d93d8a36378ba976f034f140618d59.rb +0 -80
- data/lib/one_gadget/builds/libc-2.32-f45b67ab28af1581cba8e4713e0fd3b2bc004b2e.rb +0 -80
- data/lib/one_gadget/builds/libc-2.33-18edf6b683a2f9768cc0ee9cc64ae6fbb545deb2.rb +0 -122
- data/lib/one_gadget/builds/libc-2.33-1c943bf313b5b4546e47b830e70de6bbd6a0ba57.rb +0 -29
- data/lib/one_gadget/builds/libc-2.33-2b48299781548c9bc452eac6df39902547c884ed.rb +0 -122
- data/lib/one_gadget/builds/libc-2.33-37169e68b33cad12e272bb4896d71fd0d4fd98bb.rb +0 -80
- data/lib/one_gadget/builds/libc-2.33-54a6e404e7dc1de7c1434a00b7b1ad325b81f22a.rb +0 -80
- data/lib/one_gadget/builds/libc-2.33-7983d313db4a441a3762c8861ca405aa0331c0c8.rb +0 -80
- data/lib/one_gadget/builds/libc-2.33-8fdc2b2c65f3d782e52c01b546399eee8aa466dc.rb +0 -29
- data/lib/one_gadget/builds/libc-2.33-9143da129b44b931a1c180e2b103e993dd2474fd.rb +0 -29
- data/lib/one_gadget/builds/libc-2.33-97c8d90bd86bc698d156630e8803de433a640090.rb +0 -122
- data/lib/one_gadget/builds/libc-2.33-9bf4c513db255ab7248cef9f0f96b4403df29852.rb +0 -80
- data/lib/one_gadget/builds/libc-2.33-9e592d3efa165bc2bab8b40426370bd50cb0b027.rb +0 -80
- data/lib/one_gadget/builds/libc-2.33-abf3b2a9815c0cd6e4280cd99474d34102804eb2.rb +0 -80
- data/lib/one_gadget/builds/libc-2.33-b046eecd056a0c30995703f6cfca7a8e3a9ef5fa.rb +0 -80
- data/lib/one_gadget/builds/libc-2.33-b2262bfa6f1bffd1e9ddc845276dfaebb7c8f0b9.rb +0 -29
- data/lib/one_gadget/builds/libc-2.33-f462ab2b79c7f29fb866da6e087e45261570a09c.rb +0 -29
- data/lib/one_gadget/builds/libc-2.33-f4af69206091c7f14a941f2dd77a79a7682a1184.rb +0 -29
- data/lib/one_gadget/builds/libc-2.34-140609514178a4bb96a3cd44ffdfede398a77610.rb +0 -29
- data/lib/one_gadget/builds/libc-2.34-25594d4b6cbecda86ec968fa940c6c09937db70f.rb +0 -83
- data/lib/one_gadget/builds/libc-2.34-387920279e1c7892042ff27d76315d55e4651db9.rb +0 -29
- data/lib/one_gadget/builds/libc-2.34-7e46fbc4d85f5df8b6f18630787ad281786a3512.rb +0 -29
- data/lib/one_gadget/builds/libc-2.34-8d631c824a37b236d1dc9686b224a573fd6048b4.rb +0 -29
- data/lib/one_gadget/builds/libc-2.34-b8037b6260865346802321dd2256b8ad1d857e63.rb +0 -119
- data/lib/one_gadget/builds/libc-2.34-ba4777827fe1fb729ca35acd99c8013936172a0d.rb +0 -83
- data/lib/one_gadget/builds/libc-2.34-f0fc29165cbe6088c0e1adf03b0048fbecbc003a.rb +0 -119
- data/lib/one_gadget/builds/libc-2.35-89c3cb85f9e55046776471fed05ec441581d1969.rb +0 -104
- data/lib/one_gadget/builds/libc-2.35-ab265082cac9486923c709d48ee5dde080e243ff.rb +0 -68
- data/lib/one_gadget/builds/libc-2.35-c376d41cff4473142a97ac1ff1eab433859dc3d4.rb +0 -26
- data/lib/one_gadget/builds/libc-2.35-dfca8b65dd2d2ca67f70dc7a556a6cfa8ba96ed8.rb +0 -26
- data/lib/one_gadget/fetcher.rb +0 -58
|
@@ -1,16 +1,70 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require 'elftools'
|
|
4
|
+
|
|
5
|
+
require 'one_gadget/emulators/processor'
|
|
3
6
|
require 'one_gadget/error'
|
|
4
7
|
require 'one_gadget/fetchers/objdump'
|
|
5
8
|
|
|
6
9
|
module OneGadget
|
|
7
|
-
module
|
|
8
|
-
#
|
|
10
|
+
module Fetchers
|
|
11
|
+
# Base of the per-architecture gadget fetchers. It discovers candidate
|
|
12
|
+
# instruction sequences - a backward control-flow walk from each
|
|
13
|
+
# +exec+/+posix_spawn+ call - and turns a solved candidate into a
|
|
14
|
+
# {OneGadget::Gadget::Gadget}. A subclass supplies only the arch-specific
|
|
15
|
+
# pieces (call mnemonic, string/global recognition, branch classification).
|
|
16
|
+
#
|
|
17
|
+
# To add an architecture, see +docs/adding-an-architecture.md+; +AArch64+ is
|
|
18
|
+
# the simplest example.
|
|
9
19
|
class Base
|
|
10
20
|
# The absolute path to glibc.
|
|
11
21
|
# @return [String] The filename.
|
|
12
22
|
attr_reader :file
|
|
13
23
|
|
|
24
|
+
# What a terminal function's name starts with, and enough bytes of a name to
|
|
25
|
+
# tell: a symbol table's string table is read as one blob, so a name is a
|
|
26
|
+
# slice of it.
|
|
27
|
+
TERMINAL_PREFIXES = %w[exec posix_spawn].freeze
|
|
28
|
+
TERMINAL_PREFIX_BYTES = 12
|
|
29
|
+
private_constant :TERMINAL_PREFIXES, :TERMINAL_PREFIX_BYTES
|
|
30
|
+
|
|
31
|
+
# Give up on a control-flow path once it has crossed this many conditional branches.
|
|
32
|
+
MAX_FORKS = 4
|
|
33
|
+
# Hard cap on a single path's length (loop/runaway guard).
|
|
34
|
+
PATH_BUDGET = 80
|
|
35
|
+
|
|
36
|
+
# How much to disassemble around each terminal call when an architecture can
|
|
37
|
+
# locate the calls cheaply (see {#terminal_call_sites} / {#windowed_disasm}).
|
|
38
|
+
#
|
|
39
|
+
# The walk runs backwards from the call, but what it reaches does not: a
|
|
40
|
+
# branch predecessor can sit *after* the call, so the window has to hold the
|
|
41
|
+
# loop or later block that jumps back into the region.
|
|
42
|
+
#
|
|
43
|
+
# Both directions were measured by windowing every architecture against its
|
|
44
|
+
# own full disassembly across the spec corpus. Gadgets start being lost below
|
|
45
|
+
# 0x400 either way, and a window too small to hold a predecessor invents them
|
|
46
|
+
# as well: the line before the first of a window is the last of another, and
|
|
47
|
+
# nothing about it follows. These leave 16x that, and still disassemble about
|
|
48
|
+
# a fifth of a libc -- terminal calls cluster into a handful of merged
|
|
49
|
+
# windows, so a wider one costs little.
|
|
50
|
+
#
|
|
51
|
+
# A gadget whose code and branch-predecessors exceed the window is missed,
|
|
52
|
+
# which is why windowing is opt-in per arch (fast disassembly arches keep the
|
|
53
|
+
# full, exhaustive scan) and falls back to full disassembly if the call scan
|
|
54
|
+
# comes up empty.
|
|
55
|
+
WINDOW_BACK = 0x4000
|
|
56
|
+
# As far past the call, for a predecessor that branches back into the region.
|
|
57
|
+
WINDOW_FWD = 0x4000
|
|
58
|
+
|
|
59
|
+
# Cache values that are a deterministic function of an objdump command
|
|
60
|
+
# (its output and everything derived from it), so re-analysing the same
|
|
61
|
+
# file - common in the specs, harmless for the CLI which reads a file once -
|
|
62
|
+
# doesn't redo the disassembly or the whole-binary scans.
|
|
63
|
+
def self.cached(kind, command)
|
|
64
|
+
@cached ||= Hash.new { |h, k| h[k] = {} }
|
|
65
|
+
@cached[kind][command] ||= yield
|
|
66
|
+
end
|
|
67
|
+
|
|
14
68
|
# Instantiate a fetcher object.
|
|
15
69
|
# @param [String] file Absolute path to the target libc.
|
|
16
70
|
def initialize(file)
|
|
@@ -23,20 +77,93 @@ module OneGadget
|
|
|
23
77
|
# Do find gadgets in glibc.
|
|
24
78
|
# @return [Array<OneGadget::Gadget::Gadget>] Gadgets found.
|
|
25
79
|
def find
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
next if
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
80
|
+
str_offset('/bin/sh') # ensure it's glibc-like; raises "not glibc?" if not found
|
|
81
|
+
gadgets = []
|
|
82
|
+
# Overlapping candidate paths share tails, so the same suffix (a start line
|
|
83
|
+
# and everything after it) recurs across candidates; emulate each once.
|
|
84
|
+
seen = {}
|
|
85
|
+
candidates.each do |cand|
|
|
86
|
+
executed_windows(cand.lines) do |suffix|
|
|
87
|
+
next if seen.key?(key = suffix.join)
|
|
88
|
+
|
|
89
|
+
seen[key] = true
|
|
90
|
+
next if refused_before_call?(suffix)
|
|
91
|
+
|
|
92
|
+
gadget = resolve_suffix(suffix)
|
|
93
|
+
gadgets << gadget unless gadget.nil?
|
|
37
94
|
end
|
|
38
|
-
|
|
39
|
-
|
|
95
|
+
end
|
|
96
|
+
gadgets
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
# Every suffix of +lines+ -- a start line and everything after it, longest
|
|
100
|
+
# last -- cut down to the part that runs: emulation ends at the terminal
|
|
101
|
+
# call, so anything past one never executes. A suffix reaches beyond a
|
|
102
|
+
# terminal call when the function holds several and the candidate was walked
|
|
103
|
+
# back from a later one. Bounding each window here lets everything
|
|
104
|
+
# downstream -- {#emulate} and its overrides, the dedup key in {#find} --
|
|
105
|
+
# read a window as executed code.
|
|
106
|
+
#
|
|
107
|
+
# Each line is classified once per candidate rather than once per suffix
|
|
108
|
+
# containing it: walking the start backwards, the first terminal call at or
|
|
109
|
+
# after it only moves when the start is itself one.
|
|
110
|
+
# @param [Array<String>] lines One candidate, as a line list.
|
|
111
|
+
# @yieldparam [Array<String>] window
|
|
112
|
+
# @return [void]
|
|
113
|
+
def executed_windows(lines)
|
|
114
|
+
stop = lines.size - 1 if terminal_call_line?(lines.last)
|
|
115
|
+
(lines.size - 2).downto(0) do |i|
|
|
116
|
+
stop = i if terminal_call_line?(lines[i])
|
|
117
|
+
yield(stop ? lines[i..stop] : lines[i..])
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
# Whether +line+ is the call that ends a gadget, by the same rule the emulator
|
|
122
|
+
# stops on ({OneGadget::Emulators::Processor#terminal_call?}). Not
|
|
123
|
+
# {#terminal_call_regexp}, which is looser so it can locate call sites: it
|
|
124
|
+
# also matches the +posix_spawn+ setup helpers, which emulation runs through.
|
|
125
|
+
# The mnemonic must be a call, so a branch whose target symbol merely looks
|
|
126
|
+
# similar (+<execlp@@GLIBC_2.4+0x136>+) doesn't end the window.
|
|
127
|
+
def terminal_call_line?(line)
|
|
128
|
+
return false unless line[/\A\s*[0-9a-f]+:\s*(\S+)/, 1]&.match?(/\A#{call_str}x?(?:\.[wn])?\z/)
|
|
129
|
+
|
|
130
|
+
name = line[/<([^@>]+)/, 1]
|
|
131
|
+
!name.nil? && OneGadget::Emulators::Processor::TERMINAL_CALL_RE.match?(name)
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
# Whether emulating +window+ can only stop short of its terminal call: it
|
|
135
|
+
# runs a line the emulator has already refused (see
|
|
136
|
+
# {OneGadget::Emulators::Processor#refused_line}), and a window that never
|
|
137
|
+
# reaches the call is not a gadget. Refusal belongs to the line, so one
|
|
138
|
+
# learnt anywhere settles every window carrying it -- and overlapping
|
|
139
|
+
# candidates carry the same lines over and over.
|
|
140
|
+
# @param [Array<String>] window
|
|
141
|
+
# @return [Boolean]
|
|
142
|
+
def refused_before_call?(window)
|
|
143
|
+
return false if @refused.nil?
|
|
144
|
+
|
|
145
|
+
(window.size - 1).times.any? { |i| @refused.key?(window[i]) }
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
# Emulate a candidate suffix and turn it into a gadget, or +nil+ if it isn't one.
|
|
149
|
+
def resolve_suffix(lines)
|
|
150
|
+
processor = emulate(lines)
|
|
151
|
+
(@refused ||= {})[processor.refused_line] = true if processor.refused_line
|
|
152
|
+
# resolve reads argument registers, which may not be evaluable on an
|
|
153
|
+
# exotic path; such a candidate simply isn't a gadget.
|
|
154
|
+
options = begin
|
|
155
|
+
resolve(processor)
|
|
156
|
+
rescue OneGadget::Error::Error
|
|
157
|
+
nil
|
|
158
|
+
end
|
|
159
|
+
return if options.nil?
|
|
160
|
+
# A branch that compares a value with itself yields a trivial condition:
|
|
161
|
+
# drop the gadget if it's unsatisfiable, else strip the always-true one.
|
|
162
|
+
return if options[:constraints].any? { |c| contradiction?(c) }
|
|
163
|
+
|
|
164
|
+
options[:constraints] = options[:constraints].reject { |c| tautology?(c) }
|
|
165
|
+
options[:closed_fds] = processor.closed_fds
|
|
166
|
+
OneGadget::Gadget::Gadget.new(offset_of(lines.first), **options)
|
|
40
167
|
end
|
|
41
168
|
|
|
42
169
|
# Fetch candidates that end with call exec*.
|
|
@@ -48,23 +175,8 @@ module OneGadget
|
|
|
48
175
|
# True for valid.
|
|
49
176
|
# @return [Array<String>]
|
|
50
177
|
# Each +String+ returned is multi-lines of assembly code.
|
|
51
|
-
def candidates(&
|
|
52
|
-
|
|
53
|
-
cands = []
|
|
54
|
-
`#{@objdump.command}|grep -E '#{call_regexp}' -B 30`.split('--').each do |cand|
|
|
55
|
-
lines = cand.lines.map(&:strip).reject(&:empty?)
|
|
56
|
-
# split with call_regexp
|
|
57
|
-
loop do
|
|
58
|
-
idx = lines.index { |l| l =~ /#{call_regexp}/ }
|
|
59
|
-
break if idx.nil?
|
|
60
|
-
|
|
61
|
-
cands << lines.shift(idx + 1).join("\n")
|
|
62
|
-
end
|
|
63
|
-
end
|
|
64
|
-
# remove all jmps
|
|
65
|
-
cands = slice_prefix(cands, &method(:branch?))
|
|
66
|
-
cands.select!(&block) if block_given?
|
|
67
|
-
cands
|
|
178
|
+
def candidates(&)
|
|
179
|
+
branch_aware_candidates(&)
|
|
68
180
|
end
|
|
69
181
|
|
|
70
182
|
private
|
|
@@ -81,13 +193,12 @@ module OneGadget
|
|
|
81
193
|
call = processor.registers[processor.pc].to_s
|
|
82
194
|
return resolve_posix_spawn(processor) if call.include?('posix_spawn')
|
|
83
195
|
return resolve_execve(processor) if call.include?('execve')
|
|
84
|
-
|
|
196
|
+
|
|
197
|
+
resolve_execl(processor) if call.include?('execl')
|
|
85
198
|
end
|
|
86
199
|
|
|
87
200
|
def resolve_execve(processor)
|
|
88
|
-
arg0 = processor.argument(
|
|
89
|
-
arg1 = processor.argument(1).to_s
|
|
90
|
-
arg2 = processor.argument(2).to_s
|
|
201
|
+
arg0, arg1, arg2 = (0..2).map { |i| processor.argument(i) }
|
|
91
202
|
res = resolve_execve_args(processor, arg0, arg1, arg2)
|
|
92
203
|
return nil if res.nil?
|
|
93
204
|
|
|
@@ -95,7 +206,7 @@ module OneGadget
|
|
|
95
206
|
end
|
|
96
207
|
|
|
97
208
|
def resolve_execve_args(processor, arg0, arg1, arg2, allow_null_argv: true)
|
|
98
|
-
return unless str_bin_sh?(arg0)
|
|
209
|
+
return unless str_bin_sh?(arg0.to_s)
|
|
99
210
|
|
|
100
211
|
# arg1 == NULL || [arg1] == NULL
|
|
101
212
|
# arg2 == NULL || [arg2] == NULL || arg[2] == envp
|
|
@@ -110,29 +221,83 @@ module OneGadget
|
|
|
110
221
|
envp = arg2
|
|
111
222
|
end
|
|
112
223
|
|
|
113
|
-
{ constraints: cons, envp:
|
|
224
|
+
{ constraints: cons, envp: }
|
|
114
225
|
end
|
|
115
226
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
227
|
+
# Generate the +argv+-related constraint for an +exec*+ call.
|
|
228
|
+
#
|
|
229
|
+
# Terminology shared by all the +argv+ helpers below:
|
|
230
|
+
# * +argv_ptr+ - the *pointer to* the argv array, i.e. the emulated content of the register passed
|
|
231
|
+
# as +argv+ ({OneGadget::Emulators::Processor#argument}), kept as the emulator produced it.
|
|
232
|
+
# Examples: +rsi+, +rsp+0x10+, +[rbp-0x8]+, a global-variable reference, or a bare integer.
|
|
233
|
+
# * +argv+ - the array *pointed to* by +argv_ptr+: its dereferenced entries
|
|
234
|
+
# +[argv[0], argv[1], argv[2], argv[3]]+, each already converted to a string.
|
|
235
|
+
#
|
|
236
|
+
# @param [OneGadget::Emulators::Processor] processor The processor state at the call site.
|
|
237
|
+
# @param [OneGadget::Emulators::Lambda, Integer] argv_ptr The pointer to the argv array. See above.
|
|
238
|
+
# @param [Boolean] allow_null
|
|
239
|
+
# Whether +argv_ptr+ itself may be +NULL+ (true for +execve+, false for +posix_spawn+).
|
|
240
|
+
# @return [String, nil, false] How {#resolve_execve_args} should treat this argv:
|
|
241
|
+
# a +String+ is a constraint it must add; +nil+ means the argv is already
|
|
242
|
+
# valid so no constraint is needed; +false+ means the argv can never launch
|
|
243
|
+
# a shell (e.g. a fixed noexec option), which it consumes as an
|
|
244
|
+
# unsatisfiable constraint and drops the gadget.
|
|
245
|
+
def check_argv(processor, argv_ptr, allow_null)
|
|
246
|
+
argv_ptr = resolve_stack_deref(processor, argv_ptr)
|
|
247
|
+
return check_stack_argv(processor, argv_ptr, allow_null) if resolvable_stack(processor, argv_ptr)
|
|
248
|
+
|
|
249
|
+
check_nonstack_argv(argv_ptr, allow_null)
|
|
250
|
+
end
|
|
122
251
|
|
|
123
|
-
|
|
252
|
+
# Whether resolving +lmda+'s target via tracked memory is worth attempting,
|
|
253
|
+
# as opposed to the plain opaque "==NULL || is a valid .." form
|
|
254
|
+
# ({#check_nonstack_argv}/the envp equivalent). Always true for the arch's
|
|
255
|
+
# dedicated stack/frame pointer. For anything else, only when element
|
|
256
|
+
# 0 -- what {#argv_already_valid?}/{#generate_argv_with_sh} branch on --
|
|
257
|
+
# was actually written within this candidate.
|
|
258
|
+
# @example element 0 tracked -- resolvable
|
|
259
|
+
# reg tracked (element 0), reg+0x8 tracked (element 1) => resolvable
|
|
260
|
+
# @example a later, unrelated write must not trigger array resolution
|
|
261
|
+
# reg+0x10 (element 2) tracked, reg/reg+0x8 (elements 0/1) untracked
|
|
262
|
+
# => not resolvable; falls back to the opaque form instead of a garbled array
|
|
263
|
+
# @param [OneGadget::Emulators::Processor] processor
|
|
264
|
+
# @param [OneGadget::Emulators::Lambda, Integer] lmda A pointer operand. A
|
|
265
|
+
# concrete address is never resolvable: nothing was tracked against it.
|
|
266
|
+
# @return [Hash{Integer => OneGadget::Emulators::Lambda}, nil]
|
|
267
|
+
def resolvable_stack(processor, lmda)
|
|
268
|
+
return nil unless lmda.is_a?(OneGadget::Emulators::Lambda)
|
|
269
|
+
|
|
270
|
+
stack, offset = processor.resolve_address(lmda)
|
|
271
|
+
return nil unless stack
|
|
272
|
+
return stack if lmda.deref_count.zero? && OneGadget::ABI.stack_register?(lmda.obj)
|
|
273
|
+
|
|
274
|
+
stack if stack.key?(offset)
|
|
124
275
|
end
|
|
125
276
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
277
|
+
# Handle the case where +argv_ptr+ points into memory this candidate wrote,
|
|
278
|
+
# so the +argv+ entries can be read off it.
|
|
279
|
+
# @param [OneGadget::Emulators::Lambda] argv_ptr The pointer to the argv array. See {#check_argv}.
|
|
280
|
+
# @return [String, nil, false] The same three-way contract as {#check_argv},
|
|
281
|
+
# which returns this value unchanged: a constraint, +nil+ (already valid),
|
|
282
|
+
# or +false+ (drop the gadget).
|
|
283
|
+
def check_stack_argv(processor, argv_ptr, allow_null)
|
|
284
|
+
stack, offset = processor.resolve_address(argv_ptr)
|
|
285
|
+
# A stack register we don't track a stack for (the frame pointer):
|
|
286
|
+
# fall back to treating it as an opaque pointer.
|
|
287
|
+
return check_nonstack_argv(argv_ptr, allow_null) if stack.nil?
|
|
288
|
+
|
|
289
|
+
argv = (0..3).map { |i| stack[offset + processor.class.bits / 8 * i].to_s }
|
|
290
|
+
|
|
291
|
+
# A shell spawned with a fixed "noexec" option never runs a command, so
|
|
292
|
+
# drop the gadget (see this method's @return for the +false+ contract).
|
|
293
|
+
return false if noexec_shell_argv?(argv)
|
|
129
294
|
|
|
130
295
|
# if argv is already valid, no constraints are needed! (but probably won't happen :p)
|
|
131
296
|
return if argv_already_valid?(argv)
|
|
132
297
|
|
|
133
298
|
return generate_argv_with_sh(argv) if global_var?(argv[0])
|
|
134
299
|
|
|
135
|
-
generate_argv_without_sh(argv, allow_null)
|
|
300
|
+
generate_argv_without_sh(argv_ptr, argv, allow_null)
|
|
136
301
|
end
|
|
137
302
|
|
|
138
303
|
def argv_already_valid?(argv)
|
|
@@ -149,22 +314,27 @@ module OneGadget
|
|
|
149
314
|
else
|
|
150
315
|
argv_gte3 = argv[3] == '0' ? 'NULL' : "#{argv[3]}, ..."
|
|
151
316
|
if global_var?(argv[1])
|
|
152
|
-
"
|
|
317
|
+
# A leading "sh -c" whose fixed elements (e.g. "-c", the "--" separator)
|
|
318
|
+
# are libc globals -- resolve them so the controllable command operand
|
|
319
|
+
# stands out (e.g. {"sh", "-c", "--", x21, ...}).
|
|
320
|
+
"{\"sh\", #{resolve_argv_element(argv[1])}, #{resolve_argv_element(argv[2])}, #{argv_gte3}} is a valid argv"
|
|
153
321
|
else
|
|
154
322
|
"#{argv[1]} == NULL || {\"sh\", #{argv[1]}, #{argv[2]}, #{argv_gte3}} is a valid argv"
|
|
155
323
|
end
|
|
156
324
|
end
|
|
157
325
|
end
|
|
158
326
|
|
|
159
|
-
|
|
327
|
+
# @param [String] argv_ptr The pointer to the argv array. See {#check_argv}.
|
|
328
|
+
# @param [Array<String>] argv The argv entries +argv_ptr+ points to, i.e. +[argv[0], .., argv[3]]+.
|
|
329
|
+
def generate_argv_without_sh(argv_ptr, argv, allow_null)
|
|
160
330
|
argv_cons = "{#{argv[0]}"
|
|
161
331
|
(1..argv.length - 1).each do |i|
|
|
162
332
|
if argv[i] == '0'
|
|
163
333
|
argv_cons += ', NULL'
|
|
164
334
|
break
|
|
165
|
-
elsif
|
|
166
|
-
#
|
|
167
|
-
argv_cons +=
|
|
335
|
+
elsif global_var?(argv[i])
|
|
336
|
+
# A fixed libc-global entry (e.g. "-c", "--") -- show its true content.
|
|
337
|
+
argv_cons += ", #{resolve_argv_element(argv[i])}"
|
|
168
338
|
else
|
|
169
339
|
argv_cons += ", #{argv[i]}"
|
|
170
340
|
end
|
|
@@ -173,37 +343,90 @@ module OneGadget
|
|
|
173
343
|
argv_cons += '} is a valid argv'
|
|
174
344
|
|
|
175
345
|
if allow_null && argv.all? { |a| OneGadget::ABI.stack_register?(a) }
|
|
176
|
-
# If libc writes something into the stack,
|
|
177
|
-
# TODO: Find a better way to check can
|
|
178
|
-
"#{
|
|
346
|
+
# If libc writes something into the stack, argv_ptr cannot be NULL.
|
|
347
|
+
# TODO: Find a better way to check can argv_ptr be NULL
|
|
348
|
+
"#{argv_ptr} == NULL || #{argv[0]} == NULL || #{argv_cons}"
|
|
179
349
|
else
|
|
180
350
|
"#{argv[0]} == NULL || #{argv_cons}"
|
|
181
351
|
end
|
|
182
352
|
end
|
|
183
353
|
|
|
184
|
-
|
|
354
|
+
# Whether +argv+ invokes the shell with a fixed option word that disables
|
|
355
|
+
# command execution. execve's program is always "/bin/sh", so +argv[1]+ is
|
|
356
|
+
# that shell's option word; a libc-global bundle carrying the noexec flag
|
|
357
|
+
# there yields a shell that reaches execve yet can never run a command --
|
|
358
|
+
# a false positive to drop.
|
|
359
|
+
# @param [Array<String>] argv The resolved argv entries. See {#check_stack_argv}.
|
|
360
|
+
# @return [Boolean]
|
|
361
|
+
# @example decided by argv[1]'s libc-global content (via global_str_content)
|
|
362
|
+
# # content "-nc" carries bash's noexec 'n' => true;
|
|
363
|
+
# # "-c" runs the command => false; a non-global (attacker) word => false
|
|
364
|
+
def noexec_shell_argv?(argv)
|
|
365
|
+
opt = global_str_content(argv[1])
|
|
366
|
+
!opt.nil? && opt.match?(/\A-[a-zA-Z]*n[a-zA-Z]*\z/)
|
|
367
|
+
end
|
|
368
|
+
|
|
369
|
+
# Handle the case where +argv_ptr+ is not a plain stack pointer (e.g. a register or global variable).
|
|
370
|
+
# @param [String] argv_ptr The pointer to the argv array. See {#check_argv}.
|
|
371
|
+
def check_nonstack_argv(argv_ptr, allow_null)
|
|
185
372
|
if allow_null
|
|
186
|
-
"[#{
|
|
373
|
+
"[#{argv_ptr}] == NULL || #{argv_ptr} == NULL || #{argv_ptr} is a valid argv"
|
|
187
374
|
else
|
|
188
|
-
"[#{
|
|
375
|
+
"[#{argv_ptr}] == NULL || #{argv_ptr} is a valid argv"
|
|
189
376
|
end
|
|
190
377
|
end
|
|
191
378
|
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
379
|
+
# If +ptr+ is a single dereference of a tracked stack slot, resolve it to
|
|
380
|
+
# that slot's own tracked value so the rest of argv/envp resolution can
|
|
381
|
+
# treat it like a bare register instead of an opaque pointer.
|
|
382
|
+
# @param [OneGadget::Emulators::Processor] processor
|
|
383
|
+
# @param [OneGadget::Emulators::Lambda, Integer] ptr An argv_ptr/envp_ptr.
|
|
384
|
+
# @return [OneGadget::Emulators::Lambda, Integer] +ptr+, or the value it
|
|
385
|
+
# resolves to when it simplifies.
|
|
386
|
+
# @example a tracked slot resolves to its source register
|
|
387
|
+
# # mov [ebp-0x30], ecx (earlier in the same candidate)
|
|
388
|
+
# resolve_stack_deref(processor, Lambda.parse('[ebp-0x30]')) #=> the ecx lambda
|
|
389
|
+
# @example an untracked slot is a no-op
|
|
390
|
+
# resolve_stack_deref(processor, Lambda.parse('[ebp-0x40]')) #=> that same lambda
|
|
391
|
+
def resolve_stack_deref(processor, ptr)
|
|
392
|
+
return ptr unless ptr.is_a?(OneGadget::Emulators::Lambda) && ptr.deref_count == 1 &&
|
|
393
|
+
OneGadget::ABI.stack_register?(ptr.obj)
|
|
394
|
+
|
|
395
|
+
stack, offset = processor.resolve_address(ptr.dup.ref!)
|
|
396
|
+
tracked = stack && stack[offset]
|
|
397
|
+
return ptr unless tracked.is_a?(OneGadget::Emulators::Lambda) && tracked.deref_count.zero?
|
|
398
|
+
|
|
399
|
+
tracked
|
|
400
|
+
end
|
|
197
401
|
|
|
198
|
-
|
|
199
|
-
|
|
402
|
+
# Generate the +envp+-related constraint for an +exec*+ call.
|
|
403
|
+
#
|
|
404
|
+
# Mirrors the +argv+ terminology from {#check_argv}: +envp_ptr+ is the *pointer to* the envp array
|
|
405
|
+
# ({OneGadget::Emulators::Processor#argument}), while +envp+ is the array of dereferenced entries
|
|
406
|
+
# it points to.
|
|
407
|
+
#
|
|
408
|
+
# @param [OneGadget::Emulators::Processor] processor The processor state at the call site.
|
|
409
|
+
# @param [OneGadget::Emulators::Lambda, Integer] envp_ptr The pointer to the envp array.
|
|
410
|
+
# @yieldparam [String] cons The +envp+ constraint, yielded only when one is required.
|
|
411
|
+
# @return [Object, nil] Truthy when +envp+ is acceptable, +nil+ to reject the gadget.
|
|
412
|
+
def check_envp(processor, envp_ptr)
|
|
413
|
+
# A doubly-dereferenced pointer that names a global variable is believed to
|
|
414
|
+
# be environ; one that doesn't drops the gadget.
|
|
415
|
+
return global_var?(envp_ptr.to_s) if envp_ptr.is_a?(OneGadget::Emulators::Lambda) &&
|
|
416
|
+
envp_ptr.deref_count >= 2
|
|
417
|
+
|
|
418
|
+
envp_ptr = resolve_stack_deref(processor, envp_ptr)
|
|
419
|
+
# A concrete integer, or a register with nothing useful tracked for it,
|
|
420
|
+
# falls through to the opaque-pointer case (see {#resolvable_stack}).
|
|
421
|
+
stack = envp_ptr.is_a?(OneGadget::Emulators::Lambda) && envp_ptr.deref_count.zero? &&
|
|
422
|
+
resolvable_stack(processor, envp_ptr)
|
|
423
|
+
if stack
|
|
200
424
|
# I haven't see this case after some tests, but just in case :)
|
|
201
|
-
|
|
202
|
-
envp = (0..3).map { |i| stack[lmda.immi + processor.class.bits / 8 * i].to_s }
|
|
425
|
+
envp = (0..3).map { |i| stack[envp_ptr.immi + processor.class.bits / 8 * i].to_s }
|
|
203
426
|
# TODO: Handle the case when libc will write something into envp
|
|
204
|
-
cons = global_var?(envp[0]) ? nil : "#{
|
|
427
|
+
cons = global_var?(envp[0]) ? nil : "#{envp_ptr} == NULL || {#{envp.join(', ')}, ...} is a valid envp"
|
|
205
428
|
else
|
|
206
|
-
cons = "[#{
|
|
429
|
+
cons = "[#{envp_ptr}] == NULL || #{envp_ptr} == NULL || #{envp_ptr} is a valid envp"
|
|
207
430
|
end
|
|
208
431
|
return nil if cons.nil?
|
|
209
432
|
|
|
@@ -235,7 +458,11 @@ module OneGadget
|
|
|
235
458
|
# Meet all constraints then posix_spawn eventually calls execve(path, argv, envp)
|
|
236
459
|
def resolve_posix_spawn(processor)
|
|
237
460
|
args = Array.new(6) { |i| processor.argument(i) }
|
|
238
|
-
|
|
461
|
+
# pid/file_actions/attrp are reasoned about as pointers (Lambdas); a
|
|
462
|
+
# concrete non-zero integer there is a fixed address we can't constrain.
|
|
463
|
+
return nil if [args[0], args[2], args[3]].any? { |a| a.is_a?(Integer) && !a.zero? }
|
|
464
|
+
|
|
465
|
+
res = resolve_execve_args(processor, args[1], args[4], args[5], allow_null_argv: false)
|
|
239
466
|
return nil if res.nil?
|
|
240
467
|
|
|
241
468
|
cons = res[:constraints]
|
|
@@ -248,9 +475,9 @@ module OneGadget
|
|
|
248
475
|
end
|
|
249
476
|
end
|
|
250
477
|
arg2 = args[2]
|
|
251
|
-
cons << "#{arg2} == NULL || (s32)#{(arg2 + 4).deref} <=
|
|
478
|
+
cons << "#{arg2} == NULL || (s32)#{(arg2 + 4).deref} <= 0x0" if arg2.to_s != '0'
|
|
252
479
|
arg3 = args[3]
|
|
253
|
-
cons << "#{arg3} == NULL || (u16)#{arg3.deref} ==
|
|
480
|
+
cons << "#{arg3} == NULL || (u16)#{arg3.deref} == 0x0" if arg3.to_s != '0'
|
|
254
481
|
|
|
255
482
|
{ constraints: cons, effect: %(posix_spawn(#{arg0}, "/bin/sh", #{arg2}, #{arg3}, #{args[4]}, #{res[:envp]})) }
|
|
256
483
|
end
|
|
@@ -258,6 +485,39 @@ module OneGadget
|
|
|
258
485
|
def global_var?(_str); raise NotImplementedError
|
|
259
486
|
end
|
|
260
487
|
|
|
488
|
+
# Whether +str+ names a value at a fixed offset from +base+, i.e. an address
|
|
489
|
+
# whose content can be read out of the file. An operation applied to such an
|
|
490
|
+
# address (see {OneGadget::Emulators::Lambda.operation}) is that address plus
|
|
491
|
+
# whatever the caller supplies, so it names no particular byte and must not be
|
|
492
|
+
# resolved as though it did.
|
|
493
|
+
# @param [String] str A rendered value.
|
|
494
|
+
# @param [String] base The token a libc-relative address renders against.
|
|
495
|
+
# @return [Boolean]
|
|
496
|
+
# @example A fixed global, and the same global offset by a register.
|
|
497
|
+
# base_relative?('$base+0x10', '$base') #=> true
|
|
498
|
+
# base_relative?('(r3 + $base+0x10)', '$base') #=> false
|
|
499
|
+
def base_relative?(str, base)
|
|
500
|
+
str.match?(/\A\[*#{Regexp.escape(base)}(?:[+-]0x[0-9a-f]+)?\]*\z/)
|
|
501
|
+
end
|
|
502
|
+
|
|
503
|
+
# The requirement that a value be libc's GOT base, when a register holds it.
|
|
504
|
+
# That is a precondition a caller can arrange and a reader can check: set
|
|
505
|
+
# the register before jumping. A candidate whose window loads the base out
|
|
506
|
+
# of memory instead names a location nobody sets up -- there is no register
|
|
507
|
+
# to point anywhere -- so it is refused rather than stated as a constraint
|
|
508
|
+
# nothing can meet.
|
|
509
|
+
# @param [OneGadget::Emulators::Processor] processor
|
|
510
|
+
# @param [String] holder Where the candidate found the GOT base.
|
|
511
|
+
# @return [String?] The constraint, or +nil+ if the candidate must be refused.
|
|
512
|
+
# @example
|
|
513
|
+
# got_base_constraint(processor, 'ecx') #=> "ecx is the GOT address of libc"
|
|
514
|
+
# got_base_constraint(processor, '[ebp-0x2c]') #=> nil
|
|
515
|
+
def got_base_constraint(processor, holder)
|
|
516
|
+
return nil unless processor.registers.key?(holder)
|
|
517
|
+
|
|
518
|
+
"#{holder} is the GOT address of libc"
|
|
519
|
+
end
|
|
520
|
+
|
|
261
521
|
def str_bin_sh?(_str); raise NotImplementedError
|
|
262
522
|
end
|
|
263
523
|
|
|
@@ -267,6 +527,12 @@ module OneGadget
|
|
|
267
527
|
def call_str; raise NotImplementedError
|
|
268
528
|
end
|
|
269
529
|
|
|
530
|
+
# Run a window through a fresh emulator, stopping at the first line it can't
|
|
531
|
+
# process (an unsupported instruction, or the terminal call that ends the
|
|
532
|
+
# gadget). +cmds+ is an executed window (see {#executed_windows}): every line
|
|
533
|
+
# in it runs, so an override may read it as evidence of what the path does.
|
|
534
|
+
# @param [Array<String>] cmds
|
|
535
|
+
# @return [OneGadget::Emulators::Processor]
|
|
270
536
|
def emulate(cmds)
|
|
271
537
|
cmds.each_with_object(emulator) { |cmd, obj| break obj unless obj.process(cmd) }
|
|
272
538
|
end
|
|
@@ -278,26 +544,400 @@ module OneGadget
|
|
|
278
544
|
[]
|
|
279
545
|
end
|
|
280
546
|
|
|
281
|
-
def
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
to_rm = lines[0...-1].rindex(&block)
|
|
285
|
-
lines = lines[to_rm + 1..-1] unless to_rm.nil?
|
|
286
|
-
lines.join
|
|
287
|
-
end
|
|
547
|
+
def str_offset(str)
|
|
548
|
+
file_bytes.index("#{str}\x00") ||
|
|
549
|
+
raise(Error::ArgumentError, "File #{file.inspect} doesn't contain string #{str.inspect}, not glibc?")
|
|
288
550
|
end
|
|
289
551
|
|
|
290
|
-
#
|
|
291
|
-
|
|
552
|
+
# The target's bytes, read once: a gadget names fixed strings by file offset,
|
|
553
|
+
# and every argv entry of every candidate asks for them again.
|
|
554
|
+
# @return [String]
|
|
555
|
+
def file_bytes
|
|
556
|
+
@file_bytes ||= File.binread(file)
|
|
292
557
|
end
|
|
293
558
|
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
559
|
+
# Render one argv/envp entry for a constraint. A libc global that points to a
|
|
560
|
+
# fixed string is shown as that string (its true content); a controllable
|
|
561
|
+
# operand, or a global that isn't a plain string, is shown unchanged.
|
|
562
|
+
# @param [String] element A single argv entry.
|
|
563
|
+
# @example +$base+0x16b250+ -> +"--"+ (the do_system separator); +x21+ -> +x21+.
|
|
564
|
+
# @return [String]
|
|
565
|
+
def resolve_argv_element(element)
|
|
566
|
+
content = global_str_content(element)
|
|
567
|
+
content ? content.inspect : element
|
|
568
|
+
end
|
|
569
|
+
|
|
570
|
+
# The NUL-terminated printable string a resolved-offset global (+$base+<off>+)
|
|
571
|
+
# points to, or +nil+ when +element+ isn't such a global or the bytes aren't a
|
|
572
|
+
# short printable string. Architectures whose globals aren't yet
|
|
573
|
+
# file-offset-relative simply fall through.
|
|
574
|
+
# @param [String] element
|
|
575
|
+
# @return [String, nil]
|
|
576
|
+
def global_str_content(element)
|
|
577
|
+
off = string_file_offset(element) or return nil
|
|
578
|
+
|
|
579
|
+
bytes = file_bytes
|
|
580
|
+
return nil unless off.between?(0, bytes.size - 1)
|
|
581
|
+
|
|
582
|
+
stop = bytes.index("\x00", off) or return nil
|
|
583
|
+
str = bytes[off...stop]
|
|
584
|
+
str if str.length.between?(1, 16) && str.each_byte.all? { |c| c.between?(0x20, 0x7e) }
|
|
585
|
+
end
|
|
586
|
+
|
|
587
|
+
# The file offset a fixed address names, or +nil+ when +element+ isn't one.
|
|
588
|
+
# Here that is the resolved-offset form an arch produces once it concretizes
|
|
589
|
+
# a pc-relative operand; an arch that reaches its globals through a register
|
|
590
|
+
# instead overrides this (see +I386#string_file_offset+).
|
|
591
|
+
# @param [String] element
|
|
592
|
+
# @return [Integer, nil]
|
|
593
|
+
def string_file_offset(element)
|
|
594
|
+
m = /\A\$base\+(0x[0-9a-f]+)\z/.match(element) or return nil
|
|
595
|
+
|
|
596
|
+
m[1].to_i(16)
|
|
297
597
|
end
|
|
298
598
|
|
|
299
599
|
def offset_of(assembly)
|
|
300
|
-
assembly
|
|
600
|
+
assembly[/\A([\da-f]+):/, 1].to_i(16)
|
|
601
|
+
end
|
|
602
|
+
|
|
603
|
+
# Whether a single (non-disjunctive) branch condition already settles itself,
|
|
604
|
+
# asking nothing of the caller: +X == X+ is always true, +X != X+ never is,
|
|
605
|
+
# and so on for any two sides {#comparable_values} can put a number to.
|
|
606
|
+
# @param [String] con One constraint.
|
|
607
|
+
# @return [Boolean, nil] Whether the relation holds, or nil when it depends
|
|
608
|
+
# on something the caller arranges -- i.e. it is a real constraint.
|
|
609
|
+
def trivial_relation(con)
|
|
610
|
+
return nil if con.include?(' || ')
|
|
611
|
+
|
|
612
|
+
m = con.match(/\A(?:\([su]\d+\))?(.+?) (==|!=|<=|>=|<|>) (.+)\z/)
|
|
613
|
+
return nil unless m
|
|
614
|
+
|
|
615
|
+
lhs, rhs = comparable_values(m[1], m[3])
|
|
616
|
+
return nil if lhs.nil?
|
|
617
|
+
|
|
618
|
+
lhs.public_send(m[2] == '!=' ? :!= : m[2].to_sym, rhs)
|
|
619
|
+
end
|
|
620
|
+
|
|
621
|
+
# The two sides of a relation as plain numbers, when they can be compared
|
|
622
|
+
# without the caller arranging anything: the same expression twice, two
|
|
623
|
+
# concrete values, or two offsets from one base (+r1+ against +r1+0x4+ can
|
|
624
|
+
# never be equal). +nil+ leaves the relation a real constraint.
|
|
625
|
+
#
|
|
626
|
+
# Offsets are only comparable undereferenced. +[r1]+ and +[r1+0x4]+ address
|
|
627
|
+
# different slots, but the values in them are unrelated -- nothing says they
|
|
628
|
+
# differ.
|
|
629
|
+
# @param [String] lhs The relation's left side, cast already stripped.
|
|
630
|
+
# @param [String] rhs The relation's right side.
|
|
631
|
+
# @return [(Numeric, Numeric), nil] Both sides as numbers, or nil when they
|
|
632
|
+
# cannot be compared without knowing what the caller supplies.
|
|
633
|
+
def comparable_values(lhs, rhs)
|
|
634
|
+
return [0, 0] if lhs == rhs
|
|
635
|
+
|
|
636
|
+
left = OneGadget::Emulators::Lambda.parse(lhs)
|
|
637
|
+
right = OneGadget::Emulators::Lambda.parse(rhs)
|
|
638
|
+
return [left, right] if left.is_a?(Integer) && right.is_a?(Integer)
|
|
639
|
+
return nil unless [left, right].all? do |l|
|
|
640
|
+
l.is_a?(OneGadget::Emulators::Lambda) && l.deref_count.zero? && !l.operation?
|
|
641
|
+
end
|
|
642
|
+
return nil unless left.obj.to_s == right.obj.to_s
|
|
643
|
+
|
|
644
|
+
[left.immi, right.immi]
|
|
645
|
+
rescue OneGadget::Error::Error
|
|
646
|
+
nil
|
|
647
|
+
end
|
|
648
|
+
|
|
649
|
+
def tautology?(con)
|
|
650
|
+
trivial_relation(con) == true
|
|
651
|
+
end
|
|
652
|
+
|
|
653
|
+
def contradiction?(con)
|
|
654
|
+
trivial_relation(con) == false
|
|
655
|
+
end
|
|
656
|
+
|
|
657
|
+
# Regexp (as a String) matching an objdump line that calls a terminal
|
|
658
|
+
# function (+exec*+ / +posix_spawn*+) we can turn into a gadget.
|
|
659
|
+
def terminal_call_regexp
|
|
660
|
+
"#{call_str}.*<(exec[^+]*|posix_spawn[^+]*)>$"
|
|
661
|
+
end
|
|
662
|
+
|
|
663
|
+
# Enumerate gadget candidates by walking the control-flow graph *backward*
|
|
664
|
+
# from each terminal call along its predecessors (the instruction that falls
|
|
665
|
+
# through to it, plus any branch that targets it), forking at conditional
|
|
666
|
+
# edges up to {MAX_FORKS} times. Each emitted candidate is a flat,
|
|
667
|
+
# address-preserving line-list ending at the terminal call, consumed
|
|
668
|
+
# unchanged by {#find}; the emulator turns each crossed conditional edge into
|
|
669
|
+
# a constraint (see {OneGadget::Emulators::Conditional}).
|
|
670
|
+
def branch_aware_candidates(&)
|
|
671
|
+
cands = []
|
|
672
|
+
re = /#{terminal_call_regexp}/
|
|
673
|
+
disasm_lines.each_with_index do |line, idx|
|
|
674
|
+
next unless line.match?(re)
|
|
675
|
+
|
|
676
|
+
back_walk(idx, 0, Set.new, []) { |lines| cands << lines.join("\n") }
|
|
677
|
+
end
|
|
678
|
+
cands.uniq!
|
|
679
|
+
cands.select!(&) if block_given?
|
|
680
|
+
cands
|
|
681
|
+
end
|
|
682
|
+
|
|
683
|
+
# Depth-first backward walk. +visited+ (a Set) and +path+ are mutated with
|
|
684
|
+
# backtracking so a fork explores independently without per-step copies;
|
|
685
|
+
# +path+ is built in forward order (the terminal call stays last). Emits a
|
|
686
|
+
# candidate at each leaf - {#find} then tries every start line within it.
|
|
687
|
+
def back_walk(idx, forks, visited, path, &blk)
|
|
688
|
+
addr = addr_at(idx)
|
|
689
|
+
return if path.size >= PATH_BUDGET
|
|
690
|
+
|
|
691
|
+
visited.add(addr)
|
|
692
|
+
path.unshift(disasm_lines[idx])
|
|
693
|
+
edges = predecessors(idx).reject do |pidx, cond|
|
|
694
|
+
visited.include?(addr_at(pidx)) || (cond && forks >= MAX_FORKS)
|
|
695
|
+
end
|
|
696
|
+
if edges.empty?
|
|
697
|
+
blk.call(path.dup)
|
|
698
|
+
else
|
|
699
|
+
edges.each { |pidx, cond| back_walk(pidx, forks + (cond ? 1 : 0), visited, path, &blk) }
|
|
700
|
+
end
|
|
701
|
+
path.shift
|
|
702
|
+
visited.delete(addr)
|
|
703
|
+
end
|
|
704
|
+
|
|
705
|
+
# The address of the instruction at +idx+, remembered as it is asked for.
|
|
706
|
+
# Only the lines the backward walk reaches ever need one, a small part of a
|
|
707
|
+
# whole libc's disassembly.
|
|
708
|
+
def addr_at(idx)
|
|
709
|
+
(@addr_at ||= {})[idx] ||= offset_of(disasm_lines[idx])
|
|
710
|
+
end
|
|
711
|
+
|
|
712
|
+
# Predecessors of +disasm_lines[idx]+ as +[pred_index, conditional_edge?]+:
|
|
713
|
+
# the instruction that falls through to it, plus any branch that targets it.
|
|
714
|
+
# Computed lazily (the walk only touches lines near terminal calls) and cached.
|
|
715
|
+
def predecessors(idx)
|
|
716
|
+
(@predecessors ||= {})[idx] ||= begin
|
|
717
|
+
preds = []
|
|
718
|
+
# Nothing falls through into the first line of a window: the line before
|
|
719
|
+
# it is the last of another window, a different part of the binary.
|
|
720
|
+
if idx.positive? && !window_starts.key?(idx)
|
|
721
|
+
kind = branch_kind(disasm_lines[idx - 1])
|
|
722
|
+
preds << [idx - 1, kind == :conditional] unless %i[unconditional terminator].include?(kind)
|
|
723
|
+
end
|
|
724
|
+
(branch_pred_map[addr_at(idx)] || []).each do |b|
|
|
725
|
+
preds << [b, branch_kind(disasm_lines[b]) == :conditional]
|
|
726
|
+
end
|
|
727
|
+
preds
|
|
728
|
+
end
|
|
729
|
+
end
|
|
730
|
+
|
|
731
|
+
# Map of target-address => indexes of (conditional or unconditional) direct
|
|
732
|
+
# branches that jump there. Scans the whole disassembly once (a branch can
|
|
733
|
+
# target a call region from anywhere), so keep the per-line test cheap.
|
|
734
|
+
def branch_pred_map
|
|
735
|
+
@branch_pred_map ||= Base.cached(:branch_pred, @objdump.command) do
|
|
736
|
+
lead = branch_lead_regex
|
|
737
|
+
disasm_lines.each_with_index.with_object(Hash.new { |h, k| h[k] = [] }) do |(line, i), map|
|
|
738
|
+
# Cheap precompiled reject (no per-line allocation) before the full test.
|
|
739
|
+
next unless line.match?(lead)
|
|
740
|
+
next unless %i[conditional unconditional].include?(branch_kind(line))
|
|
741
|
+
|
|
742
|
+
tgt = branch_target(line)
|
|
743
|
+
map[tgt] << i if tgt
|
|
744
|
+
end
|
|
745
|
+
end
|
|
746
|
+
end
|
|
747
|
+
|
|
748
|
+
# Precompiled over-approximation of a branch line, built from the arch's
|
|
749
|
+
# {#branch_lead_chars}, to skip the full test for the (majority) non-branch
|
|
750
|
+
# lines during the whole-binary scan.
|
|
751
|
+
def branch_lead_regex
|
|
752
|
+
@branch_lead_regex ||= /\A[0-9a-f]+:\s+[#{branch_lead_chars}]/
|
|
753
|
+
end
|
|
754
|
+
|
|
755
|
+
# Parse the (direct) target address of a branch line, or +nil+ if indirect.
|
|
756
|
+
def branch_target(line)
|
|
757
|
+
line.sub(/\A[0-9a-f]+:\s*\S+\s*/, '')[/\b([0-9a-f]+)\b\s*(?:<|\z)/, 1]&.to_i(16)
|
|
758
|
+
end
|
|
759
|
+
|
|
760
|
+
# The mnemonic of an objdump line, memoized because each line is tested by
|
|
761
|
+
# several branch predicates during the CFG scan.
|
|
762
|
+
# @example
|
|
763
|
+
# mnemonic('4a1d0: b.ne 4a200 <foo>') #=> 'b.ne'
|
|
764
|
+
# mnemonic('4a1c0: cbz x0, 4a200') #=> 'cbz'
|
|
765
|
+
def mnemonic(line)
|
|
766
|
+
(@mnemonic ||= {})[line] ||= line[/\A[0-9a-f]+:\s*(\S+)/, 1] || ''
|
|
767
|
+
end
|
|
768
|
+
|
|
769
|
+
# Classify a disassembly +line+ for the control-flow walk (arch-specific):
|
|
770
|
+
# :conditional - may or may not be taken; the walk explores both edges
|
|
771
|
+
# and turns the decision into a gadget constraint
|
|
772
|
+
# :unconditional - always taken, to a determined (direct) target
|
|
773
|
+
# :terminator - ends the path with no determined successor (a return or
|
|
774
|
+
# an indirect/computed jump)
|
|
775
|
+
# nil - not a branch; execution falls through to the next line
|
|
776
|
+
def branch_kind(_line); raise NotImplementedError
|
|
777
|
+
end
|
|
778
|
+
|
|
779
|
+
# The leading character(s) of this arch's branch mnemonics, used to build
|
|
780
|
+
# {#branch_lead_regex}. Must be plain regex-safe literals: they are spliced
|
|
781
|
+
# into a character class, so no +]+, +\+, +-+ or +^+.
|
|
782
|
+
# @example
|
|
783
|
+
# 'bct' # aarch64/arm: b, cbz/cbnz, tbz/tbnz
|
|
784
|
+
# 'j' # x86: jmp, jcc
|
|
785
|
+
def branch_lead_chars; raise NotImplementedError
|
|
786
|
+
end
|
|
787
|
+
|
|
788
|
+
# The target's objdump disassembly as stripped +"ADDR: insn"+ lines.
|
|
789
|
+
def disasm_lines
|
|
790
|
+
disassembly[:lines]
|
|
791
|
+
end
|
|
792
|
+
|
|
793
|
+
# Where in {#disasm_lines} each window begins, keyed for lookup. Empty when
|
|
794
|
+
# the whole file was disassembled, since then every line does follow the one
|
|
795
|
+
# before it.
|
|
796
|
+
# @return [Hash{Integer => true}]
|
|
797
|
+
def window_starts
|
|
798
|
+
disassembly[:starts]
|
|
799
|
+
end
|
|
800
|
+
|
|
801
|
+
# The disassembly and the shape it was taken in, cached (per objdump command)
|
|
802
|
+
# for the lifetime of the fetcher.
|
|
803
|
+
# @return [Hash{Symbol => Array<String>, Hash}]
|
|
804
|
+
def disassembly
|
|
805
|
+
@disassembly ||= Base.cached(:disasm, @objdump.command) do
|
|
806
|
+
sites = terminal_call_sites
|
|
807
|
+
sites.nil? || sites.empty? ? full_disasm : windowed_disasm(sites)
|
|
808
|
+
end
|
|
809
|
+
end
|
|
810
|
+
|
|
811
|
+
# Disassemble the whole file (the exhaustive default).
|
|
812
|
+
def full_disasm
|
|
813
|
+
{ lines: objdump_lines, starts: {} }
|
|
814
|
+
end
|
|
815
|
+
|
|
816
|
+
# Disassemble only [call-WINDOW_BACK, call+WINDOW_FWD] around each call site,
|
|
817
|
+
# merging overlaps. Used when {#terminal_call_sites} located the calls without
|
|
818
|
+
# a full disassembly (the win on the slow-to-objdump Thumb-2 arm libcs).
|
|
819
|
+
def windowed_disasm(sites)
|
|
820
|
+
windows = sites.sort.map { |a| [[a - WINDOW_BACK, 0].max, a + WINDOW_FWD] }
|
|
821
|
+
# One objdump per window, all at once: they are separate processes that
|
|
822
|
+
# wait on each other for nothing, and a libc comes to a handful of windows.
|
|
823
|
+
disassembled = merge_ranges(windows)
|
|
824
|
+
.map { |lo, hi| Thread.new { objdump_lines(start: lo, stop: hi) } }
|
|
825
|
+
.map(&:value)
|
|
826
|
+
starts = {}
|
|
827
|
+
lines = disassembled.each_with_object([]) do |window, acc|
|
|
828
|
+
starts[acc.size] = true
|
|
829
|
+
acc.concat(window)
|
|
830
|
+
end
|
|
831
|
+
{ lines:, starts: }
|
|
832
|
+
end
|
|
833
|
+
|
|
834
|
+
# Merge a list of sorted [lo, hi] ranges, coalescing any that overlap.
|
|
835
|
+
def merge_ranges(ranges)
|
|
836
|
+
ranges.each_with_object([]) do |(lo, hi), merged|
|
|
837
|
+
if merged.last && lo <= merged.last[1]
|
|
838
|
+
merged.last[1] = hi if hi > merged.last[1]
|
|
839
|
+
else
|
|
840
|
+
merged << [lo, hi]
|
|
841
|
+
end
|
|
842
|
+
end
|
|
843
|
+
end
|
|
844
|
+
|
|
845
|
+
# An objdump line carries an instruction when it opens with its address.
|
|
846
|
+
DISASSEMBLED = /\A[0-9a-f]+:/
|
|
847
|
+
private_constant :DISASSEMBLED
|
|
848
|
+
|
|
849
|
+
def objdump_lines(start: nil, stop: nil)
|
|
850
|
+
# One pass, one string per line: a whole libc is hundreds of thousands of
|
|
851
|
+
# them, and only the instructions are wanted.
|
|
852
|
+
`#{@objdump.command(start:, stop:)}`.each_line.filter_map do |line|
|
|
853
|
+
line = line.strip
|
|
854
|
+
line if DISASSEMBLED.match?(line)
|
|
855
|
+
end
|
|
856
|
+
end
|
|
857
|
+
|
|
858
|
+
# Addresses of the calls reaching a terminal function, found without
|
|
859
|
+
# disassembling anything: the +exec*+/+posix_spawn*+ symbols are read out of
|
|
860
|
+
# the ELF and +.text+ is scanned for direct calls into them (see
|
|
861
|
+
# {#scan_calls}). +nil+ when the file cannot be read that way, so the caller
|
|
862
|
+
# disassembles everything instead.
|
|
863
|
+
# @return [Array<Integer>, nil]
|
|
864
|
+
def terminal_call_sites
|
|
865
|
+
File.open(file) do |fd|
|
|
866
|
+
elf = ELFTools::ELFFile.new(fd)
|
|
867
|
+
return nil unless elf.endian == :little
|
|
868
|
+
|
|
869
|
+
targets = terminal_symbol_addresses(elf)
|
|
870
|
+
return [] if targets.empty?
|
|
871
|
+
|
|
872
|
+
text = elf.section_by_name('.text')
|
|
873
|
+
return nil if text.nil?
|
|
874
|
+
|
|
875
|
+
scan_calls(text.header.sh_addr.to_i, text.data, targets)
|
|
876
|
+
end
|
|
877
|
+
rescue ELFTools::ELFError
|
|
878
|
+
nil # not something we can scan; disassemble everything
|
|
879
|
+
end
|
|
880
|
+
|
|
881
|
+
# The addresses in +data+ (loaded at +base+) of direct calls into +targets+.
|
|
882
|
+
# Over-approximating is fine -- a false positive only adds a window nothing
|
|
883
|
+
# is found in -- while a missed call costs every gadget around it.
|
|
884
|
+
# @param [Integer] _base
|
|
885
|
+
# @param [String] _data
|
|
886
|
+
# @param [Hash{Integer => true}] _targets
|
|
887
|
+
# @return [Array<Integer>, nil] +nil+ from an arch with no cheap call finder,
|
|
888
|
+
# which disassembles everything instead.
|
|
889
|
+
def scan_calls(_base, _data, _targets) = nil
|
|
890
|
+
|
|
891
|
+
# Where the +exec*+/+posix_spawn*+ symbols live, keyed for lookup. Read
|
|
892
|
+
# straight out of the tables rather than built into an object per symbol: a
|
|
893
|
+
# libc has thousands, and only two fields of each are wanted.
|
|
894
|
+
# @param [ELFTools::ELFFile] elf
|
|
895
|
+
# @return [Hash{Integer => true}]
|
|
896
|
+
def terminal_symbol_addresses(elf)
|
|
897
|
+
addrs = {}
|
|
898
|
+
%w[.dynsym .symtab].each do |name|
|
|
899
|
+
sec = elf.section_by_name(name)
|
|
900
|
+
next if sec.nil?
|
|
901
|
+
|
|
902
|
+
strtab = elf.sections[sec.header.sh_link.to_i].data
|
|
903
|
+
each_symbol(elf, sec) do |name_offset, value|
|
|
904
|
+
symbol = strtab.byteslice(name_offset, TERMINAL_PREFIX_BYTES)
|
|
905
|
+
addrs[symbol_address(value)] = true if symbol&.start_with?(*TERMINAL_PREFIXES)
|
|
906
|
+
end
|
|
907
|
+
end
|
|
908
|
+
addrs
|
|
909
|
+
end
|
|
910
|
+
|
|
911
|
+
# Each symbol's name offset and value, unpacked from the table's bytes. A
|
|
912
|
+
# 32-bit entry is four words with the value second; a 64-bit one is six, the
|
|
913
|
+
# value being the pair from the third.
|
|
914
|
+
# @param [ELFTools::ELFFile] elf
|
|
915
|
+
# @param [ELFTools::Sections::Section] section
|
|
916
|
+
# @yieldparam [Integer] name_offset
|
|
917
|
+
# @yieldparam [Integer] value
|
|
918
|
+
# @return [void]
|
|
919
|
+
def each_symbol(elf, section)
|
|
920
|
+
wide = elf.elf_class == 64
|
|
921
|
+
section.data.unpack('V*').each_slice(wide ? 6 : 4) do |words|
|
|
922
|
+
value = wide ? words[2] && words[3] && (words[2] | (words[3] << 32)) : words[1]
|
|
923
|
+
next if value.nil? || value.zero?
|
|
924
|
+
|
|
925
|
+
yield(words[0], value)
|
|
926
|
+
end
|
|
927
|
+
end
|
|
928
|
+
|
|
929
|
+
# The address a symbol's value names. Overridden where the value carries
|
|
930
|
+
# something besides the address (ARM keeps the Thumb bit in it).
|
|
931
|
+
# @param [Integer] value
|
|
932
|
+
# @return [Integer]
|
|
933
|
+
def symbol_address(value)
|
|
934
|
+
value
|
|
935
|
+
end
|
|
936
|
+
|
|
937
|
+
# Map from an instruction's address to its index in {#disasm_lines}, so a
|
|
938
|
+
# given address can be located in the disassembly in O(1).
|
|
939
|
+
def disasm_index
|
|
940
|
+
@disasm_index ||= disasm_lines.each_with_index.to_h { |line, i| [line[/\A([0-9a-f]+):/, 1].to_i(16), i] }
|
|
301
941
|
end
|
|
302
942
|
end
|
|
303
943
|
end
|