<?xml version="1.0" encoding="koi8-r"?>
<rss version="0.91">
<channel>
    <title>OpenForum RSS: Изменить размер сегмента данных объектного файла</title>
    <link>https://opennet.me/openforum/vsluhforumID9/9936.html</link>
    <description>Здравствуйте, есть такая задача. Изменить размер сегмента данных в объектном файле. То есть в файле созданным без линковки gcc -c test.c. Сразу скажу честно, задание учебное. Я понимаю принцип расположения всех сегментов,как их посмотреть, как они буду отображены в памяти ( но тут сейчас не все так однозначно, так как используется ASLR). Знаю системные вызовы brk / sbrk , но они же исполняютс в рантайме из программы. Как изменить размер объектного файла + чтобы не повредить программу. Еще такой вопрос, почему в объектнике сегмент данных (именно .data, а не .rodata) записаны нули, если он этот сегмент вообще присутствует. Хотя инициализированные переменные присутсвуют в сорцах. Подскажите пожалуйста, куда смотреть, чтобы сделать задание и объясните на счет вопросов. Спасибо заранее.&lt;br&gt;</description>

<item>
    <title>Изменить размер сегмента данных объектного файла (Fend2015)</title>
    <link>https://opennet.me/openforum/vsluhforumID9/9936.html#17</link>
    <pubDate>Sat, 13 Dec 2014 11:23:09 GMT</pubDate>
    <description>$ cat data.c&lt;br&gt;char data&#091;1024*1024&#093;=&#123;0&#125;;&lt;br&gt;int main()&#123;return 0;&#125;&lt;br&gt;$ gcc -fno-zero-initialized-in-bss -c data.c&lt;br&gt;$ objdump -h data.o &amp;#124; grep -A1 &#092;&#092;.data&lt;br&gt;  1 .data         00100000  0000000000000000  0000000000000000  00000080  2**6&lt;br&gt;                  CONTENTS, ALLOC, LOAD, DATA&lt;br&gt;&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>Изменить размер сегмента данных объектного файла (skb7)</title>
    <link>https://opennet.me/openforum/vsluhforumID9/9936.html#16</link>
    <pubDate>Mon, 10 Nov 2014 21:37:20 GMT</pubDate>
    <description>&amp;gt; Спасибо Вам огромное !! Все получилось , я был близок к Вашему &lt;br&gt;&amp;gt; решению. Только не смог найти ключа чтобы не собирать выполняемый файл &lt;br&gt;&amp;gt; (искать зависимости). Спасибо огромное еще раз.&lt;br&gt;&lt;br&gt;Не за что. Я тоже не знал такой опции, pavlinux подсказал.&lt;br&gt;</description>
</item>

<item>
    <title>Изменить размер сегмента данных объектного файла (CROSP)</title>
    <link>https://opennet.me/openforum/vsluhforumID9/9936.html#15</link>
    <pubDate>Mon, 10 Nov 2014 19:31:46 GMT</pubDate>
    <description>&amp;gt;&#091;оверквотинг удален&#093;&lt;br&gt;&amp;gt; 3. Перепаковуем линкером используя свой скрипт линкера: &lt;br&gt;&amp;gt; &#091;code&#093; &lt;br&gt;&amp;gt; $ ld -T custom.ld -r main.o -o main2.o &lt;br&gt;&amp;gt; &#091;/code&#093; &lt;br&gt;&amp;gt; 4. Смотрим размер .data в main2.o: &lt;br&gt;&amp;gt; &#091;code&#093; &lt;br&gt;&amp;gt; $ size main2.o &lt;br&gt;&amp;gt; &#091;/code&#093; &lt;br&gt;&amp;gt; Первое что в голову пришло. Ну а дальше редактируем скрипт линкера в &lt;br&gt;&amp;gt; зависимости от того, что нужно получить.&lt;br&gt;&lt;br&gt;Спасибо Вам огромное !! Все получилось , я был близок к Вашему решению. Только не смог найти ключа чтобы не собирать выполняемый файл (искать зависимости). Спасибо огромное еще раз.&lt;br&gt;</description>
