LINUX.ORG.RU

GDB плюётся на MIPS бинарник с «not in executable format»

 , ,


0

1

Привет всем! Сразу хочу сказать что я не ищу готового решения - мне достаточно будет совета насчёт «куда копать».

Собственно, есть embedded девайс, есть root доступ вместе с пачкой утилит на борту (gdb, strace, busybox).
Скачал тулчейн, нашел инструкцию как билдить бинарники под сей девайс с помощью тулчейна. Итоговые бинарники по оценкам утилит objdump и file НИЧЕМ (кроме stripped) не отличаются от тех бинарников, что уже есть на борту:

$ file bin_from_device
bin_from_device: ELF 32-bit LSB  executable, MIPS, MIPS32 rel2 version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.12, stripped
$ file hello
hello: ELF 32-bit LSB  executable, MIPS, MIPS32 rel2 version 1, dynamically linked (uses shared libs), for GNU/Linux 2.6.12, not stripped

аналогично с objdump:
$ mips-linux-gnu-objdump -f bin_from_device 

bin_from_device:     file format elf32-tradlittlemips
architecture: mips:isa32r2, flags 0x00000112:
EXEC_P, HAS_SYMS, D_PAGED
start address 0x00401900

$ mips-linux-gnu-objdump -f hello

hello:     file format elf32-tradlittlemips
architecture: mips:isa32r2, flags 0x00000112:
EXEC_P, HAS_SYMS, D_PAGED
start address 0x00400490


Всё якобы должно работать. НО! Я заливаю hello на дейвайс, и при запуска получаю segmentation fault. При попытке схавать hello с помощью бортового gdb, он плюётся вот так:
$ ./gdb.867x hello
GNU gdb 6.7.1
Copyright (C) 2007 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "mipsel-linux"...
"hello": not in executable format: File format not recognized

Такой хрени я еще не видал, о_О. Собственно, куда копать? Никак не ожидал плевка со стороны gdb.

Доп. информация:

1) Если скомпилить -static, то получаю Illegal instruction вместо segmentation fault. Лол?
2) Компилю бинари вот таким образом: $ mips-linux-gnu-gcc -EL -march=74kf2_1 -mdspr2 hello.c -o hello
3) Чипсет: Sigma Designs 8672
4) Проц: MIPS 74Kf (согласно документации на девайс)
5) cat /proc/cpuinfo
6) пробовал компилить с различными опциями -march, включая 74kc, итог один и тот же

★★★★★

Последнее исправление: reprimand (всего исправлений: 2)
Ответ на: комментарий от reprimand

Ну тогда это фигня какая-то. Я бы в таком случае обратился бы за помощью к производителям платы и мейнтейнерам тулчейна.

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

Да я вот тоже думаю так сделать, только их днём с огнём не сыщешь. Проприетарщики проприетировали да не выпроприетали.

Но вообще мне реально сложно представить причину такой странной реакции gdb, я думал он нормально схавает бинарь

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

В бинарях системы «MIPS32 rel2 version 1 (SYSV)» а у тебя без SYSV, хотя наверное это не критично и ты уже давно это заметил. Но может оно с этим SYSV бинари хотит?

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

знать бы еще что оно имеет ввиду под наличием/отсутствием SYSV...

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

просто подхватывает без ошибки и всё, дальше интерактивый gdb shell

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

Волшебство какое-то, так не бывает. Есть на приставке md5sum? Проверь что на приставке тот же бинарь, что у тебя на компе.

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

неа, ты не понял

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

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

Вот же:

Всё якобы должно работать. НО! Я заливаю hello на дейвайс

roof ★★
()
Последнее исправление: roof (всего исправлений: 1)
Ответ на: комментарий от roof

gdb запускал на самой приставке же. И он приставочные бинари кушает нормально, а мой скомпилированный hello world - нет

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

Ну так есть hello на приставке? Я предлагаю проверить, что он не был поврежден, когда ты его туда копировал.

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

Г-ди боже мой.

Я никогда не мог подумать что при трансфере на приставку файлы будут повреждаться. Причём КАЖДЫЙ РАЗ, КАРЛ. Я даже не думал проверять несоответствие файлов, т.к. я думал, что это может случаться единично.

md5 там нет, я банально увидел несоответствие размеров файлов.

Короче. Спасибо тебе добрый человек. Я так понял ты с такой хернёй когда-то уже сталкивался )

Как же у меня горит пердак... я часов 5 потратил на эту хрень и заигрывания с компилятором, ууу...

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

я банально увидел несоответствие размеров файлов.

Через что кидал? У меня по FTP были такие приколы, с тех пор зарёкся юзать FTP.

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

Через что кидал? У меня по FTP были такие приколы, с тех пор зарёкся юзать FTP.

Ну вообще на своих серваках я юзаю sshfs, а ftp держу для других людей. С proftpd никогда проблем не было.

На борде же стоял vsftpd по дефолту, не ожидал такой гнусной подствы! Грёбаный ftp! Чем они думали когда проектировали такой протокол?

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

Вот у меня есть инстинкт MD5, я проверяю всегда его, при передаче по почте, по сети, по флэшке и даже копируя на HDD/SDD. Вот тебе тоже надо такой рефлекс приобретать. Вообще, рад что у тебя всё получилось.

I-Love-Microsoft ★★★★★
()

ты когда кросскомпилишь, у тебя правильные библиотеки линкуются? может, он где-то подтащил что-то с твоего хоста? проверь, что ldd говорит.

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

Я представляю, как у тебя в своё время горело...

У меня и так была привычка проверять контрольные суммы в случае сомнений, так теперь сначала надо проверять, а потом сомневаться уже...

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

Нет, у меня все проще было, ломались ассеты при заливке на приставку (не дюну, кстати, и вообще не на сигме а на броадкоме). А подписи ассетов проверялись при загрузке. Так что быстро все всплыло, без боли.

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