В бинарник будет зашит рантайм C++, возможно, добавятся какие-нибудь дополнительные секции.
Будут другие библиотечные зависимости:
C
:
linux-vdso.so.1 => (0x00007fff6ab46000)
libc.so.6 => /lib/libc.so.6 (0x00007f0eb1149000)
/lib64/ld-linux-x86-64.so.2 (0x00007f0eb14f4000)
C++
:
linux-vdso.so.1 => (0x00007fff12fff000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00007fe1cab00000)
libm.so.6 => /lib/libm.so.6 (0x00007fe1ca87d000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00007fe1ca666000)
libc.so.6 => /lib/libc.so.6 (0x00007fe1ca2e3000)
/lib64/ld-linux-x86-64.so.2 (0x00007fe1cae2e000)
Вот такой код:
int main(){}
скомпилированный (gcc
, g++
) и дизассемблированный отличался только строками:
// в начале main
.cfi_personality 0x3,__gxx_personality_v0
...
// при выходе из main
movl $0, %eax
В варианте C++ обе были добавлены. Первая строка - видимо, какие-то метаданные, а вот вторую объяснить не могу, но в общем ничего существенного. Зачем-то обнуляется регистр eax
.