</item>

<item>
    <title>Изменить размер сегмента данных объектного файла (skb7)</title>
    <link>https://opennet.me/openforum/vsluhforumID9/9936.html#14</link>
    <pubDate>Mon, 10 Nov 2014 00:59:31 GMT</pubDate>
    <description>В общем, я сделал, как pavlinux предложил, всё работает:&lt;br&gt;&lt;br&gt;1. Копируем соответствующий скрипт линкера в каталог с объектником:&lt;br&gt;&#091;code&#093;&lt;br&gt;$ cp /usr/lib/ldscripts/elf_x86_64.x ./custom.ld&lt;br&gt;&#091;/code&#093;&lt;br&gt;&lt;br&gt;2. Редактируем копию так, чтобы изменился размер секции &quot;.data&quot;, например я просто выравнивание большое втыкнул (1024 байта):&lt;br&gt;&#091;code&#093;&lt;br&gt;  .data  :&lt;br&gt;  &#123;&lt;br&gt;    *(.data .data.* .gnu.linkonce.d.*)&lt;br&gt;    SORT(CONSTRUCTORS)&lt;br&gt;    . = ALIGN(1024);&lt;br&gt;  &#125;&lt;br&gt;&#091;/code&#093;&lt;br&gt;&lt;br&gt;3. Перепаковуем линкером используя свой скрипт линкера:&lt;br&gt;&#091;code&#093;&lt;br&gt;$ ld -T custom.ld -r main.o -o main2.o&lt;br&gt;&#091;/code&#093;&lt;br&gt;&lt;br&gt;4. Смотрим размер .data в main2.o:&lt;br&gt;&#091;code&#093;&lt;br&gt;$ size main2.o&lt;br&gt;&#091;/code&#093;&lt;br&gt;&lt;br&gt;Первое что в голову пришло. Ну а дальше редактируем скрипт линкера в зависимости от того, что нужно получить.&lt;br&gt;</description>
</item>

<item>
    <title>Изменить размер сегмента данных объектного файла (skb7)</title>
    <link>https://opennet.me/openforum/vsluhforumID9/9936.html#13</link>
    <pubDate>Mon, 10 Nov 2014 00:48:09 GMT</pubDate>
    <description>&amp;gt; Это ваще не в тему.&lt;br&gt;&lt;br&gt;Подтверждаю. Как я и говорил, я не уверен на 100&#037; что в objdump будет нужная функция, просто помнил, что с помощью её выдирал секции из объектников, вот и сказал посмотреть в ту сторону.&lt;br&gt;</description>
</item>

<item>
    <title>Изменить размер сегмента данных объектного файла (skb7)</title>
    <link>https://opennet.me/openforum/vsluhforumID9/9936.html#12</link>
    <pubDate>Mon, 10 Nov 2014 00:46:39 GMT</pubDate>
    <description>Нет, похоже никак не выйдет скомпилировать выхлоп objdump. Так что этот способ тоже не подходит. Вообще странное задание, кому может понадобиться изменять размер секции .data? Как вообще можно изменить её размер, разве что новых данных туда добавить, только они же не будут использованы кодом программы, короче бессмысленное задание немного. И вообще, какая тема? Линкер, системные утилиты, работа с асмом? Т.е. что предполагается должно быть использовано для решения задачи?&lt;br&gt;</description>
</item>

