Простой способ выяснить это - написать небольшую программу, которая использует __attribute__
для создания псевдонима, а затем использовать nm
, чтобы проверить, существует ли псевдоним.Вот пример кода, который является вариантом классической программы «Hello, World»:
/* strong_alias.c
compile with 'gcc strong_alias.c'
run ./a.out to check it works, and then run 'nm ./a.out'
to check that strong_alias() has the same address as main() */
#include <stdio.h>
int main( int argc, char *argv[])
{
printf( "Hello, World\n");
return 0;
}
int strong_alias( int argc, char *argv[]) __attribute__ (( alias ("main")));
Скомпилируйте его и убедитесь, что он работает, затем используйте nm strong_alias
для просмотра таблицы символов.Вот версия, скомпилированная в CentOS 7 для x86-64:
nm ./a.out | egrep ' (main|strong_alias)'
000000000040052d T main
000000000040052d T strong_alias
Мы видим, что main
и strong_alias
имеют одинаковый адрес и, таким образом, являются псевдонимами.