LINUX.ORG.RU

Re: Нужен linker (ld) для ELF в исходниках :)

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

loki
()
Ответ на: Re: Нужен linker (ld) для ELF в исходниках :) от grustnoe

Re: Re: Нужен linker (ld) для ELF в исходниках :)

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

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

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

Re: Нужен linker (ld) для ELF в исходниках :)

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

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

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

anonymous
()
Ответ на: Re: Нужен linker (ld) для ELF в исходниках :) от anonymous

Re

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

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

Re: Re

И никакое оно не ущербное - 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

Re: Re

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

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

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

Re: Re: Re

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

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

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

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

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

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

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

Re: Re: Re: Re

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

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

Re: Re: Re: Re: Re

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

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

Re: Re: Re: Re: Re: Re

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

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

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

Re: Re: Re: Re: Re: Re: Re

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

Unix way? $ strace -e trace=readdir ls

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

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

Re: Re: Re: Re: Re: Re: Re: Re

anonymous:

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

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

readdir64

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

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

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

Re: readdir64

io:

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

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

Re: Re: readdir64

Murr: есть такая libelf ( http://www.stud.uni-hannover.de/~michael/software/ ). Проблему, скорее всего, не решит, но ковыряние эльфа удобнее сделает...

PS:

мы заботимся о Вас 8)) (C) Microsoft

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