Invalid d2s header section at offset 0 как исправить

Error while loading d2s file received error invalid d2s header section Короче я решыл совместить Diablo LOD с обычним 2-ым. Всё вышло, токо вот не знаю как перенести старые шрифты в новый диабло, тоесть есть Patch2d старый и папочка со шрифтами (по идее ), как-то я слышал, шо надо шото прописать в EXE, шобы […]
Камрад

Таже херня чар абсолютно чистый а открыть его не могу (( версия 1 09b

Источник

Справочник вылетов (Line 101 — Line 200)

Questions

Причина :

Возникает ТОЛЬКО при загрузке сохранений. А вылетает из-за несоответствие конфигов с версией игры. Такое точно случается, если подсунуть шестому патчу system.ltx от четвёртого, получается ли данный вылет с другими конфигами или нет я не знаю.
Правда, на просторах встечал этот же вылет, только в описании были явно указаны или .ogg или .ltx файл — в данном случае ничего сказать не могу.

Лечение :

Причина :

Причиной вылета служит неправильный путь для проигрывания партикла (пример: аномалия в Х-18, она двигается по зацикленному пути из .anm файла).

Лечение :

Либо удалить глючную аномалию (в частном случае партикл), либо исправить проблему.

Причина :

Не найдена трёхмерная OGF-модель, в данном случае mesh.ogf из папки meshesphysics.

Лечение :

Проверяйте наличие файла, правильность написания пути и имени файла.

Причина :

Лечение :

Причина :Игра не находит id какого-то профиля. или диалога. или квеста. В общем указанный id в .xml файле.

Лечение :

Проверяйте правильность написания идентификатора, либо добавьте его, если таковой отсутсвует.

Причина :

game.graph не соответствует кросс-таблице одной из локаций.

Лечение :

Скорее всего — забыли закинуть в геймдату level.gct после правки в СДК и компиляции AI. Помните, level.gct нужно обновить для всех локаций, а не только для тех, которые подвергались правке.

Причина :

Происходит при попытке загрузки сохранения, которое было сделано не другом «наборе» gamedata.

Лечение :

Если делали какие-то изменения собственноручно, то верните папку gamedata в первоначальный вид. В противном случае следуйте совету — удалите сохранение.

Причина :

Странно, но данный вылет происходит только в моде Lost World Trops Of Doom с патчами ниже 3.5.2. Причиной этому якобы большой вес ноги псевдогиганта (inv_weight = 20.0).

Лечение :

Уменьшить вес ноги до 12.

Причина:
Отображение и сокрытие съемных аддонов на оружии в сталкере осуществляется при помощи отображения и сокрытия меша, привязанного к определенной кости в моделе. Существует три таких кости: wpn_scope, wpn_silencer и wpn_launcher. В данном случае мы попытались прописать оружию съемный прицел, но указанный худовый визуал не содержит кости wpn_scope.

Лечение:
Сделать аддон несъемным (либо отключить его вообще) путем редактирования конфига либо добавить в худовую модель указанную кость.

Причина :

game.graph и файл level.ai одной из локаций не соответствуют друг другу.

Лечение :

Вероятно также, что и у предыдущего вылета.

Причина :Одна из моделей на локации зафиксирована (посредством параметра fixed_bones в all.spawn) за неизвестную кость.

Лечение :

Найти и исправить ошибку.

Причина :

Вылет из-за железа, а точнее — оптимизации ОС. Скорее всего проблема с драйверами.

Лечение :

Обновите драйвера на видеокарту. Снизьте графические настройки.

Причина :

Игра не находит идентификатор указанной погоды, в данном случае boloto, в файле environment.ltx.

Лечение :

Варианта два:
1. Поменять погоду прописанную одной из локаций в файле game_maps_single.ltx;
2. Добавить идентификатор погоды в секцию weathers, файле environment.ltx.

Причина :

Данная ошибка, как правило указывает на «криворучие» при создании меню игры. Например: ползунок который увеличивает опции меню при прокрутке задран очень высоко. И в большей степени относится к изменениям худа.

Лечение :

Смотри, где, что наковыряли и исправляйте.

Причина :Игра не нашла в какой-то модели анимацию с именем waunded_1_idle_0.

Лечение :

В первую очередь проверьте правильность написания имени анимации. Если в названием всё впорядке, тогда либо заменить/удалить модель, либо добавить/переименовать анимацию.

Причина :

В диалоге, в данном случае это esc_dialog, нет доступной для отображения фразы (например все заткнуты инфопоршенами и не одно из условий не выполнилось).

Лечение :

Убедиться в том, чтобы хотябы одна из фраз диалога будет доступна.

Причина :

В файле game_relations.ltx допущена ошибка. Вероятнее всего для параметра communities заданы неправильные значения.

Лечение :

Проверить данный файл на ошибки.

Причина :

Для какого-то оружия не верно прописан тип нанoсимого урона.

Лечение :

Найти и исправить ошибку.

Причина :Какая то вершина (вейпоинт) пути sniper_3_walk стоит в неположенном месте (например не на аи-сетке). Объект stalker_0002 (в данном случае сталкер), который якобы двигался по пути sniper_3_walk, попал на эту точку, а заодно ушёл за аи-сетку. Этого движок не терпит.
Тоже самое произойдет если координаты(вейпоинт) пути sniper_3_walk совпадет с координатами места? где нпс запрещено находится будь то рестриктор или аномалия в схеме обхода аномалий. Также этот вылет наблюдается при попытке отправить нпс за пределы места работ параметр out_rest = «имя_рестриктора», в файле загрузки работ гулага. Попробуйте любого сталкера из лагеря новичков отправить допустим к остановке получите этот самый вылет.

Лечение :

Найти и исправить ошибку.

Причина :

Лечение :

Говорят от него помогает установка третьего сервис пака на ХР.

ТЧ, 1,0004. + Луа-расширение RvP. Такая необычная реакция на неправильно указанное имя текстуры в xml-описателе.

См. также справку по вылетy Line 764

Причина :

Судя по логу — проблемы с видео памятью. Причины не известны.
— Неверная установка мода.
— Проблемы с драйверами видеокарты или Direct X.
— Проблемы с операционной системой и прочее.

Лечение :

Причина :

Игра не находит указанного файла.

Лечение :

Либо добавить файл, либо убрать регистрацию этого файла в конфигах, зачастую это либо system.ltx, либо localization.ltx.

Причина :

В игре даже пропатченной до версии 1.0005 всё ещё есть проблемы с маршрутами.

Лечение :

Обычно достаточно просто загрузить последний сейв и не сохраняться рядом с местами, где происходят такие вылеты.

Дополнительное обсуждение и информация — в этом и этом постах.

Причина :

Игра не может найти указанный файл по указанному пути.

Лечение :

Либо находите в .ltx файлах строку #include «prefetchprefetch.ltx» и удаляйте, либо добавляйте сам файл.

Причина :

all.spawn не соответствует game.graph. Когда компилировали AI, видно, забыли пересобрать спавн.

Лечение :

Привести all.spawn и game.graph в соответствие.

Причина :

Вылет говорит о том, что объект попал в вертекс (96), которого нет на данной карте.

Лечение :

Если загрузка последнего сохранения не помагает, то можете попробовать уменьшить радиус A-Life, посредством параметра switch_distance, пройти проблемный участок, а затем вернуть первоначальное значение параметра.

Возникает при попытке взять имя уровня по его ID c помощью вызова alife():level_name(level_id), если число level_id не соответствует ни одному из существующих уровней.

Причина :

Игра не находит в каком-то .xml файле указанный элемент.

Лечение :

Найти и исправить ошибку.

Причина :

Продублирована указанная секция в .ltx файлах.

Лечение :

Найти и исправить ошибку.

Причина:
Вы присвоили какому-то объекту визуал, у которого забыли сгенерировать шейпы. Как вариант — случайно были перепутаны мировая и худовая модели оружия. Имя объекта и сбойный визуал указаны в строке description

Лечение:
Есть несколько вариантов:
а) Сгенерировать у указанной модели шейпы, используя Actor Editor (AE) из состава СДКб)заменить указанную модель на «заведомо рабочую»
B) Найти, где в конфиге прописан неверный визуал, и исправить параметр на другой

