Size: a a a

2021 February 24

s

std::slavik in supapro.cxx
просто я не хочу руками по ней искать имя
источник

s

std::slavik in supapro.cxx
хотя на питоне быстро наверное скрипт такой напишу
источник

C

Chuvi in supapro.cxx
std::slavik
я компилил, зачем мне ассемблер если есть мапа
там есть.. инструкц.. а, впрочем да .если руками не хочется....
источник

m

mixa secret in supapro.cxx
Hello, кто-то знает почему у std::string_view есть метод data(), но нету c_str() ?
источник

D

Dmitriy in supapro.cxx
mixa secret
Hello, кто-то знает почему у std::string_view есть метод data(), но нету c_str() ?
Потому что вьюха не обязана хранить нуль-терминированную строку
источник

m

mixa secret in supapro.cxx
ааааа, ясно, спс
источник

D

Dmitriy in supapro.cxx
mixa secret
ааааа, ясно, спс
Пример - после использования remove_suffix()
источник

E

Eagint in supapro.cxx
std::slavik
а как можно по указателю  узнать имя функции?
делаю мемори трейсер, обернул malloc, в лог вываливается типа такого, где второе число - const void *caller
#f:0x0;0x804d409-0x2000e698
#m:0x2000e6d0;0x804c89d-32
теперь нужно по этим адресам человеческие имена функций вытащить - как лучше сделать?
В elf-е есть символьная таблица которая содержит все названия функций которые были определены тобой
Если это функция была вызвана из прекомпилированого бинарника то нужно искать GOT/PLT
Если у тебя elf файл то всё легко
источник

s

std::slavik in supapro.cxx
Eagint
В elf-е есть символьная таблица которая содержит все названия функций которые были определены тобой
Если это функция была вызвана из прекомпилированого бинарника то нужно искать GOT/PLT
Если у тебя elf файл то всё легко
есть, но там замангленные имена
источник

T

Ternvein in supapro.cxx
std::slavik
я компилил, зачем мне ассемблер если есть мапа
__func__?
источник

s

std::slavik in supapro.cxx
std::slavik
есть .map файл в выходе компилятора
.text._ZN4mbed21mbed_override_consoleEi
               0x08071130       0x80 BUILD/NUCLEO_F767ZI/GCC_ARM-RELEASE/src/main.o
               0x08071130                mbed::mbed_override_console(int)
.text.startup._GLOBAL__sub_I___sync_synchronize
               0x080711b0      0x158 BUILD/NUCLEO_F767ZI/GCC_ARM-RELEASE/src/main.o
.text.startup.main
               0x08071308      0x514 BUILD/NUCLEO_F767ZI/GCC_ARM-RELEASE/src/main.o
               0x08071308                main
а тут есть и адреса и путь к файлу и имя и символ
источник

s

std::slavik in supapro.cxx
может просто есть готовые штуки которые это все парсят
источник

E

Eagint in supapro.cxx
std::slavik
есть, но там замангленные имена
Замангленные?
источник

FS

Flower Surgeon in supapro.cxx
std::slavik
есть, но там замангленные имена
источник

PK

Pavel Kazakov in supapro.cxx
Eagint
Замангленные?
_ZN3fooEic всякие
источник

s

std::slavik in supapro.cxx
Eagint
Замангленные?
ну и кстати функций там чет не вижу
источник

E

Eagint in supapro.cxx
std::slavik
может просто есть готовые штуки которые это все парсят
objdump -t filename
правда утилита исключительно консольная но вывод можно спарсить
источник

SS

Sergey Skvortsov in supapro.cxx
std::slavik
а как можно по указателю  узнать имя функции?
делаю мемори трейсер, обернул malloc, в лог вываливается типа такого, где второе число - const void *caller
#f:0x0;0x804d409-0x2000e698
#m:0x2000e6d0;0x804c89d-32
теперь нужно по этим адресам человеческие имена функций вытащить - как лучше сделать?
Способов довольно много, зависит желаемой точности / окружения
Можно через dladdr, не очень точно
Можно через libdw, она честно dwarf парсит и умеет заинлайненные функции детектить
источник

SS

Sergey Skvortsov in supapro.cxx
Посмотри на https://github.com/bombela/backward-cpp, там много разных реализаций
источник

s

std::slavik in supapro.cxx
Sergey Skvortsov
Посмотри на https://github.com/bombela/backward-cpp, там много разных реализаций
спасибо
источник