<item>
    <title>Изменить размер сегмента данных объектного файла (skb7)</title>
    <link>https://opennet.me/openforum/vsluhforumID9/9936.html#11</link>
    <pubDate>Mon, 10 Nov 2014 00:38:31 GMT</pubDate>
    <description>&amp;gt; Подскажите , а как с помощью этого ключа правильно определить смещение сегмента &lt;br&gt;&amp;gt; данных чтобы задать в pad-to &lt;br&gt;&amp;gt; &#091;code&#093; &lt;br&gt;&amp;gt; --gap-fill val --pad-to val &lt;br&gt;&amp;gt; &#091;/code&#093; &lt;br&gt;&lt;br&gt;Вкратце посмотрел -- кажется действительно через objdump не выйдет изменить размер секции. Через ld, как предложил pavlinux, можно попробовать, но на выходе линкер дает бинарь, а не объектник, а вам надо объектник, как я понимаю (в качестве примера скрипта линкера можно юзать например /usr/lib/ldscripts/elf_x86_64.x).&lt;br&gt;&lt;br&gt;Есть другая идея -- дизасемблировать (через objdump) объектник в ассемблерный код и там изменить размер секции data, после чего скомпилировать асм в объектник. Проблема только в том, как дезасемблировать в такой код, который поймет gcc.&lt;br&gt;&lt;br&gt;Вот пример:&lt;br&gt;&lt;br&gt;1. Компилируем main.c в асм (main.s):&lt;br&gt;&#091;code&#093;&lt;br&gt;$ gcc -S main.c -o main.S&lt;br&gt;&#091;/code&#093;&lt;br&gt;&lt;br&gt;2. Меняем в main.S размеры переменных (например) в секции .data:&lt;br&gt;&#091;code&#093;&lt;br&gt;.data&lt;br&gt;.align 64&lt;br&gt;.typex, &#064;object&lt;br&gt;.sizex, 64&lt;br&gt;x:&lt;br&gt;.long10&lt;br&gt;.align 64&lt;br&gt;.typey, &#064;object&lt;br&gt;.sizey, 64&lt;br&gt;y</description>
</item>

<item>
    <title>Изменить размер сегмента данных объектного файла (pavlinux)</title>
    <link>https://opennet.me/openforum/vsluhforumID9/9936.html#10</link>
    <pubDate>Mon, 10 Nov 2014 00:30:40 GMT</pubDate>
    <description>&amp;gt; Подскажите , а как с помощью этого ключа правильно определить смещение сегмента &lt;br&gt;&amp;gt; данных чтобы задать в pad-to &lt;br&gt;&amp;gt; &#091;code&#093; &lt;br&gt;&amp;gt; --gap-fill val --pad-to val &lt;br&gt;&amp;gt; &#091;/code&#093; &lt;br&gt;&lt;br&gt;Это ваще не в тему.&lt;br&gt;</description>
</item>

<item>
    <title>Изменить размер сегмента данных объектного файла (pavlinux)</title>
    <link>https://opennet.me/openforum/vsluhforumID9/9936.html#9</link>
    <pubDate>Mon, 10 Nov 2014 00:05:48 GMT</pubDate>
    <description>&amp;gt; чтобы уменьшился размер сегмента данных&lt;br&gt;&lt;br&gt;1. Ну изначально было &quot;Изменить размер сегмента данных в объектном файле&quot;, &lt;br&gt;поэтому извиняйте, выбрал в сторону увеличения, как имеющее какой-то смысл. :D&lt;br&gt;2. Куда девать данные из .data? (а их можно много куда засунуть, в оверлей например). &lt;br&gt;3. Насколько уменьшать? &lt;br&gt; &lt;br&gt;&amp;gt; А на сколько я понимаю линковщик создаст уже исполняемый файлы.&lt;br&gt;&lt;br&gt;Можно и не линковать: ld -T script.ld -r old.o -o new.o  &lt;br&gt;&lt;br&gt;В общем копипасть оригинал задания.  &lt;br&gt;&lt;br&gt;Ну и последнее,я учебному заданию предшествуют лекции в которых все должно быть описано. &lt;br&gt;Сдаётся мне, что это задание при устройстве на работу.&lt;br&gt;</description>
</item>

</channel>
</rss>