Добавил новую модель (ПДА заменил). Запускаю игру, ловлю вылет: Все было проставлено правильно, СДК не бунтовал при экспорте. Делал на основе кости старого ПДА АПД.

Все, спасибо, разобрался. Нужно было в СДК во вкладке Object поставить make progressive

Причина :

Игра определила повторяющиеся id в .xml файле, чего быть не должно.

Лечение :

Найти и исправить ошибку.

Причина :

Либо не найден файл шейдера deffer_impl_flat.vs, либо проблема вся в том, что неправильно закомпилился шейдер, при компиляции уровня на качестве, более высоком чем Draft. Для ЗП (ЧН) это может ещё быть из-за отсутствия thm’ок для текстур терраина уровня.

Лечение :

В первом случае — проверить наличие файла. Во втором — нужно скачивать исправление шейдеров от товарища Haron.

Источник

Adblock
detector



причем тут читерить или не читерить…Я даже на етом серве не катаю…Я просто скачал с нета рецепты рун и всяких камней вот и надо на чем то проверять!!!

  • пожаловаться
  • скопировать ссылку


дык сделай шмотку с нуля и персонажа тоже

  • пожаловаться
  • скопировать ссылку


та даже когда сделаешь чара с нуля через редактор,то второй раз его открыть не получается,таже фигня!!!

  • пожаловаться
  • скопировать ссылку



