Как понять код дизассемблера раздела .bss?

Исходный код C:

static int b;

Соответствующий код дизассемблирования раздела .bss в объектном файле:

Disassembly of section .bss:

00000000 <b>:
   0:   00 00                   add    %al,(%eax)
   2:   00 00                   add    %al,(%eax)

Исходя из информации заголовка раздела:

  3 .bss          00000004  00000000  00000000  00000068  2**2
                  ALLOC

Очевидно, что .bss существует и занимает определенное место (совпадает с шестнадцатеричным дампом)!

Я хочу спросить две вещи,

1.Когда я использую readelf для сброса раздела .bss:

readelf -x .bss section_test.o
Section '.bss' has no data to dump.

Я просто не понимаю. В нем определенно есть какие-то данные, не так ли?

2. Как понять этот код в разделе .bss? Я имею в виду, что я полностью понимаю их по отдельности как сборку, но я просто немного смущен тем, почему они здесь?

Спасибо.

Дополнительная информация: MacOS с использованием Docker (Ubuntu), синтаксисом AT&T, x86_64 Arch (физический), но с использованием архива elf_i386 (32-bit) на этапе компиляции и компоновки.


person Edee    schedule 23.11.2019    source источник
comment
В разделе bss есть размер, но нет данных. Это раздел для данных, инициализированных нулями, которые можно не указывать в двоичном изображении. objdump, вероятно, просто показывает нули, которые будут сгенерированы в ОЗУ при загрузке двоичного файла.   -  person fuz    schedule 23.11.2019
comment
Да, думаю, я понимаю, что ты сказал. Но я просто хочу выяснить, что делает этот дизассемблерный код? И ради чего? Я знаю, это звучит немного смешно, но не потому ли, что все разделы 00 00 переводятся в add% al, (% eax) как дизассемблер, когда мы выгружаем объектный файл?   -  person Edee    schedule 23.11.2019
comment
Просто 00 00 - это код операции для add %al, (%eax). Содержимое .bss не предназначено для выполнения. Это просто память для переменной b.   -  person fuz    schedule 23.11.2019
comment
когда вы используете objdump для дизассемблирования файла, он предполагает, что все байты являются инструкциями, и дизассемблирует их, когда большинство разделов не является кодом, поэтому дизассемблирование следует игнорировать, это не машинный код. его данные.   -  person old_timer    schedule 23.11.2019