1. cpp:
int meth() {
return 0;
}
__asm__(".global meth_alias \n meth_alias = meth");
__asm__(".global meth_alias2 \n meth_alias2 = meth");
2. cpp:
int meth_alias();
int meth_alias2();
int test()
{
return meth_alias()+ meth_alias2();
}
сборка:
g++ -c -fPIC 1.cpp
g++ -c -fPIC 2.cpp
g++ -o 12.so --shared 1.o 2.o
Там должны быть символы "meth_alias "и" meth_alias2 "в 1.o, но как напечатать эти символы с помощью nm / objdump / readelf? Флаги существующих команд отображают псевдоним только как ОДИН неопределенный символ, называемый исходным именем «мет». Разве не должно быть одной записи для каждого псевдонима?
Является ли псевдоним обычными символами в таблице символов, то есть имя + адрес и адрес совпадают с исходным методом?