Как получить доступ только для чтения (статическая константа) данных общей библиотеки из программы C/C++ с известным OFFSET

Я установил общую библиотеку libgcrypt. Файл libgcrypt.so создан. Он имеет некоторые данные только для чтения.

./configure   ( without -g option for debug symbol)
make install 


static const u32 encT[256] =
  {
    0xa56363c6, 0x847c7cf8, 0x997777ee, 0x8d7b7bf6,
    0x0df2f2ff, 0xbd6b6bd6, 0xb16f6fde, 0x54c5c591,
    0x50303060, 0x03010102, 0xa96767ce, 0x7d2b2b56,
...

}

static const struct
{
  u32 T[256];
  byte inv_sbox[256];
} dec_tables =
  {
    {
      0x50a7f451, 0x5365417e, 0xc3a4171a, 0x965e273a,
      0xcb6bab3b, 0xf1459d1f, 0xab58faac, 0x9303e34b,
      0x55fa3020, 0xf66d76ad, 0x9176cc88, 0x254c02f5,
      .....},

    {
      0x52,0x09,0x6a,0xd5,0x30,0x36,0xa5,0x38,
      0xbf,0x40,0xa3,0x9e,0x81,0xf3,0xd7,0xfb,
      0x7c,0xe3,0x39,0x82,0x9b,0x2f,0xff,0x87,
      .....
    }  
 }

Используя команду nm, я могу найти смещение данных только для чтения.

nm /usr/lib/libgcrypt.so | grep encT
0008ffc0 r encT

nm /usr/lib/libgcrypt.so | grep dec_tables
0008fac0 r dec_tables

Я хочу получить доступ к этим данным только для чтения из программы C/C++.

    //sample.c
    // gcc sample.c -lgcrypt 

    #include <gcrypt.h>

    int main()
    {

    // ADDRESS of encT[0] = ? + OFFSET  (0008ffc0)
    //print value of encT[0] as 0xa56363c6
    // ADDRESS of dec_tables.T[0] = ? + OFFSET (0008fac0)
    //print value of dec_tables.T[0] as 0x50a7f451
    //print value of dec_tables.inv_sbox[0] as 0x52

    }

У меня есть следующие вопросы

  1. Как использовать эти смещения для доступа к этим данным только для чтения (encT, dec_tables.T,dec_tables.inv_sbox) из C-программы?

    2. Есть ли другой способ найти АДРЕС в encT, dec_tables.T, dec_tables.inv_sbox?

EDIT-1: глобальная (внешняя) функция, gcry_cipher_decrypt() используется для выполнения расшифровки и вызывает static do_decrypt -> static do_decrypt_fn(), которая использует dec_tables.T,dec_tables.inv_sbox. Таким образом, можно найти АДРЕС dec_tables.T, dec_tables.inv_sbox относительно адреса gcry_cipher_decrypt?

Я использую gcc-4.9, Ubuntu 16.04.

Будет ли большая помощь, если кто-нибудь поможет мне завершить приведенный выше пример программы или любую ссылку, чтобы понять, как я могу это сделать? Заранее спасибо.

0 ответов

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