Почему я получаю этот вывод при запуске readelf -s

У меня есть ядро ​​​​Linux, и я пытаюсь создать на нем заголовок ELF с помощью инструмента objcopy. Ниже приведен первый шаг.

     objcopy -I binary -B i386 -O elf32-i386 --rename-section .data=.text linux_kernel.bin  main.o

И после этого я хотел прочитать таблицу символов, используя readelf -s main.o , но получаю странные символы, ниже выводится

   Symbol table '.symtab' contains 5 entries:
   Num:    Value  Size Type    Bind   Vis      Ndx Name
 0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
 1: 00000000     0 SECTION LOCAL  DEFAULT    1 
 2: 00000000     0 NOTYPE  GLOBAL DEFAULT    1 _binary_linux_kernel_bin_
 3: 004df650     0 NOTYPE  GLOBAL DEFAULT    1 _binary_linux_kernel_bin_
 4: 004df650     0 NOTYPE  GLOBAL DEFAULT  ABS _binary_linux_kernel_bin_

Теперь должны быть видны такие символы, как

_binary_linux_kernel_bin_start
_binary_linux_kernel_bin__end
_binary_linux_kernel_bin_size

Может ли кто-нибудь сообщить мне, где я делаю неправильно ?? или это ожидаемо??

Почему я хотел увидеть правильный символ, потому что нужно сделать что-то вроде ниже одного

 --entry_point=_binary_linux_kernel_bin_start

person Amit Singh Tomar    schedule 12.03.2013    source источник
comment
Вы уверены, что вывод не просто усечен? Вы пробовали в большом окне терминала?   -  person Some programmer dude    schedule 12.03.2013
comment
Да, я вижу всю большую строку после этого конкретного вывода   -  person Amit Singh Tomar    schedule 12.03.2013
comment
Это не терминал усекает. Это readelf.   -  person artless noise    schedule 12.03.2013


Ответы (2)


Просто строка слишком длинная и readelf обрезается. Попробуйте objdump -x main.o.

person artless noise    schedule 12.03.2013
comment
'Спасибо, Bills objdump -x main.o показывает мне _binary_linux_kernel_bin_start, но хотелось бы узнать еще одно: _binary_linux_kernel_bin_start=_start ?? - person Amit Singh Tomar; 12.03.2013
comment
Это будет «ноль». Как работает objcopy, вы можете создать двоичный файл и поместить его в объект. _start не будет начальным адресом ядра. Если вы свяжете 'main.o' с каким-то другим объектом и создадите финального эльфа, то _binary_linux_kernel_bin_start будет адресом на изображении. Вы не можете создать адрес загрузки Linux из двоичного файла. Эта информация ушла. - person artless noise; 13.03.2013

Вы можете использовать команду readelf -W -s main.o, где -W указывает readelf не обрезать вывод до ширины 80 символов.

person Tuxdude    schedule 12.03.2013