Возможный подход, для сокращения строки от главы, пока это не соответствует:
#!/bin/sh
string="TMP_ABQ_SEQ_NUM"
while ! grep "$string" dictionary.txt; do
# remove the shortest leading string ending with "_"
string="${string#*_}"
done
AFAIK единственный способ быть абсолютно уверенным в безопасности должен был бы записать компилятор в ассемблере (или изменение диска непосредственно самостоятельно). Только затем можете Вы удостоверяться, что Ваш компилятор не вставляет бэкдор - это работает, потому что Вы на самом деле устраняете компилятор полностью.
Оттуда, можно использовать Ваш с нуля компилятор для начальной загрузки, например, набор инструментальных средств GNU. Затем Вы могли использовать свой пользовательский набор инструментальных средств для компиляции Linux С нуля система.
Обратите внимание, что для создания вещей легче на себе у Вас мог быть второй посреднический компилятор, записанный в C (или безотносительно другого языка). Таким образом, Вы записали бы компилятор в блоке, затем переписать тот компилятор в C/C ++/Python/Brainfuck/whatever для получения компилятора B, который Вы скомпилировали бы компилятор использования A. Затем Вы использовали бы компилятор B для компиляции gcc и друзей.
Один возможный путь, хотя это чрезвычайно заняло бы много времени на практике, будет состоять в том, чтобы вернуться к корням. Разработка GNU началась в 1984, и исходная версия Minix (который использовался во время ранней разработки Linux для начальной загрузки целей), был выпущен в 1987.
Этот весь ответ основан на Вашей предпосылке, что" [у Вас] или других есть способность считать и понять исходный код для дефектов безопасности, таким образом, исходный код будет исследоваться сначала перед компиляцией", и что можно доверять результату такого анализа. Без этого этот ответ, вероятно, хуже, чем бесполезный, поскольку Вы будете проводить огромное количество времени для абсолютно никакого преимущества вообще.
Если можно найти копию исходной книги Minix с исходным кодом, можно ввести его из книги. Скомпилируйте его и затем используйте другой декомпилятор в другой системе, чтобы проверить, что компилятор генерирует ожидаемый двоичный выход машинного языка. (Код является только 12 000 строк, по-видимому, C, таким образом делание так является трудоемким, но все еще в причине, если Вы серьезно относитесь к такому проекту.) Вы могли даже записать свой собственный дизассемблер; это не должно быть очень трудно.
Захватите самые старые версии утилит GNU, можно возможно достать (поскольку у этого, по-видимому, есть меньше кода и меньше зависимостей к внешним библиотекам), пройдите код, создайте его для Minix (это могло бы взять некоторую работу, хотя; то, чего Вы абсолютно хотите избежать, должно внести изменения в исходный код, потому что это сделает добавляющие патчи позже очень подверженными ошибкам), и пройдите подобное, демонтируют - проверяют цикл для инструментов GNU. В той точке Вы доверяете ОС и набору инструментальных средств, таким образом, только необходимо пройти исходный код в patchset (чему-либо не в patchset уже доверяют), но инструменты все еще будут очень примитивны и сыры по сравнению с тем, к чему Вы привыкли сегодня. Не ожидайте, что что-то большее чем очень самая основная функциональность системных инструментов будут работать, например. Теперь передайте все и мигрируйте на Minix и начните применять патчи, одна версия за один раз, восстановив все затронутое между каждой версией и использованием новой версии в следующий раз вокруг. Считайте много XKCD.
В какой-то момент у Вас будет система, которая может скомпилировать и загрузить раннюю версию ядра Linux, во многом как он был сделан в начале 1990-х, поскольку Linux начал наращивать обороты среди хакеров. Я предложил бы мигрировать на Linux в той точке (восстановите системные библиотеки и набор инструментальных средств против Linux, создайте ядро Linux, начальную загрузку в Linux и возможно восстановите ядро Linux и набор инструментальных средств GNU в рамках Linux; последнее доказывает, что система теперь саморазмещает), но это в основном ваше дело. Продолжайте проверять патчи, исправляя ядро, библиотеки и основные инструменты GNU, и восстанавливая, пока Вы не доберетесь до современных версий.
Именно тогда у Вас есть доверяемая основная ОС и компилятор, который может использоваться для создания современного программного обеспечения. К тому времени можно следовать, например, Linux С нуля ведет для создания системы, способной к выполнению полезных задач.
Ни в каком смысле может система "компилятора" когда-либо быть подключенным к сети всегда (включая как VM на сетевом узле); Вы рискнули бы проникновением через любой способный к сети компонент включая ядро. Если бы Вы волнуетесь по поводу нападения компилятора Thompson, необходимо было бы ожидать, что любой хост VM также может быть поставлен под угрозу. Используйте sneakernet для получения исходного кода к и двоичных файлов от физического хоста, на котором Вы компилируете вещи. Ожидайте проблему, надевающую файлы и от системы, по крайней мере, прежде чем Вы перейдете к сути дела, где поддержка массового хранения USB была реализована. Если Вы действительно параноики, печатаете листинги исходного кода и вводите их вручную (и надеются, что драйвер принтера и принтер не имеют подобного кода в них), или прочитайте код на одном компьютерном мониторе и введите его в другой компьютер физически рядом с, но не подключенные к нему.
Да, это займет много времени. Но преимущество для этого подхода состоит в том, что каждый шаг является возрастающим, означая, что чему-либо злонамеренному было бы намного более трудно проскользнуть через, если он очень постепенно не представляется в течение многих версий; это, потому что набор изменений на каждом шаге является сравнительно маленьким и таким образом намного легче просмотреть. Сравните patchset с журналом изменений и удостоверьтесь, что можно определить точно, какая запись журнала изменений соответствует каждому изменению в исходном коде. Снова, это действительно предполагает, что у Вас есть способность (возможно через кого-то, кому Вы доверяете) проверить, что такие изменения не были стащены в кодовую базу, но это должно получить Вас о как близко к достоверной системе, как подход кроме встроенного микропрограммного обеспечения только для программного обеспечения может.
При необходимости в доверяемом компиляторе Вы могли бы получить взгляд на научную работу, как compcert проект. Это - компилятор, созданный INRIA (французская лаборатория общественности IT) разработанный, чтобы быть ''сертифицированным'', т.е. произвести исполняемый файл, семантически совершенно эквивалентный коду (и конечно, это было математически доказано).
Вручную создавая Ваш собственный компилятор, поскольку начальная точка была бы самой безопасной, другая опция состоит в том, чтобы установить систему от 5 (или 10) установка года CD, которому Вы доверяете, был создан, прежде чем это использование существовало. Затем используйте это в качестве основы для компиляции нового контролируемого источника от.