Та как же может у меня стоять мод,если установил всего лишь обыкновенный LOD,поверх обыкновенного Диабло!!!
А может из-за версии???Потому что я пропатчил до версии 1.11b…..
p.s. А где можно достать Лорд нормальный,не мод!!!

  • пожаловаться
  • скопировать ссылку

C-Money


  • #1

Today I install the D2 editor ShadowMaster, but before I could use it, I ran into this error.

Invalid D2S Header section, at offset 0.

Has anybody ever encountered this error?

If so can someone please help me out? :(

  • #2

u cant open original D2 char files in it, only expansion

  • #3

also you dont have to install it, you only unzip it, if you installed, you just installed a trojan.

C-Money


  • #4

My charactors are Expansion ones, and I guess I didn’t ‘install’ Shadowmaster, I did downloaded and unziped it.

They are new charactors, I just created them, so they can’t be corrupted, can they…

Is there anything else that can help? :confused:

Diablo 2: Lord of Destruction Message Board  STATUS: ACTIVE - Trainers are still being considered and updated for this title as patches are released. There is no guarantee that a trainer can be made or updated but it will be reviewed by our staff.

Our Diablo 2: Lord of Destruction Trainer is now available for version 1.14d and supports DIGITAL DOWNLOAD.
Our Diablo 2: Lord of Destruction message board is available to provide feedback on our trainers or cheats.

Diablo 2: Lord of Destruction Trainer

BOOST UPDATE PRIORITY

Boost currently not available

Message Board for PC version

Why won’t the editors work?

  • sonomakid posted on May 09, 2008 9:08:17 PM — Report post

    None of this stuff works for me. Keeps telling me that the save file isn’t right for some reason. Any ideas?

    EDIT: Corrupt Field in Save game file (@ offset 0)

    [Edited by sonomakid, 5/9/2008 9:29:50 PM]

  • Vegetta posted on May 10, 2008 1:23:38 AM — Report post

    I have tried character editor v 0.85 and it works fine for the Diablo Lord of Destruction v1.08. I don’t know about the other one.

    It’s time to play the game!

    *Fusion to Vegetto*

    KA-ME-HA-ME-HA!

    Trainer Maker
    My trainers’ blog

  • Master_455 posted on May 22, 2008 6:18:07 PM — Report post

    send me your save file and i will custom make you a full set of armor and weapons PM me when you are ready

    Need Help With a Game? It doesn’t cost you any thing to ask and I will help you if I can.

  • I’ve tried the Character Editor v.085 Beta on my game, and it doesn’t work.
    Version is v1.10.

    I’ll have to try the other one…

    The error I get: «Invalid D2S Header Section at offset 0»

    Ahem. The other one works, but I can’t do much on my character with that…can anyone recommend me a character editor that works with v1.10?
    Preferrably one like the Beta v.085 which I could use to alter my character’s stats and skills. I’m not interested in inventory editors.

    Thank you.

    [Edited by Omnis, 6/30/2008 2:13:07 PM]

    [Edited by Omnis, 6/30/2008 2:29:03 PM]

  • rebubble posted on Jul 01, 2008 3:43:59 PM — Report post

    Hero Editor v 0.96 works with 1.10 and 1.11.
    You can get this editor at Ladderhall. A quick google will find it. You will have to look on the forum.

  • just go newd2event.net/
    there has some editor and mod with d2 informations, actually patch 1.12 doesnt have any editor work with.

    Just image all games on my brain n mind~
    Love them and enjoy it!!

  • Sannyasin posted on Oct 21, 2009 3:34:14 AM — Report post

    Nowadays there’s an editor that works with patch v1.12 and it’s Hero Editor v1.03. I’m sure anyone can find this editor using google.

  • shadowmoon_474 posted on Jan 07, 2010 2:45:00 AM — Report post

    yep that would be mastadex’s (zonfire_99) edition hero editor

All times are (GMT -06:00) Central Time (US & Canada). Current time is 12:22:23 PM


Important Board Topics


Trending Topics

1. Предисловие

1.1 Обзор

Эта статья представляет несколько общих проблем PostgreSQL и начинается с явления, постепенно исследуя проблему, анализирует причину проблемы и дает решения.

Проблемы, описанные в этой статье, делятся на две категории: одна — проблема, которую PostgreSQL не может запустить, а другая — проблема, с которой некоторые объекты базы данных не могут быть доступны после запуска PostgreSQL.

1.2 Программная среда

Версия PostgreSQL, используемая в этой статье, составляет 9.2.

1.3 Некоторые согласованные сроки

Postgresql Путь установки: указывает путь установки платформы IVMS-8700 PostgreSQL, по умолчанию «D: Program Files Postgresql 9.6″ «» «»

Папка Bin: папка Bin под пути установки PostgreSQL.

Папка данных: папка данных в рамках пути установки PostgreSQL.

2. Вопросы и решения

2.1 PostgreSQL не может начать

Когда PostgreSQL не начался нормально, он снова потерпел неудачу в «Сервисе».

2.1.1 Портовая занятия

Сначала нам нужно определить, занят ли порт услуги. Порт по умолчанию службы PostgreSQL составляет 5432, поэтому мы выполняем следующие команды в командной строке

netstat -ano | find /i «5432»

Если найдено процесс использования порта 5432, это показывает, что занятие порта вызывает запуск услуги:

PID этого процесса — 2364. Вы хотите посмотреть, какой это процесс, вы можете выполнить:

  tasklist | findstr «2364»

Результаты выполнения следующие:

Вы можете положить конец этому процессу на странице Processcess-Process или по следующей команде:

taskkill /f /pid 5432

2.1.2 could not open control file “global/pg_control”:Permission denied

  Если порт не занят, то вы можете его использоватьPostgreSQLНативная команда запускает это.

ВойтиpostgresqlПод пути установки bin Папка, откройте командную строку здесь и выполните следующую команду:

.pg_ctl start -D ..data

Если программа сообщает о следующих ошибках

ERROR: could not open control file global/pg_control: Permission denied

Он показывает, что текущие пользователи операционной системы теряют авторитет папки данных и ее контента.

Ниже приведено решение:

1. Во -первых, введите путь установки PostgreSQL, справа -щелкните папку данных, нажмите на атрибуты -Security -Editor, вы можете увидеть разрешения всех пользователей или групп пользователей.

2. Убедитесь, что система и администратор имеют «полное управление» разрешения. Пользовательская группа пользователей имеет только три типа разрешений: «чтение и выполнение», «Список содержимого папки» и «чтение». Когда база данных предлагает «недостаточные разрешения», следует добавлять «модификацию» и «написание».

    

3. Сохраните и попробуйте снова выступить под папкой бина:

.pg_ctl start -D ..data

Обратите внимание, может ли база данных PostgreSQL начать.

2.1.3 could not locate a valid checkpoint record

Если база данных активирована, ее предложено «запустить процесс сервера» и быть успешным в течение долгого времени. Как показано на рисунке ниже, вам необходимо проверить журнал запуска базы данных. Они расположены в PG_LOG в папке данных Анкет

Откройте журнал запуска базы данных, когда возникает проблема, и проверьте информацию.

Если в журнале есть информация, аналогичная следующим черным телам, это означает, что журнал до -записи (Wal (Wal, также известный как журнал транзакций) в базе данных PostgreSQL поврежден:

LOG:  could not open file «pg_xlog/0000000100000000000000E7» (log file 0, segment 231): No such file or directory

LOG:  invalid primary checkpoint record

LOG:  could not open file «pg_xlog/0000000100000000000000E7» (log file 0, segment 231): No such file or directory

LOG:  invalid secondary checkpoint record

PANIC:  could not locate a valid checkpoint record

Решение заключается в следующем:

Введите папку Bin, откройте командную строку здесь и выполните следующую команду:

.pg_resetxlog.exe -f ..data

После того, как журнал будет сброшен, попробуйте запустить базу данных.

2.1.4 Описание идентификатора события 0 из источника PostgreSQL не может быть найдено.

Если приведенный выше метод не решает проблему, то нам нужно ввести диспетчер событий, чтобы увидеть, есть ли какой -либо журнал ошибок:

В случае применения журнала зрителей визиторов, посмотрите, есть ли следующие ошибки:

Невозможно найти источник PostgreSQL мероприятие ID 0 описание. Не установлен на локальном компьютере, который вызвал этот инцидент,Или установка повреждена. Вы можете установить или восстановить компоненты на локальном компьютере.

Если такая информация появляется, это означает, что программное обеспечение PostgreSQL было повреждено и должно быть переустановлено. Тем не менее, файл данных не обязательно поврежден, поэтому, если в последний раз, когда он резервен, база данных сгенерировала очень важные данные (например, информация о счетах), вы должны скопировать папку данных в другой каталог, а затем переустановить платформу и и Восстановите данные папки данных.

2.1.5 Could not read from file «pg_clog/000E» at offset 172032

Есть также необычная ситуация. Если в журнале появляется следующая информация:

ERROR: could not access status of transaction 710708

DETAIL:  Could not read from file «pg_clog/000E» at offset 172032: No error.

Это находится вdataПод папкойpg_clogИмя 000E Файл журнала был потерян.

Решение заключается в следующем:

существуетlinux В операционной системе выполните следующие команды:

dd if=/dev/zero of=/root/000E bs=256k count=1

Или установите DD в Windows, а затем выполните:

dd if=/dev/zero of=D:00E bs=256k count=1

Затем скопируйте созданный файл 000e вdataПод папкойpg_clog середина.

2.2 После запуска базы данных некоторые базы данных или таблицы нельзя получить

В этом случае вам нужно войти dataПод папкойpg_logПапка, постоянно проверяйте беговые журналы.

2.2.1 permission denied for relation tb_door

Если в журнале есть аналогичная информация, это показывает, что у текущего пользователя доступа нет таблицыtb_doorНекоторые разрешения:

ERROR:  permission denied for relation tb_door

Если вы хотите текущего пользователя (чтобыmy_userНапример) наличие конкретных разрешений на доступ (на основеВыберите, вставьте, обновите, удаляйте в качестве примера), Вы можете решить это так:

  1. Первый проходpostgresПользователь или владетьСоответствующие разрешения TB_DOOR, то есть журналы пользователя в базе данных, которая предоставила разрешения;
  2. Выполнить следующие команды, чтобы предоставить разрешения пользователям:grant SELECT,INSERT,UPDATE,DELETE on tb_door to my_user

2.2.2 invalid page header in block 120 of relation base/272816/309624

Если в журнале появляется следующая информация:

ERROR: invalid page header in block 120 of relation base/272816/309624

Это означает, что файл таблицы данных поврежден. Обычно это вызвано ненормальным сбоем энергии или недоразумением.Здесь «272816» является идентификатором объекта (OID) базы данных проблемы.

Если количество поврежденных таблиц и количество поврежденных страниц невелико, мы можем восстановить целое за счет жертвоприношения части данных; если количество поврежденных таблиц слишком велика или потеря данных очень важна, мы Нужно восстановить данные из резервной копии.

Когда количество поврежденных таблиц и количество поврежденных страниц невелико, решение следующим образом:

  1. Определите базу данных проблемы. Подключите любую базу данных и выполните оператор SQL ниже:

select datname from pg_database where oid = 272816;

Результаты запроса следующие:

testdb

Это означает, что название базы данных проблемы является TestDB

2. Найдите поврежденный объект базы данных. База данных задачи подключения выполните следующее оператор SQL:

select relname,relkind from pg_class where relfilenode = 309624

Если relkind = r в результатах запроса, таблица повреждена.

Например:

tb_door, r

Relname = tb_door Это означает, что поврежденная таблица — tb_door.

Если relkind = i в результатах запроса, это индекс, который поврежден.

Например:

dept_number_index, i

или же:

tb_dept_pkey, i

Следует отметить, что ущерб может быть обычным индексами или основным или уникальным ключом. Если имя индекса является «_pkey», оно, вероятно, будет принадлежать первичному ключу, и имя содержит «_key», оно может принадлежать к уникальному ключу.

Также необходимо обратить на это внимание. Предварительным условием для исправления таблицы/индекса является то, что поврежденная таблица — это таблица/индекс, созданная приложением, а не системная таблица PostgreSQL и индекс, созданный на нем. Если системная таблица/индекс, созданный на нем, повреждены, база данных необходимо восстановить из резервной копии. Чтобы определить, является ли таблица системной таблицей, самый простой способ: если имя таблицы «pg_», это означает, что это системная таблица.

чаевые

Значения pgclass.relkind являются следующими:

R: представляет обычную таблицу (обычная таблица);

I: указывает на индекс (индекс);

S: указывает последовательность (последовательность);

V: представляет представление (View);

M: укажите материализованный вид (материализованный вид);

C: представляет композитный тип (композитный тип);

T: представляет Toast Table (Toast Table);

F: представляет иностранную таблицу (внешняя таблица)

3. Исправьте поврежденный объект базы данных. Поврежденная база данных происходит для выполнения команды ремонта.

Если таблица повреждена, возьмите TB_DOOR в качестве примера, затем выполните следующие команды, чтобы завершить ремонт:

set zero_damaged_pages = on;

vacuum full tb_door;

reindex table tb_door;

Если поврежденный является обычным индексом, возьмите dept_number_index в качестве примера, затем выполните его по порядку:

set zero_damaged_pages = on;

reindex index dept_number_index;

Если урон является основным ключом или уникальным ключом, сначала вам нужно найти таблицу, которую он находится. TB_DEPT_PKEY В качестве примера:

Select tablename,indexname from pg_indexes where indexname = ‘tb_dept_pkey’;

результат поиска:

tb_dept, tb_dept_pkey

Затем получите определение индекса:

select pg_get_constraintdef((select oid from pg_constraint where conname = ‘ tb_dept_pkey ‘));

результат поиска:

       PRIMARY KEY (dept_id)

Затем повторно измените это ограничение:

Alter table drop constriant tb_dept_pkey;

Alter table add constraint tb_dept_pkey PRIMARY KEY (dept_id);

2.2.3 could not read block 190 in file «base/272816/309624»

Решение и метод этой проблемы2.2.2 Проблема фестиваля точно такая же.

2.2.4 could not open file «base/272816/379923»: No such file or directory

Если в журнале появляется следующая информация:

2019-01-21 14:28:03 HKT ERROR:  could not open file «base/272816/379923″: No such file or directory

Объяснять,oidза272816В базе данных,oidза379923Файл, соответствующий таблице, удален.

Решение заключается в следующем:

1. Сначала судите, какая база данных произошла. Подключите любую базу данных и выполните следующим образомsql

select datname from pg_database where oid = 272816

Результаты запроса следующие:

    testdb

2. Восстановите базу данных из резервной копии.

SHT (SECTION HEADER TABLE)

A binary as we know comprises of code and data. The content of binary file is organised into many blocks (made up of meaningful bytes) and each such block is termed as a Section. Each section in a binary has a header associated with it which describes that section. In other words each section is determined or known by its section header. Section Headers in a file does not overlap meaning that no byte can be present in more than one section.

SECTION HEADERS

Now, let’s have a look at the sections of the elf binary main. We’ll use readelf tool with -S option to look at the ‘Section Headers’ of the executable.

critical@d3ad:~/BINARY_DISECTION_COURSE/ELF/SECTION_HEADER_TABLE$ readelf -S --wide main
There are 29 section headers, starting at offset 0x1900:

Section Headers:
  [Nr] Name              Type            Address          Off    Size   ES Flg Lk Inf Al
  [ 0]                   NULL            0000000000000000 000000 000000 00      0   0  0
  [ 1] .interp           PROGBITS        0000000000400238 000238 00001c 00   A  0   0  1
  [ 2] .note.ABI-tag     NOTE            0000000000400254 000254 000020 00   A  0   0  4
  [ 3] .note.gnu.build-id NOTE            0000000000400274 000274 000024 00   A  0   0  4
  [ 4] .gnu.hash         GNU_HASH        0000000000400298 000298 00001c 00   A  5   0  8
  [ 5] .dynsym           DYNSYM          00000000004002b8 0002b8 000060 18   A  6   1  8
  [ 6] .dynstr           STRTAB          0000000000400318 000318 00003d 00   A  0   0  1
  [ 7] .gnu.version      VERSYM          0000000000400356 000356 000008 02   A  5   0  2
  [ 8] .gnu.version_r    VERNEED         0000000000400360 000360 000020 00   A  6   1  8
  [ 9] .rela.dyn         RELA            0000000000400380 000380 000030 18   A  5   0  8
  [10] .rela.plt         RELA            00000000004003b0 0003b0 000018 18  AI  5  22  8
  [11] .init             PROGBITS        00000000004003c8 0003c8 000017 00  AX  0   0  4
  [12] .plt              PROGBITS        00000000004003e0 0003e0 000020 10  AX  0   0 16
  [13] .text             PROGBITS        0000000000400400 000400 000172 00  AX  0   0 16
  [14] .fini             PROGBITS        0000000000400574 000574 000009 00  AX  0   0  4
  [15] .rodata           PROGBITS        0000000000400580 000580 000013 00   A  0   0  4
  [16] .eh_frame_hdr     PROGBITS        0000000000400594 000594 00003c 00   A  0   0  4
  [17] .eh_frame         PROGBITS        00000000004005d0 0005d0 000100 00   A  0   0  8
  [18] .init_array       INIT_ARRAY      0000000000600e10 000e10 000008 08  WA  0   0  8
  [19] .fini_array       FINI_ARRAY      0000000000600e18 000e18 000008 08  WA  0   0  8
  [20] .dynamic          DYNAMIC         0000000000600e20 000e20 0001d0 10  WA  6   0  8
  [21] .got              PROGBITS        0000000000600ff0 000ff0 000010 08  WA  0   0  8
  [22] .got.plt          PROGBITS        0000000000601000 001000 000020 08  WA  0   0  8
  [23] .data             PROGBITS        0000000000601020 001020 000014 00  WA  0   0  8
  [24] .bss              NOBITS          0000000000601034 001034 000004 00  WA  0   0  1
  [25] .comment          PROGBITS        0000000000000000 001034 000024 01  MS  0   0  1
  [26] .symtab           SYMTAB          0000000000000000 001058 0005d0 18     27  43  8
  [27] .strtab           STRTAB          0000000000000000 001628 0001d3 00      0   0  1
  [28] .shstrtab         STRTAB          0000000000000000 0017fb 000103 00      0   0  1
Key to Flags:
  W (write), A (alloc), X (execute), M (merge), S (strings), I (info),
  L (link order), O (extra OS processing required), G (group), T (TLS),
  C (compressed), x (unknown), o (OS specific), E (exclude),
  l (large), p (processor specific)

Don’t get stunned by this evil looking output. Now we’re going to understand the output piece-by-piece.

HOW TO READ THE OUTPUT

This is probably the most important part for beginners. Consider the snippet taken from above.

THE FIRST LINE

There are 29 section headers, starting at offset 0x1900:

It briefs about the number of section headers the file has (remember the e_shnum field of ELF header) and the offset to the section header Table (remember the e_shoff field).

FORMAT OF SECTION HEADER TABLE

It describes the format of section header table.

Section Headers:
  [Nr] Name              Type            Address          Off    Size   ES Flg Lk Inf Al
FIELD Description
[Nr] Identifies the index of section
Name Identifies the name of the section
Type Identifies the section type. Type describes what kind of data section stores.
See SECTION TYPES. It is defined by sh_type member of Elf64_Shdr structure
defined in /usr/include/elf.h.
Address Identifies the virtual address(logical addresss) at which the section
starts. (Each process has its own Virtual Address provided by the OS kernel).
For beginners, it can be thought of as the memory address in RAM where the
section starts.
Offset It is the distance (in bytes) from the begining of the file to the section. Don’t
confuse youself between offset and Virtual Address, Virtual addresss is a
runtime concept whereas offset tells tells about physical location in the file.
Size Identifies the size of each section .
EntSize Contains a 0 value if the section does not hold any table of fixed size entries.
Flags Identifies the attributes/properties of a section. A lot can be judged from the
Flags of the Executable. Most common ones are R(Readable), W(Writable),
X(Executable), A(Allocate memory), T(Thread Local Storage).
Link Stores the link information. The interpretation of this field depends on the
SECTION TYPE.
Info Stores the auxiliary information. The interpretation of this field depends on
the SECTION TYPE.
Align Allignment constraint. This value ensures that the offset of the section should
be divisible by this value. Value 0 means that there is no alignment constraint.

The structure named Elf64_Shdr (Elf32_Shdr on a 32-bit platform) defined in /usr/include/elf.h describes a section header of an ELF.

critical@d3ad:~$ cat /usr/include/elf.h | grep -B12 "} Elf64_Shdr"
typedef struct
{
  Elf64_Word	sh_name;		/* Section name (string table index) */
  Elf64_Word	sh_type;		/* Section type */
  Elf64_Xword	sh_flags;		/* Section flags */
  Elf64_Addr	sh_addr;		/* Section virtual addr at execution */
  Elf64_Off	sh_offset;		/* Section file offset */
  Elf64_Xword	sh_size;		/* Section size in bytes */
  Elf64_Word	sh_link;		/* Link to another section */
  Elf64_Word	sh_info;		/* Additional section information */
  Elf64_Xword	sh_addralign;		/* Section alignment */
  Elf64_Xword	sh_entsize;		/* Entry size if section holds table */
} Elf64_Shdr;

Let’s see what all we understood by talking about some interesting entries from above.

Section Headers:
  [Nr] Name              Type            Address          Off    Size   ES Flg Lk Inf Al
  [ 0]                   NULL            0000000000000000 000000 000000 00      0   0  0

The first entry is always a NULL entry. It marks the section as inactive and is always present at the begining of Section Header Table (I mark it useless in my subconcious mind though). This section header is perhaps this way due to historical reasons when first entry was zeroed out to identify NULL references in a program (where all NULL references were made to jump to NULL entries) which certainly doesn’t make sense to put in SHT as it doesn’t contribute to program runtime (afterall, it was just a wild guess from my end!).

Section Headers:
  [Nr] Name              Type            Address          Off    Size   ES Flg Lk Inf Al
...
  [13] .text             PROGBITS        0000000000400400 000400 000172 00  AX  0   0 16

...

Here,

  • [Nr] is index of the entry in SHT which is 13. In the world of computers, indexing usually starts from 0 rather than 1.
  • Name (sh_name): it is the index into the section header string table (.shstrtab section). Above, readelf gets to .shstrtab and gets «.text» to display us.
  • Type (sh_type) of this section is PROGBITS (meaning that it stores programmer defined data). Almost every important section have a unique value for this field which is discussed next in section descriptions page.
  • Address (sh_addr) is 0x0000000000400400 meaning that this section loads at 0x0000000000400400 virtual address in memory. For correct information, virtual address must be consulted from PHT rather than SHT (which is ignored during program runtime).
  • Offset (sh_offset) tells that .text section is 0x00000400 bytes from the beginning of file.
  • Size (sh_size) of the section is 0x0000000000000172 bytes (representing on-disk size).
  • ES (sh_entsize) holds the single entry size for the sections that hold a table of fixed-sized entries.
  • Flags (sh_flags) set are AX, i.e. for ‘Allocate’ and ‘Execute’, meaning that memory should be allocated for this section at the runtime and that this section is supposed to be executable. The A flag set on a section means that the section will be present and loaded into the memory at the runtime unlike the sections without ‘A’ flag which will not be loaded into memory at the time of execution of program.
  • Link (sh_link) and Info (sh_info) These 2 fields hold special information and are valid only for a few sections. All other sections have this field zeroed out as we can see here — .text section doesn’t link to any other section or entry in SHT. The interpretation is described below (taken from ELF specifications v1.2).

  • Align (sh_addralign) is 16 which means that the offset 0x00000400, should be divisible by 16(0x10), i.e. 0x00000400/0x10 = 0x0000040 (divisible by 16)

Go through each section names and analyse the Section Header Table (at least to be familiarised with the output). Now, I guess we understand how to read the output of readelf.

Below is how you can programatically parse SHT. Please look parse_sht.c for full source. I guess, e_shoff (SHT offset) and e_shnum (number of entries in SHT) as provided by the ELF header are enough to parse the entire SHT.

void parseSht (uint8_t *map) {
	Elf64_Ehdr *ehdr = (Elf64_Ehdr *) map;
	Elf64_Shdr *sht  = (Elf64_Shdr *) &map[ehdr->e_shoff];
	char *shstrtab   = &map[ sht[ehdr->e_shstrndx].sh_offset ]; 

	fprintf (stderr, "shstrtab: first string: %sn", shstrtab);

	for (int i = 0; i < ehdr->e_shnum; ++i) {

		/* sh_name */
		fprintf (stderr, "[%d] %snt", i, &shstrtab[sht[i].sh_name]);
		
		/* sh_type */
		switch (sht[i].sh_type) {
			case SHT_NULL: 		fprintf (stderr, "NULL");
				       			break;
			case SHT_PROGBITS:	fprintf (stderr, "PROGBITS");
					  			break;
			case SHT_SYMTAB:	fprintf (stderr, "SYMTAB");
								break;
			case SHT_STRTAB: 	fprintf (stderr, "STRTAB");
								break;
			case SHT_RELA:		fprintf (stderr, "RELA");
								break;
			case SHT_GNU_HASH:  fprintf (stderr, "GNU HASH");
								break;
			case SHT_DYNAMIC:   fprintf (stderr, "DYNAMIC");
                                break;
			case SHT_NOTE:      fprintf (stderr, "NOTE");
                                break;
            case SHT_NOBITS:    fprintf (stderr, "NOBITS");
                                break;
			case SHT_REL:       fprintf (stderr, "REL");
                                break;
            case SHT_SHLIB:     fprintf (stderr, "SHLIB");
                                break;
			case SHT_DYNSYM:    fprintf (stderr, "DYNSYM");
                                break;
            case SHT_LOPROC:    fprintf (stderr, "LOPROC");
                                break;
			case SHT_HIPROC:    fprintf (stderr, "HIPROC");
                                break;
            case SHT_LOUSER:    fprintf (stderr, "LOUSER");
                                break;
			case SHT_HIUSER:    fprintf (stderr, "HIUSER");
                                break;
            default:			fprintf (stderr, "Unknown Section");
								break;	
		}		
		fprintf (stderr, "t");

		/* sh_flags */
		if (sht[i].sh_flags & SHF_WRITE)	fprintf (stderr, "W");
		else								fprintf (stderr, " ");
		if (sht[i].sh_flags & SHF_ALLOC)	fprintf (stderr, "A");
											fprintf (stderr, " ");
		if (sht[i].sh_flags & SHF_EXECINSTR)fprintf (stderr, "X");
											fprintf (stderr, " ");
		if (sht[i].sh_flags & SHF_MASKPROC) fprintf (stderr, "M");
											fprintf (stderr, " ");
		fprintf (stderr, "t");

		/* Similarly, one can access any field of a section header */

		fprintf (stderr, "n");
	}	
}	

Similarly, we can access any field inside a section header. Next, we’ll dig a little deeper to gain an understanding on the purpose of various sections listed in section header table.

PREV — ELF HEADER
NEXT — SECTIONS DESCRIPTION

Понравилась статья? Поделить с друзьями:
  • Invalid client id код ошибки 15
  • Invalid characters in hostname java как исправить
  • Invalid character in hostname java как исправить
  • Invalid captcha error message
  • Invalid bios image gigabyte как исправить