The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
По поводу статической линковки sqlite3, !*! GOrilla, 06-Янв-23, 13:10  [смотреть все]
http://www.tinyware.ru/garbage/sqlite3-3.34.1.tar.gz
Debian 11 x86_64.
Пакет не отлаживал, почти по debian/rules.
  • По поводу статической линковки sqlite3, !*! GOrilla, 13:20 , 06-Янв-23 (1)
    > http://www.tinyware.ru/garbage/sqlite3-3.34.1.tar.gz
    > Debian 11 x86_64.
    > Пакет не отлаживал, почти по debian/rules.

    Пакеты тамже
    http://www.tinyware.ru/garbage/

  • По поводу статической линковки sqlite3, !*! GOrilla, 15:40 , 06-Янв-23 (2)
    По проблемме dlopen.
    Возьмем тестовую библиотеку без зависимостей ldd:

    cat > liba.c

    double cos(double arg)
    {
        return 4.1234567890;
    }

    mkdir lib
    gcc -shared liba.c -o lib/liba.so

    Возьмем тестовую программу из man dlopen:


    cat > test.c
    #include <stdio.h>
    #include <stdlib.h>
    #include <dlfcn.h>
    #define LIBM_SO "liba.so"
           int
           main(void)
           {
               void *handle;
               double (*cosine)(double);
               char *error;

               handle = dlopen(LIBM_SO, RTLD_LAZY);
               if (!handle) {
                   fprintf(stderr, "%s\n", dlerror());
                   exit(EXIT_FAILURE);
               }

               dlerror();    /* Clear any existing error */

               cosine = (double (*)(double)) dlsym(handle, "cos");

               /* According to the ISO C standard, casting between function
                  pointers and 'void *', as done above, produces undefined results.
                  POSIX.1-2001 and POSIX.1-2008 accepted this state of affairs and
                  proposed the following workaround:

                      *(void **) (&cosine) = dlsym(handle, "cos");

                  This (clumsy) cast conforms with the ISO C standard and will
                  avoid any compiler warnings.

                  The 2013 Technical Corrigendum 1 to POSIX.1-2008 improved matters
                  by requiring that conforming implementations support casting
                  'void *' to a function pointer.  Nevertheless, some compilers
                  (e.g., gcc with the '-pedantic' option) may complain about the
                  cast used in this program. */

               error = dlerror();
               if (error != NULL) {
                   fprintf(stderr, "%s\n", error);
                   exit(EXIT_FAILURE);
               }

               printf("%f\n", (*cosine)(2.0));
               dlclose(handle);
               exit(EXIT_SUCCESS);
           }
    gcc -static test.c -ld
    /usr/bin/ld: /tmp/ccpQ2mA7.o: в функции «main»:
    test2.c:(.text+0x15): предупреждение: Using 'dlopen' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking

    Запуститм в chroot е без каких-либо рантаймов.


    sudo chroot . ./a.out
    4.123457

    И чего он нас предупреждает, если потянул бы рантайм от библиотеки а не от самого бинарника?

  • По поводу статической линковки sqlite3, !*! GOrilla, 15:47 , 06-Янв-23 (3)
    А glibc чем не угодила я так и не понял....

  • По поводу статической линковки sqlite3, !*! GOrilla, 15:13 , 07-Янв-23 (5)
    > http://www.tinyware.ru/garbage/sqlite3-3.34.1.tar.gz
    > Debian 11 x86_64.
    > Пакет не отлаживал, почти по debian/rules.

    Молодцы ребятя!!! Атака на /home успешна!!!! Пришлось роутер перезагружать и профиль файерфокса удалять...




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру