Почему некоторые исполняемые файлы не имеют функции main? - PullRequest
1 голос
/ 03 сентября 2011

Я "objdump -d" исполняемый файл, например, / bin / ls, и я обнаружил, что в ассемблерном коде нет основной функции.Почему?

Ответы [ 2 ]

5 голосов
/ 03 сентября 2011

Вы, вероятно, найдете «main ()» в большинстве исполняемых файлов, которые не были удалены:

http://linux.die.net/man/1/strip

Возможно, вы также увидите что-то подобное, еслипобежал следующее:

objdump -d /bin/ls|grep main 
objdump: /bin/ls: no symbols
3 голосов
/ 03 сентября 2011

Есть несколько возможных объяснений:

  1. Программа, о которой идет речь, может быть написана не на C. Тот факт, что C требует main, не означает, что мир требует его.
  2. Функция main может быть встроена или исключена компилятором в целом.Операционная система просто вызывает точку входа;не имеет значения, является ли это началом функции с именем main.
  3. (я не уверен насчет objdump) Objdump может не отображать все возможные символы в программе;учитывая, что вы указываете его на связанный исполняемый файл, а не на объектные файлы, на самом деле нет контракта для objdump, чтобы сообщить вам все возможные функции в исполняемом файле;только те, которые можно назвать внешне.

Символическая информация - только мнемоника;процессор не смотрит на эти вещи вообще.

...