LINUX.ORG.RU

Хочешь приспособить для статического линкования .so ? )

loki
()
Ответ на: комментарий от grustnoe

grustnoe:
Не могу найти :(
А разве
они не обычный gcc+binutils используют?

loki:
Меня скорее бесит тот факт, что GNU ld можно на вход подать всё что угодно и он что-то выплюнет в ответ (то, что это что-то будет нерабочим его мало волнует).

Murr ★★
() автор топика

> GNU binutils не предлагать... нечитаемо. :)

Почему нечитаемо? В каком смысле?

Ошибка чтения при записи что ли? ;)

anonymous
()
Ответ на: комментарий от anonymous

Re

Ну, вот тут сравниваются линкеры
http://my.execpc.com/~geezer/osd/linkers.htm.
Maybe подойдет MinGW, но я так понял, что оно какое-то ущербное.
Еще, может, это совсем не то что я думаю, но есть что-то под названием collect/collect2.
Могу дать линкер, принимающий OMF и рожающий ELF, но екзешником без сырцов :)

Debugger
()
Ответ на: Re от Debugger

И никакое оно не ущербное - MinGW: A collection of freely available and freely distributable Windows specific header files and import libraries combined with GNU toolsets that allow one to produce native Windows programs that do not rely on any 3rd-party DLLs.

PETER ★★
()
Ответ на: Re от Debugger

Debugger: спасибо за ссылку, но open-source ld кроме как GNU я там не нашел :(, хотя бесплатных действительно много.

anonymous: "нечитаемо" в том смысле, что код очень корявый. Cygnus многие пинали за это, но эффект нулевой.

Murr ★★
() автор топика
Ответ на: комментарий от Murr

Дык это всегда бывает когда с другим корявым кодом стыковаться
приходится, а тут столько стыковок ....

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

А ежели сам рихтуешь, типа под спец. процессор (прищлось
сделать под процессор с битовой адресацией), DSP какой,
у которого каждая область со своей схемой адресации, или
многопроцессорную систему с разнотипными процессорами (типа
словная - бйтовая адресация) да дабы они одним процессором
загружались-управлялись, да вместе общими переменными
пользовались, то конечно попотешь, но все рихтуется.
А код-то какой получается - заглядение (тьфу глаза бы мои
не смотрели ;-) Но ей-бо читабельно.

>loki:
>Меня скорее бесит тот факт, что GNU ld можно на вход подать всё что >угодно и он что-то выплюнет в ответ (то, что это что-то будет >нерабочим его мало волнует).

Так он вас по дефолту понял, он понятливый.
А вы живете не по понятиям, вы бы его скриптиком-скриптиком.
Для спец. работ без этого нельзя.
Иногда, соглашусь не помогает :-( Ну тогда читать :-)

Иногда долинк помогает (сначала добавляем НЕЧТО), а уж получившийся
модуль сам со всем линкуется. Тут обычно вместе со скриптом
почти все решается.

io ★★
()
Ответ на: комментарий от io

io: Для написания программ для другой платформы и злых хакерств может концепция BFD и linker scripts и хороша... но для простого смертного это больше на маразм похоже. Может я действительно не там не то ищу... Какой финт ушами нужно сделать, чтобы из so(shared) получить o(relocatable)? Может уже существует какой-нибудь ld script?

Murr ★★
() автор топика
Ответ на: комментарий от Murr

Как я понимаю, нужно заботать две вещи: что лежит и как в .o и что и как лежит в .so - и тогда станет понятно какой финт нужно сделать. Поковыряв rtld я вроде со вторым разобрался, но насчет первого даже не знаю где ковырять... ну вот разве что ld :-/

Murr ★★
() автор топика
Ответ на: комментарий от Murr

Ну или такая задача: преобразовать бинарник ls, чтобы при каждом вызове readdir дополнительно выводилась строчка вроде "ls is calling readdir". Если просто собрать relocatable с __wrap_readdir и вызовом __real_readdir, после чего подать ld /bin/ls myreaddir.o --wrap readdir... -lc, то получится хрень. Как я понимаю, нужно из /bin/ls вырезать часть символьной/раздельной информации дабы она не продублировалась в выходном файле...

P.S. В общем, вот такая проблема. :)

Murr ★★
() автор топика
Ответ на: комментарий от Murr

>Ну или такая задача: преобразовать бинарник ls, чтобы при каждом вызове readdir дополнительно выводилась строчка вроде "ls is calling readdir".

Unix way? $ strace -e trace=readdir ls

По-моему, ls readdir не вызывает :)

anonymous
()
Ответ на: комментарий от anonymous

anonymous:

Думаю, зависит от старости дистрибутива. Есть же системный вызов readdir - значит он использовался. Но, вообще, это, конечно, гипотетический пример. Конечная цель - это не модификация ls. :)

Murr ★★
() автор топика
Ответ на: комментарий от Murr

readdir64

Точно в readdir нет, а вот в readdir64 у меня попадает. Логично.

Во, теперь то уж ясно, что цель не ls. А что?
Господам милым крэкерам не дали прямого средства для модификации?
Поэтому все остальные злобные хакеры и пользуются злобными ld.
Что ломаем? Чем так so не угодила, какую правим?

io ★★
()
Ответ на: readdir64 от io

io:

Да нет... Хакерство/крэкерство не причем. Тут чисто научный интерес. Ковырять ELF ручками можно, но неохота. Как я понимаю, ld в соответствии со script сливает все sections и делает relocation; допустим есть .o, где определен readdir, тогда при компоновке с ls readdir должен разрешиться и исчезнуть из dynsym - а фиг там. Вроде даже версии совпадают, а фиг там - по одному readdir на symtab и dynsym. :((

Murr ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.