Описание тега line
Как насчет подойдя к ней с : "привет, как дела? Я просто хотел бы узнать ваши мысли по моему проекту документа, который я планирую в ближайшее время представить* ". @Даниил Азуэлос это -ПН, необходимых для работы Nmap? А какая разница? Другой вопрос, что специалисты здесь могли бы посоветовать вам: если вы поворачиваете на границе с визой на 8 дней, но вылет обратно в 9-й день, они позволят тебе в? Спасибо я установил Айронхайд, как я могу убедиться, что он работает? Единство 3D теперь ок, но я хочу убедиться, что Айронхайд-это активный, как я могу это сделать? У меня такая же проблема с новой установки операционной системы Ubuntu 12.04. Я установил хром деб с веб-сайта Google. Это, кажется, нормально установить (запущен программный центр получает), но хром не где можно нашли. На самом деле спешил домой', кажется, не найти ничего, неважно, какая вкладка и условия поиска я использую. Единственный намек на Хром в настройках системы, информация, где я могу сделать хром по умолчанию для веб - но это не дает мне какой-либо способ, чтобы на самом деле запустить хром.
Я пытаюсь получить содержимое дополнительного раздела в бинарных эльф. На данный момент, я использую следующий код, чтобы получить имя каждого раздела:
#включить заголовочный файл <stdio.ч>
#включить <запустите.ч>
код #include <stdint.ч>
#включить <stdlib.ч>
#ПРАГМА пакет(пуш,1)
#ПРАГМА пакет(поп)
#определить EI_NIDENT 16
/* 32-разрядный эльф базовых типов. */
тип беззнаковый инт Elf32_Addr;
оператор typedef unsigned краткое Elf32_Half;
тип беззнаковый инт Elf32_Off;
оператор typedef подписал инт Elf32_Sword;
тип беззнаковый инт Elf32_Word;
/* 64-разрядный эльф базовых типов. */
определение типа неподписанные долго долго Elf64_Addr;
оператор typedef unsigned краткое Elf64_Half;
оператор typedef подписал короткое Elf64_SHalf;
определение типа неподписанные долго долго Elf64_Off;
оператор typedef подписал инт Elf64_Sword;
тип беззнаковый инт Elf64_Word;
определение типа неподписанные долго долго Elf64_Xword;
оператор typedef подписал длинный Elf64_Sxword;
typedef структуры elf32_hdr{
неподписанные символ e_ident[EI_NIDENT];
Elf32_Half e_type;
Elf32_Half e_machine;
Elf32_Word e_version;
Elf32_Addr e_entry; /* точка входа */
Elf32_Off e_phoff;
Elf32_Off e_shoff;
Заносит Elf32_Word;
Elf32_Half e_ehsize;
Elf32_Half e_phentsize;
Elf32_Half e_phnum;
Elf32_Half e_shentsize;
Elf32_Half e_shnum;
Elf32_Half e_shstrndx;
} Elf32_Ehdr;
typedef структуры elf32_shdr {
Elf32_Word sh_name;
Elf32_Word sh_type;
Elf32_Word sh_flags;
Elf32_Addr sh_addr;
Elf32_Off sh_offset;
Elf32_Word sh_size;
Sh_link Elf32_Word;
Elf32_Word sh_info;
Sh_addralign Elf32_Word;
Elf32_Word sh_entsize;
} Elf32_Shdr;
typedef структуры elf64_hdr {
неподписанные символ e_ident[EI_NIDENT]; /* эльфа "магическое число" */
Elf64_Half e_type;
Elf64_Half e_machine;
Elf64_Word e_version;
Elf64_Addr e_entry; /* точка входа виртуальный адрес */
Elf64_Off e_phoff; /* заголовочный файл программы Таблица смещение */
Elf64_Off e_shoff; /* заголовок файла таблицы смещение */
Elf64_Word заносит;
Elf64_Half e_ehsize;
Elf64_Half e_phentsize;
Elf64_Half e_phnum;
Elf64_Half e_shentsize;
Elf64_Half e_shnum;
Elf64_Half e_shstrndx;
} Elf64_Ehdr;
typedef структуры elf64_shdr {
Elf64_Word sh_name; /* имя секции, показатель в строке ТБЛ */
Elf64_Word sh_type; /* тип секции */
Elf64_Xword sh_flags; /* атрибуты разное раздел */
Elf64_Addr sh_addr; /* раздел виртуальных адресов на выполнение */
Elf64_Off sh_offset; /* файл раздел смещение */
Elf64_Xword sh_size; /* размер секции в байтах */
Elf64_Word sh_link; /* указатель на другой раздел */
Elf64_Word sh_info; /* дополнительная информация */
Elf64_Xword sh_addralign; /* выравнивание раздела */
Elf64_Xword sh_entsize; /* размер записи, если раздел содержит таблицы */
} Elf64_Shdr;
тап_п(АГДС, типа char **argv в)
{
Файл* ElfFile = нуль;
голец* SectNames = нуль;
Elf64_Ehdr elfHdr;
Elf64_Shdr sectHdr;
uint32_t в IDx;
если(argc != 2) {
функции printf("использование: %s <ELF_FILE>\П", и argv[0]);
выход(1);
}
если((ElfFile = с помощью функции fopen(массива argv[1], "р")) == нуль) {
perror("[е] ошибка при открытии файла:");
выход(1);
}
заголовок эльф // читаем, первым делом в файл
fread операционной(&elfHdr, 1, оператор sizeof(Elf64_Ehdr), ElfFile);
// разделе прочитать название строки таблицы
// во-первых, прочитайте его заголовок.
/*
e_shoff этот элемент содержит файл заголовка таблицы смещения
в байтах. Если файл не имеет заголовка раздела таблицы, это
член держит ноль.
e_shstrndx этот элемент содержит раздела индекс заголовок таблицы
записи, связанные с раздел имя строки таблицы. Если
файл не содержит раздел название строки таблицы, то этот член
держит SHN_UNDEF значение.
Если индекс секции название строки таблицы
больше или равен SHN_LORESERVE (0xff00), это
член держит SHN_XINDEX (0xFFFF) и реальный показатель
раздел раздел наименование строки таблицы проводится в
член sh_link начального элемента в заголовке раздела
таблица. В противном случае, член sh_link первоначального
запись в таблице заголовков разделов содержит значение ноль.
SHN_UNDEF это значение является неопределенным, отсутствует
не имеет значения, или иначе бессмысленно
ссылка на раздел. Например, символ
"определенные" относительно раздела количество
SHN_UNDEF-это неопределенный символ.
SHN_LORESERVE это значение определяет нижнюю границу
диапазон зарезервированных индексов.
SHN_LOPROC значения, больше чем или равный SHN_HIPROC
зарезервированы для конкретного процессора
семантика.
SHN_HIPROC значения меньше или равны SHN_LOPROC являются
зарезервированы для процессорно-ориентированной семантики.
SHN_ABS это значение указывает на абсолютное значение
соответствующая ссылка. Например,
символы, определенные на номер раздела
SHN_ABS имеют абсолютного значения и не
пострадавших от переселения.
Символы SHN_COMMON определенными относительно этого раздела
общие символы, такие как Fortran общего
или нераспределенные с внешними переменными.
SHN_HIRESERVE это значение определяет верхнюю границу
диапазон зарезервированных индексов между
SHN_LORESERVE и SHN_HIRESERVE включительно;
значения не ссылаться на раздел
заголовок таблицы. То есть, заголовок раздела
таблица не содержит записей для
зарезервированных индексов.
*/
функции fseek(ElfFile, elfHdr.e_shoff + elfHdr.e_shstrndx * оператор sizeof(sectHdr), SEEK_SET);
fread операционной(§Hdr, 1, оператор sizeof(sectHdr), ElfFile);
/*
sh_size этот член имеет размер раздела в байтах. Если
тип раздела SHT_NOBITS, секция занимает sh_size
байт в файле. Раздел SHT_NOBITS тип может иметь
ненулевой размер, но не занимает места в файле.
значение sh_offset этот член имеет байтовое смещение от
начала файла до первого байта в разделе.
Один тип раздела, SHT_NOBITS, не занимает места в
файл, и его член sh_offset находит концептуальное
размещение в файл.
e_shnum это поле содержит количество записей в разделе
заголовок таблицы. Таким образом, продукт e_shentsize и
e_shnum дает размер заголовка таблицы в байтах.
Если файл не имеет заголовка раздела таблицы, e_shnum держит
значение ноль.
Если количество записей в заголовке раздела таблица
больше или равен SHN_LORESERVE (0xff00), e_shnum
имеет значение ноль и реальное количество элементов в
в таблице заголовков разделов проводится в поле sh_size
начальные записи в таблице заголовков разделов. В противном случае,
поле sh_size начального входа в раздел
заголовок таблицы содержит значение ноль.
sh_name этот элемент указывает имя раздела. Его значение
является индексом в раздел строку заголовка таблицы,
выдавая местоположение null-завершенной строку.
*/
// далее читаем раздел строковые данные
// функции printf("sh_size = %ЛПУ\Н", sectHdr.sh_size);
SectNames = функция malloc(sectHdr.sh_size);
функции fseek(ElfFile, sectHdr.sh_offset, SEEK_SET);
fread операционной(SectNames, 1, sectHdr.sh_size, ElfFile);
// чтение всех заголовков разделов
Для (в IDx = 0; IDx по < elfHdr.e_shnum; в IDx++)
{
константный тип char* имя = "";
функции fseek(ElfFile, elfHdr.e_shoff + индекс * оператор sizeof(sectHdr), SEEK_SET);
fread операционной(§Hdr, 1, оператор sizeof(sectHdr), ElfFile);
// выводим название раздела
если (sectHdr.sh_name);
имя = SectNames + sectHdr.sh_name;
функции printf("%2У %з\п", индекс, имя);
}
возврат 0;
}
Работает readelf выступает на "Привет мир" двоичный код генерирует следующий вывод:
$ readelf выступает -с именем HelloWorld
Есть 30 заголовков разделов, начиная со смещения 0x1170:
Заголовки Разделов:
[Шп] Название Адрес Тип Смещения
Размер EntSize Флаги Ссылке Информация Выровнять
[ 0] нуль 0000000000000000 00000000
0000000000000000 0000000000000000 0 0 0
[ 1] .истол PROGBITS 0000000000400238 00000238
000000000000001c 0000000000000000 с 0 0 1
[ 2] .Примечание.Аби-метки Примечание 0000000000400254 00000254
0000000000000020 0000000000000000 с 0 0 4
[ 3] .Примечание.гну.строить-замечу 0000000000400274 00000274
0000000000000024 0000000000000000 с 0 0 4
[ 4] .гну.хэш GNU_HASH 0000000000400298 00000298
000000000000001c 0000000000000000 в 5 0 8
[ 5] .dynsym DYNSYM 00000000004002b8 000002b8
0000000000000060 0000000000000018 в 6 1 8
[ 6] .dynstr STRTAB 0000000000400318 00000318
000000000000003d 0000000000000000 с 0 0 1
[ 7] .гну.версия VERSYM 0000000000400356 00000356
0000000000000008 0000000000000002 в 5 0 2
[ 8] .гну.version_r VERNEED 0000000000400360 00000360
0000000000000020 0000000000000000 в 6 1 8
[ 9] .Рела.Дин Рела 0000000000400380 00000380
0000000000000018 0000000000000018 в 5 0 8
[10] .Рела.ПЛТ Рела 0000000000400398 00000398
0000000000000048 0000000000000018 в 5 12 8
[11] .инит PROGBITS 00000000004003e0 000003e0
000000000000001a 0000000000000000 топор 0 0 4
[12] .ПЛТ PROGBITS 0000000000400400 00000400
0000000000000040 0000000000000010 топор 0 0 16
[13] .текст PROGBITS 0000000000400440 00000440
0000000000000182 0000000000000000 топор 0 0 16
[14] .Фини PROGBITS 00000000004005c4 000005c4
0000000000000009 0000000000000000 топор 0 0 4
[15] .rodata PROGBITS 00000000004005d0 000005d0
0000000000000013 0000000000000000 с 0 0 4
[16] .eh_frame_hdr PROGBITS 00000000004005e4 000005e4
0000000000000034 0000000000000000 с 0 0 4
[17] .eh_frame PROGBITS 0000000000400618 00000618
00000000000000f4 0000000000000000 на 0 0 8
[18] .init_array INIT_ARRAY 0000000000600e10 00000e10
0000000000000008 0000000000000000 УА 0 0 8
[19] .fini_array FINI_ARRAY 0000000000600e18 00000e18
0000000000000008 0000000000000000 УА 0 0 8
[20] .СКВ PROGBITS 0000000000600e20 об 00000e20
0000000000000008 0000000000000000 УА 0 0 8
[21] .динамического 0000000000600e28 00000e28
00000000000001d0 0000000000000010 ва 6 0 8
[22] .у PROGBITS 0000000000600ff8 00000ff8
0000000000000008 0000000000000008 УА 0 0 8
[23] .получил.ПЛТ PROGBITS 0000000000601000 00001000
0000000000000030 0000000000000008 УА 0 0 8
[24] .PROGBITS данные 0000000000601030 00001030
0000000000000010 0000000000000000 УА 0 0 8
[25] .БСС NOBITS 0000000000601040 00001040
0000000000000008 0000000000000000 УА 0 0 1
[26] .комментарий PROGBITS 0000000000000000 00001040
0000000000000024 0000000000000001 МС 0 0 1
[27] .shstrtab STRTAB 0000000000000000 00001064
0000000000000108 0000000000000000 0 0 1
[28] .SYMTAB 000018f0 symtab 0000000000000000
0000000000000618 0000000000000018 29 45 8
[29] .strtab STRTAB 0000000000000000 00001f08
000000000000023c 0000000000000000 0 0 1
Ключ к флагам:
W (запись), а (запас), х (выполнить), м (слияние), с (строк), L (большой)
Я (информация), л (порядок связи), G (Группа), Т (СС), е (исключить), х (неизвестно)
О (дополнительной обработки ОС требуется) о (конкретной ОС), п (конкретного процессора)
Рассматривая следующую запись:
[13] .текст PROGBITS 0000000000400440 00000440
0000000000000182 0000000000000000 топор 0 0 16
для того, чтобы получить .текст раздела целиком из двоичного достаточно прочитать 0x182 в байт с адреса 0x400440 + 0x440 из файла, где 0x182 раздел размер и 0x400440 адрес и 0x440 это смещение? Кроме того, какова роль выравнивания(0x16) здесь?