Как сделать патч для библиотеки C

Для моего проекта класса я пытаюсь исправить уязвимость призрака на Ubuntu 12.04 вручную. Я полностью понимаю ошибки внутри /nss/digits_dots.c, и я их исправил. Моя проблема в том, что я не знаю, как сделать патч и скомпилировать его. Как я могу сделать патч? Как я могу просто отредактировать один файл в библиотеке и перестроить его? Мне удалось скачать исходную библиотеку, но потом я застрял! Вот что я сделал

apt-get source libc6

У меня были некоторые ошибки. Затем мне пришлось установить другие пакеты, такие как

sudo apt-get install alien sudo apt-get install gawk

. Но после этого я начал несколько вещей и начал ходить в круги и циклы, но без успеха. Может кто-нибудь, пожалуйста, скажите мне, как сделать простой патч для библиотеки C.

Спасибо,

0
задан 17 April 2017 в 23:50

3 ответа

Предполагая, что у вас уже есть исходный исходный пакет для ghost, вы просто хотите протестировать локально, и это всего лишь один файл, и вот что вы можете сделать.

1. Создайте разницу ваших изменений:

diff -u /path/to/original_ghost_file.c ghost_file_changes.c > ghost.patch

1. Создайте разницу между вашими изменениями:

Переместитесь в исходный каталог и запустите:

patch -p1 ghost.patch

Не видя своего патча, я не могу сообщить вам, что -p, но я предполагаю, что вы использовали абсолютные пути.

3. Переустановите и установите

Еще в исходной папке запустите ./configure, make и make check. Если вы хотите заменить исходную версию ghost, запустите make install.

1
ответ дан 18 July 2018 в 15:19

Предполагая, что у вас уже есть исходный исходный пакет для ghost, вы просто хотите протестировать локально, и это всего лишь один файл, и вот что вы можете сделать.

1. Создайте разницу ваших изменений:

diff -u /path/to/original_ghost_file.c ghost_file_changes.c > ghost.patch

1. Создайте разницу между вашими изменениями:

Переместитесь в исходный каталог и запустите:

patch -p1 ghost.patch

Не видя своего патча, я не могу сообщить вам, что -p, но я предполагаю, что вы использовали абсолютные пути.

3. Переустановите и установите

Еще в исходной папке запустите ./configure, make и make check. Если вы хотите заменить исходную версию ghost, запустите make install.

1
ответ дан 24 July 2018 в 20:36
  • 1
    Большое спасибо за ваш ответ, но выше не работает. На шаге 2 я думаю, что нам нужно сделать ($ patch -p1 & lt; /path/to/ghost.patch). Кроме того, моя ./configure не работает! Я должен был сделать - разборчивые проверки, которые все испортили. – Mona 9 April 2017 в 05:34
  • 2
    Извините, я должен был быть более ясным. Я отредактирую ответ. Можете ли вы опубликовать вывод работы ./configure, не отключая проверки работоспособности? – Grayson Kent 9 April 2017 в 07:28
  • 3
    Еще раз спасибо за ваш ответ. Вот что я сделал после того, как я установил Ubuntu-12.04 в Virtual Box, все из моего домашнего каталога. 1- ($ sudo apt-get install alien) 2- ($ sudo apt-get install gawk) 3- ($ apt-get source libc6) 4- ($ diff -u eglibc-2.15 / nss / digits_dots.c ghost_file_changes. c & gt; ghost.patch) 5- ($ patch -p1 & lt; ghost.patch) Это дало мне ошибку, поэтому мне пришлось делать ($ patch -p0 & lt; ghost.patch). Наконец, я получил сообщение (файл исправления ghost_file_changes.c). 6 - ($ mkdir eglibc-2.15-build). 7 - ($ cd eglibc-2.15-build). 8 - ($ .. / eglibc-2,15 / Конфигурировать). – Mona 9 April 2017 в 19:17
  • 4
    Затем он набрал это сообщение (*** В системах GNU / Linux библиотеку GNU C не следует устанавливать в *** / usr / local, так как это может сделать вашу систему полностью непригодной. *** Мы настоятельно рекомендуем использовать другой префикс Подробнее см. В FAQ. *** Если вы действительно хотите это сделать, снова запустите configure, используя дополнительный параметр *** `--disable-sanity-checks '.) – Mona 9 April 2017 в 19:17

Предполагая, что у вас уже есть исходный исходный пакет для ghost, вы просто хотите протестировать локально, и это всего лишь один файл, и вот что вы можете сделать.

1. Создайте разницу ваших изменений:

diff -u /path/to/original_ghost_file.c ghost_file_changes.c > ghost.patch

1. Создайте разницу между вашими изменениями:

Переместитесь в исходный каталог и запустите:

patch -p1 ghost.patch

Не видя своего патча, я не могу сообщить вам, что -p, но я предполагаю, что вы использовали абсолютные пути.

3. Переустановите и установите

Еще в исходной папке запустите ./configure, make и make check. Если вы хотите заменить исходную версию ghost, запустите make install.

1
ответ дан 31 July 2018 в 23:38
  • 1
    Большое спасибо за ваш ответ, но выше не работает. На шаге 2 я думаю, что нам нужно сделать ($ patch -p1 & lt; /path/to/ghost.patch). Кроме того, моя ./configure не работает! Я должен был сделать - разборчивые проверки, которые все испортили. – Mona 9 April 2017 в 05:34
  • 2
    Извините, я должен был быть более ясным. Я отредактирую ответ. Можете ли вы опубликовать вывод работы ./configure, не отключая проверки работоспособности? – Grayson Kent 9 April 2017 в 07:28
  • 3
    Еще раз спасибо за ваш ответ. Вот что я сделал после того, как я установил Ubuntu-12.04 в Virtual Box, все из моего домашнего каталога. 1- ($ sudo apt-get install alien) 2- ($ sudo apt-get install gawk) 3- ($ apt-get source libc6) 4- ($ diff -u eglibc-2.15 / nss / digits_dots.c ghost_file_changes. c & gt; ghost.patch) 5- ($ patch -p1 & lt; ghost.patch) Это дало мне ошибку, поэтому мне пришлось делать ($ patch -p0 & lt; ghost.patch). Наконец, я получил сообщение (файл исправления ghost_file_changes.c). 6 - ($ mkdir eglibc-2.15-build). 7 - ($ cd eglibc-2.15-build). 8 - ($ .. / eglibc-2,15 / Конфигурировать). – Mona 9 April 2017 в 19:17
  • 4
    Затем он набрал это сообщение (*** В системах GNU / Linux библиотеку GNU C не следует устанавливать в *** / usr / local, так как это может сделать вашу систему полностью непригодной. *** Мы настоятельно рекомендуем использовать другой префикс Подробнее см. В FAQ. *** Если вы действительно хотите это сделать, снова запустите configure, используя дополнительный параметр *** `--disable-sanity-checks '.) – Mona 9 April 2017 в 19:17

Другие вопросы по тегам:

Похожие вопросы: