Как стать автором
Обновить

Подборка полезностей для программиста под Linux

Время на прочтение 44 мин
Количество просмотров 17K

Думаю, у каждого программиста есть набор любимых утилит, трюков и знаний. Некоторые он даже использует в работе. Скорее всего, у разных программистов они различаются. Значит, пришло время поделиться. Сегодня я расскажу о своей подборке того, что, вероятно, известно не настолько широко, как оно того заслуживает. Речь пойдёт преимущественно про платформу GNU/Linux.


PMD & CPD


Для начала немного кросс-платформенности. Есть такая утилита — PMD, вероятно, хорошо известная Java-программистам. Это статический анализатор, поддерживающий несколько (не очень много) языков, что и неудивительно — написание содержательных правил анализа вряд ли работа из простых. Но у этой утилиты есть и вторая часть — Copy-Paste Detector (CPD). Для его работы требуется существенно меньшее «понимание» исходного текста, так что логично, что обрабатывает он существенно больше языков.


Так вот, бытует мнение, что опенсорсный проект — это когда нужно писать код не просто, чтобы работал, а ещё и чтобы другие программисты не засмеяли. В случае крупных проектов так оно, наверное, и есть, но вот копипаст не настолько заметен. Ментейнерам, увы, тоже. И вот однажды, получив от разработчиков одной программы комментарий, что «Если здесь и здесь эти три строчки вынести во вспомогательный метод, то и в остальных двадцати местах, наверное, тоже», я решил оценить масштабы происходящего. С одной стороны, повторение паттерна из трёх строчек может выглядеть нестрашно. С другой — он явно имеет какой-то смысл, и контрибьюторам-новичкам будет проще, если смысл будет чётко отражён в имени метода.


Скрытый текст
обсуждаем чей-то код на работе:
xxx: Так вы представляете, у него там фрагмент кода в 15 строк повторяется 37 раз. Если вынести в функцию можно сэкономить полтыщи строк!
yyy: это припев.

bash.im


Недолго думая, я запустил CPD на этом C++-проекте, ожидая увидеть список повторений этого паттерна из трёх строк. Как раз с ним я не столкнулся (он не превысил порог по умолчанию для количества токенов на одно повторение), зато увидел много случаев вроде повторения идентичного метода из 50 строк в двух разных наследниках одного класса.


Вряд ли основной разработчик сознательно скопировал такой кусок — видимо, произошло несколько другое: кто-то когда-то добавил этот метод в одном из классов, а в другом pull request через много времени кто-то, недолго думая, его скопировал. Логично, что этот код был не хуже того, что уже есть в репозитории (ха-ха), поэтому был принят.


Mozilla rr


Бывало ли у вас, что, отлаживая программу, вы долго воспроизводите баг, а потом одно неверное движение — Step over вместо Step into — и всё, пичалька, ещё десять минут всё заново воспроизводить!


С Mozilla record-replay framework всё несколько по-другому: «прогоняй тесты за завтраком, отлаживай когда вернёшься» говорили они. Этот инструмент не пытается записывать изменения состояния после каждой инструкции (говорят, такой режим есть у gdb...), вместо этого он симулирует исполнение программы… с помощью самой программы. Логика такая: в целом, исполнение процесса полностью детерминировано, за исключением отдельных «возмущений»:


  • ядро может выдавать разные данные в ответ на один и тот же системный вызов — просто запишем все ответы (нужно знать каждый системный вызов «в лицо» со всеми используемыми структурами)
  • инструкция RDTSC выдаёт всё время что-то новое — к счастью, её можно сделать привилегированной, и на каждый trap вручную подставлять значения
  • на другом компьютере CPUID тоже выдаст что-то другое — на свежих процессорах её тоже можно сделать привилегированной
  • многопоточноть и многопроцессность — а вот тут нужно обсудить подробнее
  • может, я ещё что-то забыл, но суть в том, что список вполне конечен

Насколько я понимаю, работает это как-то так: все потоки всего записываемого дерева процессов запихиваются в один поток, сводя «описание многопоточности» к количеству инструкций между переключениями контекстов. Из этого следует один недостаток. Когда-то FSF ругался на монополию «архитектуры Wintel», так вот: rr запустится только на «Lintel», то есть только на Linux, и только на свежих (Nehalem и выше) интеловских процессорах, у которых достаточно стабильны performance counter-ы. Были попытки запустить на Ryzen, что-то даже удалось, но есть огрехи. На счёт других ядер ОС — не знаю.


С rr вы вначале штатно прогоняете программу, прокликиваете кнопки / вводите команды, всё это с торможением порядка полутора раз, а то и меньше. А потом вы набираете rr replay, и программа начинает исполняться «в виртуальной реальности», в которой всё происходит в точности так же, как при записи. Естественно, окон и всего такого вы не увидите — stdout и stderr сохранены — и на том спасибо. Вместо этого вы увидите gdb (говорят, поддерживаются и графические отладчики вроде QtCreator и CLion, но я пока не пробовал). Зато, если вы случайно ввели n (next), а потом поняли, что не надо было этого делать, вы можете сказать rn (reverse-next) или поставить breakpoint и сказать rc (reverse-continue). Насколько я понимаю, reverse-команды штатно присутствуют в gdb, просто по очевидным причинам редко какой бекенд способен поддержать такое.


Особый шик, на мой взгляд, — искать таким способом причину неисправности: вот вы нажали c, и программа остановилась на assertion-е. Поизучав состояние переменных с помощью print вы поняли, какая переменная имеет некорректное значение. Но кто её выставил? Вы просто говорите watch -l <переменная> (вечно путаю синтаксис, надеюсь, не в этот раз), выставляя аппаратную точку останова на запись в память, после чего говорите rc (reverse-continue) — намылить, смыть, повторить... Только не забывайте удалять старые hardware watchpoints по памяти, поскольку их не так уж и много.


А можно такое же, но с перламутровыми пуговицами?


Во первых, что делать, если хочется отлаживать операционную систему на виртуальной машине? Сам я с таким пока не сталкивался, но, говорят, у QEMU есть gdbserver и вообще. А если хочется того же, что и в rr, но для QEMU? В документации упоминается встроенный record/replay:


Record/replay functions are used for the reverse execution and deterministic replay of qemu execution. Determinitsic replay is used to record volatile system execution once and replay it for multiple times for the sake of analysis, debugging, logging, etc. This implementation of deterministic replay can be used for deterministic and reverse debugging of guest code through a gdb remote interface.

Кстати, первая версия патчей разработана, если верить той же странице, Институтом Системного Программирования РАН.


Хорошо, а если отлаживать хочется один процесс, но на Java? Для GDB имеется HotSpot unwinder. По подобному запросу находится такая страница, где рассказывается, что оно со знанием дела ковыряется в адресном пространстве JVM, предоставляя для команды bt информацию. Обнаружил я это случайно, подключившись к процессу JVM и запросив backtrace. Увы, при подготовке этой статьи на Ubuntu 18.10, unwinder стабильно рушил gdb, но инструмент может, наверное, когда его починят, в чём-то помочь и в режиме rr.


Видит око, да зуб неймёт


Однажды при отладке я столкнулся с ошибкой No space left on device. Казалось бы, обычное дело, у меня постоянно место заканчивается из-за артефактов компиляции. Но тут было нечто странное — df -h показывал по нескольку свободных гигабайтов на каждом разделе, причём, насколько я знаю, это уже с учётом зарезервированного под пользователя root места. Беглый гуглёж привёл меня к совету посмотреть вывод df -i, и действительно, на нужном разделе не было свободных inodes, то есть файлы были мелкие, но много.


Трассируй и то, и это


Думаю, многие знают об strace, а если нет — это часто весьма полезная утилита, показывающая, какие системные вызовы делает некий процесс или целое дерево процессов.


Пример вывода
$ strace ls /
execve("/bin/ls", ["ls", "/"], 0x7ffd4301e518 /* 61 vars */) = 0
brk(NULL)                               = 0x55b660056000
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=231893, ...}) = 0
mmap(NULL, 231893, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fb941d0e000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libselinux.so.1", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\20b\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=154832, ...}) = 0
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fb941d0c000
mmap(NULL, 2259152, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fb941ae4000
mprotect(0x7fb941b09000, 2093056, PROT_NONE) = 0
mmap(0x7fb941d08000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x24000) = 0x7fb941d08000
mmap(0x7fb941d0a000, 6352, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7fb941d0a000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\260A\2\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=1996592, ...}) = 0
mmap(NULL, 2004992, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fb9418fa000
mprotect(0x7fb94191c000, 1826816, PROT_NONE) = 0
mmap(0x7fb94191c000, 1511424, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x22000) = 0x7fb94191c000
mmap(0x7fb941a8d000, 311296, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x193000) = 0x7fb941a8d000
mmap(0x7fb941ada000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1df000) = 0x7fb941ada000
mmap(0x7fb941ae0000, 14336, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7fb941ae0000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libpcre.so.3", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0p!\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=468944, ...}) = 0
mmap(NULL, 471304, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fb941886000
mmap(0x7fb941888000, 335872, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x2000) = 0x7fb941888000
mmap(0x7fb9418da000, 122880, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x54000) = 0x7fb9418da000
mmap(0x7fb9418f8000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x71000) = 0x7fb9418f8000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libdl.so.2", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0000\21\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=18656, ...}) = 0
mmap(NULL, 20752, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fb941880000
mmap(0x7fb941881000, 8192, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1000) = 0x7fb941881000
mmap(0x7fb941883000, 4096, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x3000) = 0x7fb941883000
mmap(0x7fb941884000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x3000) = 0x7fb941884000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libpthread.so.0", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0`l\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=149696, ...}) = 0
mmap(NULL, 132288, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fb94185f000
mmap(0x7fb941865000, 61440, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x6000) = 0x7fb941865000
mmap(0x7fb941874000, 24576, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x15000) = 0x7fb941874000
mmap(0x7fb94187a000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1a000) = 0x7fb94187a000
mmap(0x7fb94187c000, 13504, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7fb94187c000
close(3)                                = 0
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fb94185d000
arch_prctl(ARCH_SET_FS, 0x7fb94185e380) = 0
mprotect(0x7fb941ada000, 16384, PROT_READ) = 0
mprotect(0x7fb94187a000, 4096, PROT_READ) = 0
mprotect(0x7fb941884000, 4096, PROT_READ) = 0
mprotect(0x7fb9418f8000, 4096, PROT_READ) = 0
mprotect(0x7fb941d08000, 4096, PROT_READ) = 0
mprotect(0x55b65ebdd000, 8192, PROT_READ) = 0
mprotect(0x7fb941d70000, 4096, PROT_READ) = 0
munmap(0x7fb941d0e000, 231893)          = 0
set_tid_address(0x7fb94185e650)         = 13162
set_robust_list(0x7fb94185e660, 24)     = 0
rt_sigaction(SIGRTMIN, {sa_handler=0x7fb9418656c0, sa_mask=[], sa_flags=SA_RESTORER|SA_SIGINFO, sa_restorer=0x7fb941871dd0}, NULL, 8) = 0
rt_sigaction(SIGRT_1, {sa_handler=0x7fb941865750, sa_mask=[], sa_flags=SA_RESTORER|SA_RESTART|SA_SIGINFO, sa_restorer=0x7fb941871dd0}, NULL, 8) = 0
rt_sigprocmask(SIG_UNBLOCK, [RTMIN RT_1], NULL, 8) = 0
prlimit64(0, RLIMIT_STACK, NULL, {rlim_cur=8192*1024, rlim_max=RLIM64_INFINITY}) = 0
statfs("/sys/fs/selinux", 0x7fff2349efb0) = -1 ENOENT (No such file or directory)
statfs("/selinux", 0x7fff2349efb0)      = -1 ENOENT (No such file or directory)
brk(NULL)                               = 0x55b660056000
brk(0x55b660077000)                     = 0x55b660077000
openat(AT_FDCWD, "/proc/filesystems", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
read(3, "nodev\tsysfs\nnodev\trootfs\nnodev\tr"..., 1024) = 478
read(3, "", 1024)                       = 0
close(3)                                = 0
access("/etc/selinux/config", F_OK)     = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=5703680, ...}) = 0
mmap(NULL, 5703680, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fb9412ec000
close(3)                                = 0
ioctl(1, TCGETS, {B38400 opost isig icanon echo ...}) = 0
ioctl(1, TIOCGWINSZ, {ws_row=65, ws_col=271, ws_xpixel=0, ws_ypixel=0}) = 0
stat("/", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
openat(AT_FDCWD, "/", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 3
fstat(3, {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
getdents64(3, /* 30 entries */, 32768)  = 808
getdents64(3, /* 0 entries */, 32768)   = 0
close(3)                                = 0
fstat(1, {st_mode=S_IFCHR|0600, st_rdev=makedev(136, 1), ...}) = 0
write(1, "bin  boot  cdrom  dev  etc  home"..., 192bin  boot  cdrom  dev  etc  home  initrd.img  initrd.img.old  lib  lib32  lib64  libx32  lost+found  media  mnt  opt  proc  root  run  sbin  snap  srv       sys  tmp  usr  var  vmlinuz  vmlinuz.old
) = 192
close(1)                                = 0
close(2)                                = 0
exit_group(0)                           = ?
+++ exited with 0 +++

Как вы видите, она даже декодирует входные и выходные данные (а вообще, это настраивается).


Наверное, меньшее количество народа знает об ltrace — аналогичном инструменте для анализа вызовов между динамическими объектами (программой и библиотеками). Увы, похоже, что разработка ltrace заброшена, что казалось бы, странно, учитывая что инструмент полезный и вообще должен бы управляться той же командой разработчиков, что пилит загрузчик из libc. В таких случаях принято говорить «Вы не поверите...» :) Оказывается, в свежих версиях glibc есть инструмент sotruss. Конфигурируемость у него поменьше, правда, зато актуальный и в glibc. Есть и ложка дёгтя: ни ltrace, ни sotruss не декодируют параметры вызовов, что и неудивительно — нет исчерпывающего списка того, какие вызовы они должны декодировать, тут уже нужна сторонняя метаинформация. Может, её и можно как-то подложить, но, честно говоря, особо не приходилось пользоваться трассировкой библиотек. Однако знать о таких инструментах, думаю, полезно.


sotruss ls /
$ sotruss ls /
             ls -> libc.so.6      :*strrchr(0x7ffcd884a236, 0x2f, 0x7ffcd8847f00)
             ls -> libc.so.6      :*setlocale(0x6, 0x5642e3e888ca, 0x14)
             ls -> libc.so.6      :*bindtextdomain(0x5642e3e889fb, 0x5642e3e88a15, 0x0)
             ls -> libc.so.6      :*textdomain(0x5642e3e889fb, 0x0, 0x1)
             ls -> libc.so.6      :*__cxa_atexit(0x5642e3e7d640, 0x0, 0x5642e3e92008)
             ls -> libc.so.6      :*isatty(0x1, 0x1, 0x2)
             ls -> libc.so.6      :*getenv(0x5642e3e88a27, 0x3, 0x0)
             ls -> libc.so.6      :*getenv(0x5642e3e88a35, 0x3, 0x5642e3e88a27)
             ls -> libc.so.6      :*ioctl(0x1, 0x5413, 0x7ffcd8847db0)
             ls -> libc.so.6      :*getenv(0x5642e3e88a3d, 0x5413, 0x7ffcd8847db0)
             ls -> libc.so.6      :*getopt_long(0x2, 0x7ffcd8847ee8, 0x5642e3e8adc8)
             ls -> libc.so.6      :*getenv(0x5642e3e88ae5, 0x1, 0x7f4e75bc9000)
             ls -> libc.so.6      :*getenv(0x5642e3e88ae8, 0x5642e3e93328, 0x5642e3e93320)
             ls -> libc.so.6      :*getenv(0x5642e3e8b08c, 0x5642e3e93328, 0x5642e3e88ae8)
             ls -> libc.so.6      :*getenv(0x5642e3e8b096, 0x5642e3e93328, 0x5642e3e8b08c)
             ls -> libc.so.6      :*getenv(0x5642e3e88ae8, 0x5642e3e93328, 0x5642e3e8b096)
             ls -> libc.so.6      :*__errno_location(0x0, 0x5642e3e93328, 0x0)
             ls -> libc.so.6      :*memcpy(0x5642e534db30, 0x5642e3e93520, 0x38)
             ls -> libc.so.6      :*__errno_location(0x0, 0x5642e3e93520, 0x38)
             ls -> libc.so.6      :*memcpy(0x5642e534db70, 0x5642e3e93520, 0x38)
             ls -> libc.so.6      :*getenv(0x5642e3e88bbc, 0x0, 0x2)
             ls -> libc.so.6      :*__errno_location(0x7ffcd88479a6, 0x2, 0x7ffcd884a239)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x7ffcd88479a6, 0x2, 0x7ffcd884a239)
             ls -> libc.so.6      :*strlen(0x7ffcd884a239, 0x5642e534db38, 0x2f)
             ls -> libc.so.6      :*__xstat(0x1, 0x7ffcd884a239, 0x5642e534dc58)
             ls -> libc.so.6      :*strlen(0x7ffcd884a239, 0x5642e534dc58, 0x1)
             ls -> libc.so.6      :*memcpy(0x5642e5352a70, 0x7ffcd884a239, 0x2)
             ls -> libc.so.6      :*_setjmp(0x5642e3e92300, 0x5642e5352aa0, 0x5642e534dd08)
             ls -> libc.so.6      :*strlen(0x5642e5352a70, 0x5642e5352ad0, 0x5642e5352ab0)
             ls -> libc.so.6      :*memcpy(0x5642e5352ae0, 0x5642e5352a70, 0x2)
             ls -> libselinux.so.1:*freecon(0x0, 0x0, 0x0)
             ls -> libc.so.6      :*__errno_location(0x5642e5352ae0, 0x0, 0x1)
             ls -> libc.so.6      :*opendir(0x5642e5352ae0, 0x0, 0x1)
             ls -> libc.so.6      :*readdir(0x5642e5352b00, 0x5642e535ab30, 0x5642e5352b00)
             ls -> libc.so.6      :*__errno_location(0x7ffcd8847626, 0x2, 0x5642e5352b43)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x7ffcd8847626, 0x2, 0x5642e5352b43)
             ls -> libc.so.6      :*strlen(0x5642e5352b43, 0x5642e534db38, 0x6c)
             ls -> libc.so.6      :*strlen(0x5642e5352b43, 0x5642e534db38, 0x0)
             ls -> libc.so.6      :*memcpy(0x5642e5352a70, 0x5642e5352b43, 0x4)
             ls -> libc.so.6      :*readdir(0x5642e5352b00, 0x0, 0x4)
             ls -> libc.so.6      :*readdir(0x5642e5352b00, 0x9e8c788d5275094, 0x5642e5352b48)
             ls -> libc.so.6      :*__errno_location(0x7ffcd8847626, 0x2, 0x5642e5352b73)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x7ffcd8847626, 0x2, 0x5642e5352b73)
             ls -> libc.so.6      :*strlen(0x5642e5352b73, 0x5642e534db38, 0x76)
             ls -> libc.so.6      :*strlen(0x5642e5352b73, 0x5642e534db38, 0x0)
             ls -> libc.so.6      :*memcpy(0x5642e535ab40, 0x5642e5352b73, 0xc)
             ls -> libc.so.6      :*readdir(0x5642e5352b00, 0x0, 0xc)
             ls -> libc.so.6      :*__errno_location(0x7ffcd8847626, 0x2, 0x5642e5352b93)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x7ffcd8847626, 0x2, 0x5642e5352b93)
             ls -> libc.so.6      :*strlen(0x5642e5352b93, 0x5642e534db38, 0x65)
             ls -> libc.so.6      :*strlen(0x5642e5352b93, 0x5642e534db38, 0x0)
             ls -> libc.so.6      :*memcpy(0x5642e535ab60, 0x5642e5352b93, 0x4)
             ls -> libc.so.6      :*readdir(0x5642e5352b00, 0x0, 0x4)
             ls -> libc.so.6      :*__errno_location(0x7ffcd8847626, 0x2, 0x5642e5352bab)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x7ffcd8847626, 0x2, 0x5642e5352bab)
             ls -> libc.so.6      :*strlen(0x5642e5352bab, 0x5642e534db38, 0x62)
             ls -> libc.so.6      :*strlen(0x5642e5352bab, 0x5642e534db38, 0x0)
             ls -> libc.so.6      :*memcpy(0x5642e535ab80, 0x5642e5352bab, 0x5)
             ls -> libc.so.6      :*readdir(0x5642e5352b00, 0x0, 0x5)
             ls -> libc.so.6      :*__errno_location(0x7ffcd8847626, 0x2, 0x5642e5352bc3)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x7ffcd8847626, 0x2, 0x5642e5352bc3)
             ls -> libc.so.6      :*strlen(0x5642e5352bc3, 0x5642e534db38, 0x63)
             ls -> libc.so.6      :*strlen(0x5642e5352bc3, 0x5642e534db38, 0x0)
             ls -> libc.so.6      :*memcpy(0x5642e535aba0, 0x5642e5352bc3, 0x6)
             ls -> libc.so.6      :*readdir(0x5642e5352b00, 0x0, 0x6)
             ls -> libc.so.6      :*__errno_location(0x7ffcd8847626, 0x2, 0x5642e5352be3)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x7ffcd8847626, 0x2, 0x5642e5352be3)
             ls -> libc.so.6      :*strlen(0x5642e5352be3, 0x5642e534db38, 0x72)
             ls -> libc.so.6      :*strlen(0x5642e5352be3, 0x5642e534db38, 0x0)
             ls -> libc.so.6      :*memcpy(0x5642e535abc0, 0x5642e5352be3, 0x4)
             ls -> libc.so.6      :*readdir(0x5642e5352b00, 0x0, 0x4)
             ls -> libc.so.6      :*__errno_location(0x7ffcd8847626, 0x2, 0x5642e5352bfb)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x7ffcd8847626, 0x2, 0x5642e5352bfb)
             ls -> libc.so.6      :*strlen(0x5642e5352bfb, 0x5642e534db38, 0x73)
             ls -> libc.so.6      :*strlen(0x5642e5352bfb, 0x5642e534db38, 0x0)
             ls -> libc.so.6      :*memcpy(0x5642e535abe0, 0x5642e5352bfb, 0x5)
             ls -> libc.so.6      :*readdir(0x5642e5352b00, 0x0, 0x5)
             ls -> libc.so.6      :*__errno_location(0x7ffcd8847626, 0x2, 0x5642e5352c13)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x7ffcd8847626, 0x2, 0x5642e5352c13)
             ls -> libc.so.6      :*strlen(0x5642e5352c13, 0x5642e534db38, 0x74)
             ls -> libc.so.6      :*strlen(0x5642e5352c13, 0x5642e534db38, 0x0)
             ls -> libc.so.6      :*memcpy(0x5642e535ac00, 0x5642e5352c13, 0x4)
             ls -> libc.so.6      :*readdir(0x5642e5352b00, 0x0, 0x4)
             ls -> libc.so.6      :*__errno_location(0x7ffcd8847626, 0x2, 0x5642e5352c2b)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x7ffcd8847626, 0x2, 0x5642e5352c2b)
             ls -> libc.so.6      :*strlen(0x5642e5352c2b, 0x5642e534db38, 0x73)
             ls -> libc.so.6      :*strlen(0x5642e5352c2b, 0x5642e534db38, 0x0)
             ls -> libc.so.6      :*memcpy(0x5642e535ac20, 0x5642e5352c2b, 0x4)
             ls -> libc.so.6      :*readdir(0x5642e5352b00, 0x0, 0x4)
             ls -> libc.so.6      :*__errno_location(0x7ffcd8847626, 0x2, 0x5642e5352c43)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x7ffcd8847626, 0x2, 0x5642e5352c43)
             ls -> libc.so.6      :*strlen(0x5642e5352c43, 0x5642e534db38, 0x75)
             ls -> libc.so.6      :*strlen(0x5642e5352c43, 0x5642e534db38, 0x0)
             ls -> libc.so.6      :*memcpy(0x5642e535ac40, 0x5642e5352c43, 0x4)
             ls -> libc.so.6      :*readdir(0x5642e5352b00, 0x0, 0x4)
             ls -> libc.so.6      :*__errno_location(0x7ffcd8847626, 0x2, 0x5642e5352c5b)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x7ffcd8847626, 0x2, 0x5642e5352c5b)
             ls -> libc.so.6      :*strlen(0x5642e5352c5b, 0x5642e534db38, 0x6f)
             ls -> libc.so.6      :*strlen(0x5642e5352c5b, 0x5642e534db38, 0x0)
             ls -> libc.so.6      :*memcpy(0x5642e535ac60, 0x5642e5352c5b, 0x4)
             ls -> libc.so.6      :*readdir(0x5642e5352b00, 0x0, 0x4)
             ls -> libc.so.6      :*__errno_location(0x7ffcd8847626, 0x2, 0x5642e5352c73)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x7ffcd8847626, 0x2, 0x5642e5352c73)
             ls -> libc.so.6      :*strlen(0x5642e5352c73, 0x5642e534db38, 0x72)
             ls -> libc.so.6      :*strlen(0x5642e5352c73, 0x5642e534db38, 0x0)
             ls -> libc.so.6      :*memcpy(0x5642e535ac80, 0x5642e5352c73, 0x5)
             ls -> libc.so.6      :*readdir(0x5642e5352b00, 0x0, 0x5)
             ls -> libc.so.6      :*__errno_location(0x7ffcd8847626, 0x2, 0x5642e5352c8b)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x7ffcd8847626, 0x2, 0x5642e5352c8b)
             ls -> libc.so.6      :*strlen(0x5642e5352c8b, 0x5642e534db38, 0x6d)
             ls -> libc.so.6      :*strlen(0x5642e5352c8b, 0x5642e534db38, 0x0)
             ls -> libc.so.6      :*memcpy(0x5642e535aca0, 0x5642e5352c8b, 0x4)
             ls -> libc.so.6      :*readdir(0x5642e5352b00, 0x0, 0x4)
             ls -> libc.so.6      :*__errno_location(0x7ffcd8847626, 0x2, 0x5642e5352ca3)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x7ffcd8847626, 0x2, 0x5642e5352ca3)
             ls -> libc.so.6      :*strlen(0x5642e5352ca3, 0x5642e534db38, 0x62)
             ls -> libc.so.6      :*strlen(0x5642e5352ca3, 0x5642e534db38, 0x0)
             ls -> libc.so.6      :*memcpy(0x5642e535acc0, 0x5642e5352ca3, 0x4)
             ls -> libc.so.6      :*readdir(0x5642e5352b00, 0x0, 0x4)
             ls -> libc.so.6      :*readdir(0x5642e5352b00, 0x4718f72f38efb8b7, 0x5642e5352ca8)
             ls -> libc.so.6      :*__errno_location(0x7ffcd8847626, 0x2, 0x5642e5352cd3)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x7ffcd8847626, 0x2, 0x5642e5352cd3)
             ls -> libc.so.6      :*strlen(0x5642e5352cd3, 0x5642e534db38, 0x6d)
             ls -> libc.so.6      :*strlen(0x5642e5352cd3, 0x5642e534db38, 0x0)
             ls -> libc.so.6      :*memcpy(0x5642e535ace0, 0x5642e5352cd3, 0x6)
             ls -> libc.so.6      :*readdir(0x5642e5352b00, 0x0, 0x6)
             ls -> libc.so.6      :*__errno_location(0x7ffcd8847626, 0x2, 0x5642e5352cf3)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x7ffcd8847626, 0x2, 0x5642e5352cf3)
             ls -> libc.so.6      :*strlen(0x5642e5352cf3, 0x5642e534db38, 0x76)
             ls -> libc.so.6      :*strlen(0x5642e5352cf3, 0x5642e534db38, 0x0)
             ls -> libc.so.6      :*memcpy(0x5642e535ad00, 0x5642e5352cf3, 0x4)
             ls -> libc.so.6      :*readdir(0x5642e5352b00, 0x0, 0x4)
             ls -> libc.so.6      :*__errno_location(0x7ffcd8847626, 0x2, 0x5642e5352d0b)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x7ffcd8847626, 0x2, 0x5642e5352d0b)
             ls -> libc.so.6      :*strlen(0x5642e5352d0b, 0x5642e534db38, 0x69)
             ls -> libc.so.6      :*strlen(0x5642e5352d0b, 0x5642e534db38, 0x0)
             ls -> libc.so.6      :*memcpy(0x5642e535ad20, 0x5642e5352d0b, 0xf)
             ls -> libc.so.6      :*readdir(0x5642e5352b00, 0x0, 0xf)
             ls -> libc.so.6      :*__errno_location(0x7ffcd8847626, 0x2, 0x5642e5352d33)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x7ffcd8847626, 0x2, 0x5642e5352d33)
             ls -> libc.so.6      :*strlen(0x5642e5352d33, 0x5642e534db38, 0x70)
             ls -> libc.so.6      :*strlen(0x5642e5352d33, 0x5642e534db38, 0x0)
             ls -> libc.so.6      :*memcpy(0x5642e535ad40, 0x5642e5352d33, 0x5)
             ls -> libc.so.6      :*readdir(0x5642e5352b00, 0x0, 0x5)
             ls -> libc.so.6      :*__errno_location(0x7ffcd8847626, 0x2, 0x5642e5352d4b)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x7ffcd8847626, 0x2, 0x5642e5352d4b)
             ls -> libc.so.6      :*strlen(0x5642e5352d4b, 0x5642e534db38, 0x73)
             ls -> libc.so.6      :*strlen(0x5642e5352d4b, 0x5642e534db38, 0x0)
             ls -> libc.so.6      :*memcpy(0x5642e535ad60, 0x5642e5352d4b, 0x4)
             ls -> libc.so.6      :*readdir(0x5642e5352b00, 0x0, 0x4)
             ls -> libc.so.6      :*__errno_location(0x7ffcd8847626, 0x2, 0x5642e5352d63)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x7ffcd8847626, 0x2, 0x5642e5352d63)
             ls -> libc.so.6      :*strlen(0x5642e5352d63, 0x5642e534db38, 0x64)
             ls -> libc.so.6      :*strlen(0x5642e5352d63, 0x5642e534db38, 0x0)
             ls -> libc.so.6      :*memcpy(0x5642e535ad80, 0x5642e5352d63, 0x4)
             ls -> libc.so.6      :*readdir(0x5642e5352b00, 0x0, 0x4)
             ls -> libc.so.6      :*__errno_location(0x7ffcd8847626, 0x2, 0x5642e5352d7b)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x7ffcd8847626, 0x2, 0x5642e5352d7b)
             ls -> libc.so.6      :*strlen(0x5642e5352d7b, 0x5642e534db38, 0x69)
             ls -> libc.so.6      :*strlen(0x5642e5352d7b, 0x5642e534db38, 0x0)
             ls -> libc.so.6      :*memcpy(0x5642e535ada0, 0x5642e5352d7b, 0xb)
             ls -> libc.so.6      :*readdir(0x5642e5352b00, 0x0, 0xb)
             ls -> libc.so.6      :*__errno_location(0x7ffcd8847626, 0x2, 0x5642e5352d9b)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x7ffcd8847626, 0x2, 0x5642e5352d9b)
             ls -> libc.so.6      :*strlen(0x5642e5352d9b, 0x5642e534db38, 0x73)
             ls -> libc.so.6      :*strlen(0x5642e5352d9b, 0x5642e534db38, 0x0)
             ls -> libc.so.6      :*memcpy(0x5642e535adc0, 0x5642e5352d9b, 0x5)
             ls -> libc.so.6      :*readdir(0x5642e5352b00, 0x0, 0x5)
             ls -> libc.so.6      :*__errno_location(0x7ffcd8847626, 0x2, 0x5642e5352db3)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x7ffcd8847626, 0x2, 0x5642e5352db3)
             ls -> libc.so.6      :*strlen(0x5642e5352db3, 0x5642e534db38, 0x6c)
             ls -> libc.so.6      :*strlen(0x5642e5352db3, 0x5642e534db38, 0x0)
             ls -> libc.so.6      :*memcpy(0x5642e535ade0, 0x5642e5352db3, 0x6)
             ls -> libc.so.6      :*readdir(0x5642e5352b00, 0x0, 0x6)
             ls -> libc.so.6      :*__errno_location(0x7ffcd8847626, 0x2, 0x5642e5352dd3)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x7ffcd8847626, 0x2, 0x5642e5352dd3)
             ls -> libc.so.6      :*strlen(0x5642e5352dd3, 0x5642e534db38, 0x68)
             ls -> libc.so.6      :*strlen(0x5642e5352dd3, 0x5642e534db38, 0x0)
             ls -> libc.so.6      :*memcpy(0x5642e535ae00, 0x5642e5352dd3, 0x5)
             ls -> libc.so.6      :*readdir(0x5642e5352b00, 0x0, 0x5)
             ls -> libc.so.6      :*__errno_location(0x7ffcd8847626, 0x2, 0x5642e5352deb)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x7ffcd8847626, 0x2, 0x5642e5352deb)
             ls -> libc.so.6      :*strlen(0x5642e5352deb, 0x5642e534db38, 0x6c)
             ls -> libc.so.6      :*strlen(0x5642e5352deb, 0x5642e534db38, 0x0)
             ls -> libc.so.6      :*memcpy(0x5642e535ae20, 0x5642e5352deb, 0x7)
             ls -> libc.so.6      :*readdir(0x5642e5352b00, 0x0, 0x7)
             ls -> libc.so.6      :*__errno_location(0x7ffcd8847626, 0x2, 0x5642e5352e0b)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x7ffcd8847626, 0x2, 0x5642e5352e0b)
             ls -> libc.so.6      :*strlen(0x5642e5352e0b, 0x5642e534db38, 0x6c)
             ls -> libc.so.6      :*strlen(0x5642e5352e0b, 0x5642e534db38, 0x0)
             ls -> libc.so.6      :*memcpy(0x5642e535ae40, 0x5642e5352e0b, 0xb)
             ls -> libc.so.6      :*readdir(0x5642e5352b00, 0x0, 0xb)
             ls -> libc.so.6      :*__errno_location(0x7ffcd8847626, 0x2, 0x5642e5352e2b)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x7ffcd8847626, 0x2, 0x5642e5352e2b)
             ls -> libc.so.6      :*strlen(0x5642e5352e2b, 0x5642e534db38, 0x6c)
             ls -> libc.so.6      :*strlen(0x5642e5352e2b, 0x5642e534db38, 0x0)
             ls -> libc.so.6      :*memcpy(0x5642e535ae60, 0x5642e5352e2b, 0x6)
             ls -> libc.so.6      :*readdir(0x5642e5352b00, 0x0, 0x6)
             ls -> libc.so.6      :*__errno_location(0x7ffcd8847626, 0x2, 0x5642e5352e4b)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x7ffcd8847626, 0x2, 0x5642e5352e4b)
             ls -> libc.so.6      :*strlen(0x5642e5352e4b, 0x5642e534db38, 0x76)
             ls -> libc.so.6      :*strlen(0x5642e5352e4b, 0x5642e534db38, 0x0)
             ls -> libc.so.6      :*memcpy(0x5642e535ae80, 0x5642e5352e4b, 0x8)
             ls -> libc.so.6      :*readdir(0x5642e5352b00, 0x0, 0x8)
             ls -> libc.so.6      :*closedir(0x5642e5352b00, 0x5642e5352b30, 0x0)
             ls -> libc.so.6      :*_setjmp(0x5642e3e92300, 0x5642e5352da0, 0x5642e534f220)
             ls -> libc.so.6      :*__errno_location(0x5642e535ae60, 0x5642e535ae80, 0x5642e5352be0)
             ls -> libc.so.6      :*strcoll(0x5642e535ae60, 0x5642e535ae80, 0x5642e5352be0)
             ls -> libc.so.6      :*__errno_location(0x5642e535ae20, 0x5642e535ae40, 0x5642e5352be0)
             ls -> libc.so.6      :*strcoll(0x5642e535ae20, 0x5642e535ae40, 0x5642e5352be0)
             ls -> libc.so.6      :*memcpy(0x5642e5352be8, 0x5642e5352bc8, 0x8)
             ls -> libc.so.6      :*__errno_location(0x5642e535ae20, 0x5642e535ae60, 0x8)
             ls -> libc.so.6      :*strcoll(0x5642e535ae20, 0x5642e535ae60, 0x8)
             ls -> libc.so.6      :*__errno_location(0x5642e535ae20, 0x5642e535ae80, 0xc6)
             ls -> libc.so.6      :*strcoll(0x5642e535ae20, 0x5642e535ae80, 0xc6)
             ls -> libc.so.6      :*__errno_location(0x5642e535ae40, 0x5642e535ae80, 0x5642e5352be0)
             ls -> libc.so.6      :*strcoll(0x5642e535ae40, 0x5642e535ae80, 0x5642e5352be0)
             ls -> libc.so.6      :*__errno_location(0x5642e535ade0, 0x5642e535ae00, 0x5642e5352be0)
             ls -> libc.so.6      :*strcoll(0x5642e535ade0, 0x5642e535ae00, 0x5642e5352be0)
             ls -> libc.so.6      :*__errno_location(0x5642e535adc0, 0x5642e535ae00, 0x5642e5352be0)
             ls -> libc.so.6      :*strcoll(0x5642e535adc0, 0x5642e535ae00, 0x5642e5352be0)
             ls -> libc.so.6      :*__errno_location(0x5642e535adc0, 0x5642e535ade0, 0xc5)
             ls -> libc.so.6      :*strcoll(0x5642e535adc0, 0x5642e535ade0, 0xc5)
             ls -> libc.so.6      :*memcpy(0x5642e5352bf0, 0x5642e5352ba8, 0x8)
             ls -> libc.so.6      :*__errno_location(0x5642e535ae00, 0x5642e535ae60, 0x8)
             ls -> libc.so.6      :*strcoll(0x5642e535ae00, 0x5642e535ae60, 0x8)
             ls -> libc.so.6      :*__errno_location(0x5642e535ade0, 0x5642e535ae60, 0x5642e5352be0)
             ls -> libc.so.6      :*strcoll(0x5642e535ade0, 0x5642e535ae60, 0x5642e5352be0)
             ls -> libc.so.6      :*__errno_location(0x5642e535adc0, 0x5642e535ae60, 0x5642e5352be0)
             ls -> libc.so.6      :*strcoll(0x5642e535adc0, 0x5642e535ae60, 0x5642e5352be0)
             ls -> libc.so.6      :*__errno_location(0x5642e535adc0, 0x5642e535ae20, 0xc5)
             ls -> libc.so.6      :*strcoll(0x5642e535adc0, 0x5642e535ae20, 0xc5)
             ls -> libc.so.6      :*__errno_location(0x5642e535adc0, 0x5642e535ae40, 0xc5)
             ls -> libc.so.6      :*strcoll(0x5642e535adc0, 0x5642e535ae40, 0xc5)
             ls -> libc.so.6      :*__errno_location(0x5642e535adc0, 0x5642e535ae80, 0xc5)
             ls -> libc.so.6      :*strcoll(0x5642e535adc0, 0x5642e535ae80, 0xc5)
             ls -> libc.so.6      :*__errno_location(0x5642e535ad80, 0x5642e535ada0, 0x5642e5352be0)
             ls -> libc.so.6      :*strcoll(0x5642e535ad80, 0x5642e535ada0, 0x5642e5352be0)
             ls -> libc.so.6      :*__errno_location(0x5642e535ad40, 0x5642e535ad60, 0x5642e5352be0)
             ls -> libc.so.6      :*strcoll(0x5642e535ad40, 0x5642e535ad60, 0x5642e5352be0)
             ls -> libc.so.6      :*memcpy(0x5642e5352be8, 0x5642e5352b90, 0x8)
             ls -> libc.so.6      :*__errno_location(0x5642e535ad40, 0x5642e535ad80, 0x8)
             ls -> libc.so.6      :*strcoll(0x5642e535ad40, 0x5642e535ad80, 0x8)
             ls -> libc.so.6      :*__errno_location(0x5642e535ad40, 0x5642e535ada0, 0xc4)
             ls -> libc.so.6      :*strcoll(0x5642e535ad40, 0x5642e535ada0, 0xc4)
             ls -> libc.so.6      :*memcpy(0x5642e5352b98, 0x5642e5352be0, 0x10)
             ls -> libc.so.6      :*__errno_location(0x5642e535ad00, 0x5642e535ad20, 0x5642e5352be0)
             ls -> libc.so.6      :*strcoll(0x5642e535ad00, 0x5642e535ad20, 0x5642e5352be0)
             ls -> libc.so.6      :*__errno_location(0x5642e535ace0, 0x5642e535ad20, 0xc5)
             ls -> libc.so.6      :*strcoll(0x5642e535ace0, 0x5642e535ad20, 0xc5)
             ls -> libc.so.6      :*__errno_location(0x5642e535ace0, 0x5642e535ad00, 0xc3)
             ls -> libc.so.6      :*strcoll(0x5642e535ace0, 0x5642e535ad00, 0xc3)
             ls -> libc.so.6      :*__errno_location(0x5642e535ad20, 0x5642e535ad80, 0xc3)
             ls -> libc.so.6      :*strcoll(0x5642e535ad20, 0x5642e535ad80, 0xc3)
             ls -> libc.so.6      :*__errno_location(0x5642e535ad20, 0x5642e535ada0, 0xc2)
             ls -> libc.so.6      :*strcoll(0x5642e535ad20, 0x5642e535ada0, 0xc2)
             ls -> libc.so.6      :*__errno_location(0x5642e535ad20, 0x5642e535ad40, 0x9)
             ls -> libc.so.6      :*strcoll(0x5642e535ad20, 0x5642e535ad40, 0x9)
             ls -> libc.so.6      :*__errno_location(0x5642e535ace0, 0x5642e535ad40, 0xc2)
             ls -> libc.so.6      :*strcoll(0x5642e535ace0, 0x5642e535ad40, 0xc2)
             ls -> libc.so.6      :*__errno_location(0x5642e535ad00, 0x5642e535ad40, 0xc3)
             ls -> libc.so.6      :*strcoll(0x5642e535ad00, 0x5642e535ad40, 0xc3)
             ls -> libc.so.6      :*__errno_location(0x5642e535ad00, 0x5642e535ad60, 0xc5)
             ls -> libc.so.6      :*strcoll(0x5642e535ad00, 0x5642e535ad60, 0xc5)
             ls -> libc.so.6      :*memcpy(0x5642e5352c10, 0x5642e5352b80, 0x8)
             ls -> libc.so.6      :*__errno_location(0x5642e535ad80, 0x5642e535ae00, 0x8)
             ls -> libc.so.6      :*strcoll(0x5642e535ad80, 0x5642e535ae00, 0x8)
             ls -> libc.so.6      :*__errno_location(0x5642e535ada0, 0x5642e535ae00, 0x5642e5352be0)
             ls -> libc.so.6      :*strcoll(0x5642e535ada0, 0x5642e535ae00, 0x5642e5352be0)
             ls -> libc.so.6      :*__errno_location(0x5642e535ada0, 0x5642e535ade0, 0xb5)
             ls -> libc.so.6      :*strcoll(0x5642e535ada0, 0x5642e535ade0, 0xb5)
             ls -> libc.so.6      :*__errno_location(0x5642e535ad20, 0x5642e535ade0, 0x5642e5352be0)
             ls -> libc.so.6      :*strcoll(0x5642e535ad20, 0x5642e535ade0, 0x5642e5352be0)
             ls -> libc.so.6      :*__errno_location(0x5642e535ace0, 0x5642e535ade0, 0x5642e5352be0)
             ls -> libc.so.6      :*strcoll(0x5642e535ace0, 0x5642e535ade0, 0x5642e5352be0)
             ls -> libc.so.6      :*__errno_location(0x5642e535ace0, 0x5642e535ae60, 0xa5)
             ls -> libc.so.6      :*strcoll(0x5642e535ace0, 0x5642e535ae60, 0xa5)
             ls -> libc.so.6      :*__errno_location(0x5642e535ace0, 0x5642e535ae20, 0xa5)
             ls -> libc.so.6      :*strcoll(0x5642e535ace0, 0x5642e535ae20, 0xa5)
             ls -> libc.so.6      :*__errno_location(0x5642e535ace0, 0x5642e535ae40, 0xa5)
             ls -> libc.so.6      :*strcoll(0x5642e535ace0, 0x5642e535ae40, 0xa5)
             ls -> libc.so.6      :*__errno_location(0x5642e535ace0, 0x5642e535adc0, 0xa5)
             ls -> libc.so.6      :*strcoll(0x5642e535ace0, 0x5642e535adc0, 0xa5)
             ls -> libc.so.6      :*__errno_location(0x5642e535ad40, 0x5642e535adc0, 0x5642e5352be0)
             ls -> libc.so.6      :*strcoll(0x5642e535ad40, 0x5642e535adc0, 0x5642e5352be0)
             ls -> libc.so.6      :*__errno_location(0x5642e535ad60, 0x5642e535adc0, 0x5642e5352be0)
             ls -> libc.so.6      :*strcoll(0x5642e535ad60, 0x5642e535adc0, 0x5642e5352be0)
             ls -> libc.so.6      :*__errno_location(0x5642e535ad60, 0x5642e535ae80, 0xc6)
             ls -> libc.so.6      :*strcoll(0x5642e535ad60, 0x5642e535ae80, 0xc6)
             ls -> libc.so.6      :*__errno_location(0x5642e535ad00, 0x5642e535ae80, 0x5642e5352be0)
             ls -> libc.so.6      :*strcoll(0x5642e535ad00, 0x5642e535ae80, 0x5642e5352be0)
             ls -> libc.so.6      :*__errno_location(0x5642e535aca0, 0x5642e535acc0, 0x5642e5352be0)
             ls -> libc.so.6      :*strcoll(0x5642e535aca0, 0x5642e535acc0, 0x5642e5352be0)
             ls -> libc.so.6      :*__errno_location(0x5642e535ac60, 0x5642e535ac80, 0x5642e5352be0)
             ls -> libc.so.6      :*strcoll(0x5642e535ac60, 0x5642e535ac80, 0x5642e5352be0)
             ls -> libc.so.6      :*memcpy(0x5642e5352be8, 0x5642e5352b58, 0x8)
             ls -> libc.so.6      :*__errno_location(0x5642e535ac60, 0x5642e535acc0, 0x8)
             ls -> libc.so.6      :*strcoll(0x5642e535ac60, 0x5642e535acc0, 0x8)
             ls -> libc.so.6      :*__errno_location(0x5642e535ac60, 0x5642e535aca0, 0xc3)
             ls -> libc.so.6      :*strcoll(0x5642e535ac60, 0x5642e535aca0, 0xc3)
             ls -> libc.so.6      :*memcpy(0x5642e5352b60, 0x5642e5352be0, 0x10)
             ls -> libc.so.6      :*__errno_location(0x5642e535ac20, 0x5642e535ac40, 0x5642e5352be0)
             ls -> libc.so.6      :*strcoll(0x5642e535ac20, 0x5642e535ac40, 0x5642e5352be0)
             ls -> libc.so.6      :*__errno_location(0x5642e535ac00, 0x5642e535ac20, 0x5642e5352be0)
             ls -> libc.so.6      :*strcoll(0x5642e535ac00, 0x5642e535ac20, 0x5642e5352be0)
             ls -> libc.so.6      :*__errno_location(0x5642e535ac00, 0x5642e535ac40, 0x98)
             ls -> libc.so.6      :*strcoll(0x5642e535ac00, 0x5642e535ac40, 0x98)
             ls -> libc.so.6      :*memcpy(0x5642e5352bf0, 0x5642e5352b48, 0x8)
             ls -> libc.so.6      :*__errno_location(0x5642e535ac20, 0x5642e535acc0, 0x8)
             ls -> libc.so.6      :*strcoll(0x5642e535ac20, 0x5642e535acc0, 0x8)
             ls -> libc.so.6      :*__errno_location(0x5642e535ac20, 0x5642e535aca0, 0xc5)
             ls -> libc.so.6      :*strcoll(0x5642e535ac20, 0x5642e535aca0, 0xc5)
             ls -> libc.so.6      :*__errno_location(0x5642e535ac20, 0x5642e535ac60, 0xc5)
             ls -> libc.so.6      :*strcoll(0x5642e535ac20, 0x5642e535ac60, 0xc5)
             ls -> libc.so.6      :*__errno_location(0x5642e535ac20, 0x5642e535ac80, 0xc5)
             ls -> libc.so.6      :*strcoll(0x5642e535ac20, 0x5642e535ac80, 0xc5)
             ls -> libc.so.6      :*memcpy(0x5642e5352b58, 0x5642e5352be0, 0x18)
             ls -> libc.so.6      :*__errno_location(0x5642e535abc0, 0x5642e535abe0, 0x5642e5352be0)
             ls -> libc.so.6      :*strcoll(0x5642e535abc0, 0x5642e535abe0, 0x5642e5352be0)
             ls -> libc.so.6      :*__errno_location(0x5642e535ab80, 0x5642e535aba0, 0x5642e5352be0)
             ls -> libc.so.6      :*strcoll(0x5642e535ab80, 0x5642e535aba0, 0x5642e5352be0)
             ls -> libc.so.6      :*memcpy(0x5642e5352be8, 0x5642e5352b20, 0x8)
             ls -> libc.so.6      :*__errno_location(0x5642e535ab80, 0x5642e535abc0, 0x8)
             ls -> libc.so.6      :*strcoll(0x5642e535ab80, 0x5642e535abc0, 0x8)
             ls -> libc.so.6      :*__errno_location(0x5642e535aba0, 0x5642e535abc0, 0x5642e5352be0)
             ls -> libc.so.6      :*strcoll(0x5642e535aba0, 0x5642e535abc0, 0x5642e5352be0)
             ls -> libc.so.6      :*__errno_location(0x5642e535ab40, 0x5642e535ab60, 0x5642e5352be0)
             ls -> libc.so.6      :*strcoll(0x5642e535ab40, 0x5642e535ab60, 0x5642e5352be0)
             ls -> libc.so.6      :*__errno_location(0x5642e5352a70, 0x5642e535ab60, 0x5642e5352be0)
             ls -> libc.so.6      :*strcoll(0x5642e5352a70, 0x5642e535ab60, 0x5642e5352be0)
             ls -> libc.so.6      :*__errno_location(0x5642e5352a70, 0x5642e535ab40, 0xc3)
             ls -> libc.so.6      :*strcoll(0x5642e5352a70, 0x5642e535ab40, 0xc3)
             ls -> libc.so.6      :*memcpy(0x5642e5352bf0, 0x5642e5352b10, 0x8)
             ls -> libc.so.6      :*__errno_location(0x5642e535ab60, 0x5642e535ab80, 0x8)
             ls -> libc.so.6      :*strcoll(0x5642e535ab60, 0x5642e535ab80, 0x8)
             ls -> libc.so.6      :*__errno_location(0x5642e535ab60, 0x5642e535aba0, 0x7e)
             ls -> libc.so.6      :*strcoll(0x5642e535ab60, 0x5642e535aba0, 0x7e)
             ls -> libc.so.6      :*__errno_location(0x5642e535ab60, 0x5642e535abc0, 0x7e)
             ls -> libc.so.6      :*strcoll(0x5642e535ab60, 0x5642e535abc0, 0x7e)
             ls -> libc.so.6      :*__errno_location(0x5642e5352a70, 0x5642e535abc0, 0x5642e5352be0)
             ls -> libc.so.6      :*strcoll(0x5642e5352a70, 0x5642e535abc0, 0x5642e5352be0)
             ls -> libc.so.6      :*__errno_location(0x5642e535ab40, 0x5642e535abc0, 0x5642e5352be0)
             ls -> libc.so.6      :*strcoll(0x5642e535ab40, 0x5642e535abc0, 0x5642e5352be0)
             ls -> libc.so.6      :*__errno_location(0x5642e535ab40, 0x5642e535abe0, 0xc5)
             ls -> libc.so.6      :*strcoll(0x5642e535ab40, 0x5642e535abe0, 0xc5)
             ls -> libc.so.6      :*memcpy(0x5642e5352b30, 0x5642e5352bf0, 0x8)
             ls -> libc.so.6      :*__errno_location(0x5642e535ab80, 0x5642e535acc0, 0x8)
             ls -> libc.so.6      :*strcoll(0x5642e535ab80, 0x5642e535acc0, 0x8)
             ls -> libc.so.6      :*__errno_location(0x5642e535ab80, 0x5642e535aca0, 0xc3)
             ls -> libc.so.6      :*strcoll(0x5642e535ab80, 0x5642e535aca0, 0xc3)
             ls -> libc.so.6      :*__errno_location(0x5642e535aba0, 0x5642e535aca0, 0x5e)
             ls -> libc.so.6      :*strcoll(0x5642e535aba0, 0x5642e535aca0, 0x5e)
             ls -> libc.so.6      :*__errno_location(0x5642e535ab60, 0x5642e535aca0, 0x69)
             ls -> libc.so.6      :*strcoll(0x5642e535ab60, 0x5642e535aca0, 0x69)
             ls -> libc.so.6      :*__errno_location(0x5642e5352a70, 0x5642e535aca0, 0x7e)
             ls -> libc.so.6      :*strcoll(0x5642e5352a70, 0x5642e535aca0, 0x7e)
             ls -> libc.so.6      :*__errno_location(0x5642e535abc0, 0x5642e535aca0, 0x90)
             ls -> libc.so.6      :*strcoll(0x5642e535abc0, 0x5642e535aca0, 0x90)
             ls -> libc.so.6      :*__errno_location(0x5642e535abc0, 0x5642e535ac60, 0xc4)
             ls -> libc.so.6      :*strcoll(0x5642e535abc0, 0x5642e535ac60, 0xc4)
             ls -> libc.so.6      :*__errno_location(0x5642e535abc0, 0x5642e535ac80, 0xc4)
             ls -> libc.so.6      :*strcoll(0x5642e535abc0, 0x5642e535ac80, 0xc4)
             ls -> libc.so.6      :*__errno_location(0x5642e535abc0, 0x5642e535ac20, 0xc5)
             ls -> libc.so.6      :*strcoll(0x5642e535abc0, 0x5642e535ac20, 0xc5)
             ls -> libc.so.6      :*__errno_location(0x5642e535abe0, 0x5642e535ac20, 0xc4)
             ls -> libc.so.6      :*strcoll(0x5642e535abe0, 0x5642e535ac20, 0xc4)
             ls -> libc.so.6      :*__errno_location(0x5642e535ab40, 0x5642e535ac20, 0x5e)
             ls -> libc.so.6      :*strcoll(0x5642e535ab40, 0x5642e535ac20, 0x5e)
             ls -> libc.so.6      :*__errno_location(0x5642e535ab40, 0x5642e535ac00, 0xb9)
             ls -> libc.so.6      :*strcoll(0x5642e535ab40, 0x5642e535ac00, 0xb9)
             ls -> libc.so.6      :*__errno_location(0x5642e535ab40, 0x5642e535ac40, 0xb9)
             ls -> libc.so.6      :*strcoll(0x5642e535ab40, 0x5642e535ac40, 0xb9)
             ls -> libc.so.6      :*memcpy(0x5642e5352c48, 0x5642e5352b30, 0x8)
             ls -> libc.so.6      :*__errno_location(0x5642e535acc0, 0x5642e535ad80, 0x8)
             ls -> libc.so.6      :*strcoll(0x5642e535acc0, 0x5642e535ad80, 0x8)
             ls -> libc.so.6      :*__errno_location(0x5642e535ab80, 0x5642e535ad80, 0x5642e5352be0)
             ls -> libc.so.6      :*strcoll(0x5642e535ab80, 0x5642e535ad80, 0x5642e5352be0)
             ls -> libc.so.6      :*__errno_location(0x5642e535aba0, 0x5642e535ad80, 0x5642e5352be0)
             ls -> libc.so.6      :*strcoll(0x5642e535aba0, 0x5642e535ad80, 0x5642e5352be0)
             ls -> libc.so.6      :*__errno_location(0x5642e535ab60, 0x5642e535ad80, 0x5642e5352be0)
             ls -> libc.so.6      :*strcoll(0x5642e535ab60, 0x5642e535ad80, 0x5642e5352be0)
             ls -> libc.so.6      :*__errno_location(0x5642e535ab60, 0x5642e535ae00, 0x7e)
             ls -> libc.so.6      :*strcoll(0x5642e535ab60, 0x5642e535ae00, 0x7e)
             ls -> libc.so.6      :*__errno_location(0x5642e5352a70, 0x5642e535ae00, 0x5642e5352be0)
             ls -> libc.so.6      :*strcoll(0x5642e5352a70, 0x5642e535ae00, 0x5642e5352be0)
             ls -> libc.so.6      :*__errno_location(0x5642e5352a70, 0x5642e535ada0, 0xc3)
             ls -> libc.so.6      :*strcoll(0x5642e5352a70, 0x5642e535ada0, 0xc3)
             ls -> libc.so.6      :*__errno_location(0x5642e5352a70, 0x5642e535ad20, 0xc3)
             ls -> libc.so.6      :*strcoll(0x5642e5352a70, 0x5642e535ad20, 0xc3)
             ls -> libc.so.6      :*__errno_location(0x5642e5352a70, 0x5642e535ade0, 0xc3)
             ls -> libc.so.6      :*strcoll(0x5642e5352a70, 0x5642e535ade0, 0xc3)
             ls -> libc.so.6      :*__errno_location(0x5642e535aca0, 0x5642e535ade0, 0x5642e5352be0)
             ls -> libc.so.6      :*strcoll(0x5642e535aca0, 0x5642e535ade0, 0x5642e5352be0)
             ls -> libc.so.6      :*__errno_location(0x5642e535aca0, 0x5642e535ae60, 0xa5)
             ls -> libc.so.6      :*strcoll(0x5642e535aca0, 0x5642e535ae60, 0xa5)
             ls -> libc.so.6      :*__errno_location(0x5642e535aca0, 0x5642e535ae20, 0xa5)
             ls -> libc.so.6      :*strcoll(0x5642e535aca0, 0x5642e535ae20, 0xa5)
             ls -> libc.so.6      :*__errno_location(0x5642e535aca0, 0x5642e535ae40, 0xa5)
             ls -> libc.so.6      :*strcoll(0x5642e535aca0, 0x5642e535ae40, 0xa5)
             ls -> libc.so.6      :*__errno_location(0x5642e535aca0, 0x5642e535ace0, 0xa5)
             ls -> libc.so.6      :*strcoll(0x5642e535aca0, 0x5642e535ace0, 0xa5)
             ls -> libc.so.6      :*__errno_location(0x5642e535aca0, 0x5642e535ad40, 0xc3)
             ls -> libc.so.6      :*strcoll(0x5642e535aca0, 0x5642e535ad40, 0xc3)
             ls -> libc.so.6      :*__errno_location(0x5642e535ac60, 0x5642e535ad40, 0x5642e5352be0)
             ls -> libc.so.6      :*strcoll(0x5642e535ac60, 0x5642e535ad40, 0x5642e5352be0)
             ls -> libc.so.6      :*__errno_location(0x5642e535ac80, 0x5642e535ad40, 0x5642e5352be0)
             ls -> libc.so.6      :*strcoll(0x5642e535ac80, 0x5642e535ad40, 0x5642e5352be0)
             ls -> libc.so.6      :*__errno_location(0x5642e535ac80, 0x5642e535adc0, 0xac)
             ls -> libc.so.6      :*strcoll(0x5642e535ac80, 0x5642e535adc0, 0xac)
             ls -> libc.so.6      :*__errno_location(0x5642e535abc0, 0x5642e535adc0, 0x5642e5352be0)
             ls -> libc.so.6      :*strcoll(0x5642e535abc0, 0x5642e535adc0, 0x5642e5352be0)
             ls -> libc.so.6      :*__errno_location(0x5642e535abe0, 0x5642e535adc0, 0x5642e5352be0)
             ls -> libc.so.6      :*strcoll(0x5642e535abe0, 0x5642e535adc0, 0x5642e5352be0)
             ls -> libc.so.6      :*__errno_location(0x5642e535ac20, 0x5642e535adc0, 0x5642e5352be0)
             ls -> libc.so.6      :*strcoll(0x5642e535ac20, 0x5642e535adc0, 0x5642e5352be0)
             ls -> libc.so.6      :*__errno_location(0x5642e535ac20, 0x5642e535ad60, 0xc4)
             ls -> libc.so.6      :*strcoll(0x5642e535ac20, 0x5642e535ad60, 0xc4)
             ls -> libc.so.6      :*__errno_location(0x5642e535ac00, 0x5642e535ad60, 0x5642e5352be0)
             ls -> libc.so.6      :*strcoll(0x5642e535ac00, 0x5642e535ad60, 0x5642e5352be0)
             ls -> libc.so.6      :*__errno_location(0x5642e535ac00, 0x5642e535ad00, 0x98)
             ls -> libc.so.6      :*strcoll(0x5642e535ac00, 0x5642e535ad00, 0x98)
             ls -> libc.so.6      :*__errno_location(0x5642e535ac40, 0x5642e535ad00, 0x5642e5352be0)
             ls -> libc.so.6      :*strcoll(0x5642e535ac40, 0x5642e535ad00, 0x5642e5352be0)
             ls -> libc.so.6      :*__errno_location(0x5642e535ab40, 0x5642e535ad00, 0x5642e5352be0)
             ls -> libc.so.6      :*strcoll(0x5642e535ab40, 0x5642e535ad00, 0x5642e5352be0)
             ls -> libc.so.6      :*__errno_location(0x5642e535ab40, 0x5642e535ae80, 0xc3)
             ls -> libc.so.6      :*strcoll(0x5642e535ab40, 0x5642e535ae80, 0xc3)
             ls -> libc.so.6      :*memcpy(0x5642e5352bd8, 0x5642e5352c48, 0x8)
             ls -> libc.so.6      :*realloc(0x0, 0x540, 0x0)
             ls -> libc.so.6      :*strlen(0x5642e535acc0, 0x5642e535acc0, 0x5642e534db30)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535acc0, 0x5642e535acc0, 0x5642e535acc0)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535acc0, 0x3, 0x0)
             ls -> libc.so.6      :*strlen(0x5642e535ab80, 0x5642e535ab80, 0x5642e534db30)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ab80, 0x5642e535ab80, 0x5642e535ab80)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ab80, 0x4, 0x0)
             ls -> libc.so.6      :*strlen(0x5642e535aba0, 0x5642e535aba0, 0x5642e534db30)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535aba0, 0x5642e535aba0, 0x5642e535aba0)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535aba0, 0x5, 0x0)
             ls -> libc.so.6      :*strlen(0x5642e535ad80, 0x5642e535ad80, 0x5642e534db30)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ad80, 0x5642e535ad80, 0x5642e535ad80)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ad80, 0x3, 0x0)
             ls -> libc.so.6      :*strlen(0x5642e535ab60, 0x5642e535ab60, 0x5642e534db30)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ab60, 0x5642e535ab60, 0x5642e535ab60)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ab60, 0x3, 0x0)
             ls -> libc.so.6      :*strlen(0x5642e535ae00, 0x5642e535ae00, 0x5642e534db30)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ae00, 0x5642e535ae00, 0x5642e535ae00)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ae00, 0x4, 0x0)
             ls -> libc.so.6      :*strlen(0x5642e535ada0, 0x5642e535ada0, 0x5642e534db30)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ada0, 0x5642e535ada0, 0x5642e535ada0)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ada0, 0xa, 0x0)
             ls -> libc.so.6      :*strlen(0x5642e535ad20, 0x5642e535ad20, 0x5642e534db30)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ad20, 0x5642e535ad20, 0x5642e535ad20)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ad20, 0xe, 0x0)
             ls -> libc.so.6      :*strlen(0x5642e5352a70, 0x5642e5352a70, 0x5642e534db30)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e5352a60, 0x5642e5352a70, 0x5642e5352a70)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e5352a70, 0x3, 0x0)
             ls -> libc.so.6      :*strlen(0x5642e535ade0, 0x5642e535ade0, 0x5642e534db30)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ade0, 0x5642e535ade0, 0x5642e535ade0)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ade0, 0x5, 0x0)
             ls -> libc.so.6      :*strlen(0x5642e535ae60, 0x5642e535ae60, 0x5642e534db30)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ae60, 0x5642e535ae60, 0x5642e535ae60)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ae60, 0x5, 0x0)
             ls -> libc.so.6      :*strlen(0x5642e535ae20, 0x5642e535ae20, 0x5642e534db30)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ae20, 0x5642e535ae20, 0x5642e535ae20)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ae20, 0x6, 0x0)
             ls -> libc.so.6      :*strlen(0x5642e535ae40, 0x5642e535ae40, 0x5642e534db30)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ae40, 0x5642e535ae40, 0x5642e535ae40)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ae40, 0xa, 0x0)
             ls -> libc.so.6      :*strlen(0x5642e535ace0, 0x5642e535ace0, 0x5642e534db30)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ace0, 0x5642e535ace0, 0x5642e535ace0)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ace0, 0x5, 0x0)
             ls -> libc.so.6      :*strlen(0x5642e535aca0, 0x5642e535aca0, 0x5642e534db30)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535aca0, 0x5642e535aca0, 0x5642e535aca0)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535aca0, 0x3, 0x0)
             ls -> libc.so.6      :*strlen(0x5642e535ac60, 0x5642e535ac60, 0x5642e534db30)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ac60, 0x5642e535ac60, 0x5642e535ac60)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ac60, 0x3, 0x0)
             ls -> libc.so.6      :*strlen(0x5642e535ad40, 0x5642e535ad40, 0x5642e534db30)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ad40, 0x5642e535ad40, 0x5642e535ad40)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ad40, 0x4, 0x0)
             ls -> libc.so.6      :*strlen(0x5642e535ac80, 0x5642e535ac80, 0x5642e534db30)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ac80, 0x5642e535ac80, 0x5642e535ac80)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ac80, 0x4, 0x0)
             ls -> libc.so.6      :*strlen(0x5642e535abc0, 0x5642e535abc0, 0x5642e534db30)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535abc0, 0x5642e535abc0, 0x5642e535abc0)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535abc0, 0x3, 0x0)
             ls -> libc.so.6      :*strlen(0x5642e535abe0, 0x5642e535abe0, 0x5642e534db30)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535abe0, 0x5642e535abe0, 0x5642e535abe0)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535abe0, 0x4, 0x0)
             ls -> libc.so.6      :*strlen(0x5642e535adc0, 0x5642e535adc0, 0x5642e534db30)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535adc0, 0x5642e535adc0, 0x5642e535adc0)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535adc0, 0x4, 0x0)
             ls -> libc.so.6      :*strlen(0x5642e535ac20, 0x5642e535ac20, 0x5642e534db30)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ac20, 0x5642e535ac20, 0x5642e535ac20)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ac20, 0x3, 0x0)
             ls -> libc.so.6      :*strlen(0x5642e535ad60, 0x5642e535ad60, 0x5642e534db30)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ad60, 0x5642e535ad60, 0x5642e535ad60)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ad60, 0x3, 0x0)
             ls -> libc.so.6      :*strlen(0x5642e535ac00, 0x5642e535ac00, 0x5642e534db30)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ac00, 0x5642e535ac00, 0x5642e535ac00)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ac00, 0x3, 0x0)
             ls -> libc.so.6      :*strlen(0x5642e535ac40, 0x5642e535ac40, 0x5642e534db30)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ac40, 0x5642e535ac40, 0x5642e535ac40)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ac40, 0x3, 0x0)
             ls -> libc.so.6      :*strlen(0x5642e535ad00, 0x5642e535ad00, 0x5642e534db30)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ad00, 0x5642e535ad00, 0x5642e535ad00)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ad00, 0x3, 0x0)
             ls -> libc.so.6      :*strlen(0x5642e535ae80, 0x5642e535ae80, 0x5642e534db30)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ae80, 0x5642e535ae80, 0x5642e535ae80)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ae80, 0x7, 0x0)
             ls -> libc.so.6      :*strlen(0x5642e535ab40, 0x5642e535ab40, 0x5642e534db30)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ab40, 0x5642e535ab40, 0x5642e535ab40)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ab40, 0xb, 0x0)
             ls -> libc.so.6      :*strlen(0x5642e535acc0, 0x5642e535acc0, 0x5642e534db30)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535acc0, 0x5642e535acc0, 0x5642e535acc0)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535acc0, 0x3, 0x0)
             ls -> libc.so.6      :*strlen(0x5642e535acc0, 0x5642e535acc0, 0x5642e534db30)
             ls -> libc.so.6      :*fwrite_unlocked(0x5642e535acc0, 0x1, 0x3)
             ls -> libc.so.6      :*__overflow(0x7f4e75bc7760, 0x20, 0x4)
             ls -> libc.so.6      :*__overflow(0x7f4e75bc7760, 0x20, 0x5)
             ls -> libc.so.6      :*strlen(0x5642e535ab80, 0x5642e535ab80, 0x5642e534db30)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ab80, 0x5642e535ab80, 0x5642e535ab80)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ab80, 0x4, 0x0)
             ls -> libc.so.6      :*strlen(0x5642e535ab80, 0x5642e535ab80, 0x5642e534db30)
             ls -> libc.so.6      :*fwrite_unlocked(0x5642e535ab80, 0x1, 0x4)
             ls -> libc.so.6      :*__overflow(0x7f4e75bc7760, 0x20, 0x2)
             ls -> libc.so.6      :*__overflow(0x7f4e75bc7760, 0x20, 0x3)
             ls -> libc.so.6      :*strlen(0x5642e535aba0, 0x5642e535aba0, 0x5642e534db30)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535aba0, 0x5642e535aba0, 0x5642e535aba0)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535aba0, 0x5, 0x0)
             ls -> libc.so.6      :*strlen(0x5642e535aba0, 0x5642e535aba0, 0x5642e534db30)
             ls -> libc.so.6      :*fwrite_unlocked(0x5642e535aba0, 0x1, 0x5)
             ls -> libc.so.6      :*__overflow(0x7f4e75bc7760, 0x20, 0x1)
             ls -> libc.so.6      :*__overflow(0x7f4e75bc7760, 0x20, 0x2)
             ls -> libc.so.6      :*strlen(0x5642e535ad80, 0x5642e535ad80, 0x5642e534db30)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ad80, 0x5642e535ad80, 0x5642e535ad80)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ad80, 0x3, 0x0)
             ls -> libc.so.6      :*strlen(0x5642e535ad80, 0x5642e535ad80, 0x5642e534db30)
             ls -> libc.so.6      :*fwrite_unlocked(0x5642e535ad80, 0x1, 0x3)
             ls -> libc.so.6      :*__overflow(0x7f4e75bc7760, 0x20, 0x6)
             ls -> libc.so.6      :*__overflow(0x7f4e75bc7760, 0x20, 0x7)
             ls -> libc.so.6      :*strlen(0x5642e535ab60, 0x5642e535ab60, 0x5642e534db30)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ab60, 0x5642e535ab60, 0x5642e535ab60)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ab60, 0x3, 0x0)
             ls -> libc.so.6      :*strlen(0x5642e535ab60, 0x5642e535ab60, 0x5642e534db30)
             ls -> libc.so.6      :*fwrite_unlocked(0x5642e535ab60, 0x1, 0x3)
             ls -> libc.so.6      :*__overflow(0x7f4e75bc7760, 0x20, 0x3)
             ls -> libc.so.6      :*__overflow(0x7f4e75bc7760, 0x20, 0x4)
             ls -> libc.so.6      :*strlen(0x5642e535ae00, 0x5642e535ae00, 0x5642e534db30)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ae00, 0x5642e535ae00, 0x5642e535ae00)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ae00, 0x4, 0x0)
             ls -> libc.so.6      :*strlen(0x5642e535ae00, 0x5642e535ae00, 0x5642e534db30)
             ls -> libc.so.6      :*fwrite_unlocked(0x5642e535ae00, 0x1, 0x4)
             ls -> libc.so.6      :*__overflow(0x7f4e75bc7760, 0x20, 0x1)
             ls -> libc.so.6      :*__overflow(0x7f4e75bc7760, 0x20, 0x2)
             ls -> libc.so.6      :*strlen(0x5642e535ada0, 0x5642e535ada0, 0x5642e534db30)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ada0, 0x5642e535ada0, 0x5642e535ada0)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ada0, 0xa, 0x0)
             ls -> libc.so.6      :*strlen(0x5642e535ada0, 0x5642e535ada0, 0x5642e534db30)
             ls -> libc.so.6      :*fwrite_unlocked(0x5642e535ada0, 0x1, 0xa)
             ls -> libc.so.6      :*__overflow(0x7f4e75bc7760, 0x20, 0x5)
             ls -> libc.so.6      :*__overflow(0x7f4e75bc7760, 0x20, 0x6)
             ls -> libc.so.6      :*strlen(0x5642e535ad20, 0x5642e535ad20, 0x5642e534db30)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ad20, 0x5642e535ad20, 0x5642e535ad20)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ad20, 0xe, 0x0)
             ls -> libc.so.6      :*strlen(0x5642e535ad20, 0x5642e535ad20, 0x5642e534db30)
             ls -> libc.so.6      :*fwrite_unlocked(0x5642e535ad20, 0x1, 0xe)
             ls -> libc.so.6      :*__overflow(0x7f4e75bc7760, 0x20, 0x5)
             ls -> libc.so.6      :*__overflow(0x7f4e75bc7760, 0x20, 0x6)
             ls -> libc.so.6      :*strlen(0x5642e5352a70, 0x5642e5352a70, 0x5642e534db30)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e5352a60, 0x5642e5352a70, 0x5642e5352a70)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e5352a70, 0x3, 0x0)
             ls -> libc.so.6      :*strlen(0x5642e5352a70, 0x5642e5352a70, 0x5642e534db30)
             ls -> libc.so.6      :*fwrite_unlocked(0x5642e5352a70, 0x1, 0x3)
             ls -> libc.so.6      :*__overflow(0x7f4e75bc7760, 0x20, 0x2)
             ls -> libc.so.6      :*__overflow(0x7f4e75bc7760, 0x20, 0x3)
             ls -> libc.so.6      :*strlen(0x5642e535ade0, 0x5642e535ade0, 0x5642e534db30)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ade0, 0x5642e535ade0, 0x5642e535ade0)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ade0, 0x5, 0x0)
             ls -> libc.so.6      :*strlen(0x5642e535ade0, 0x5642e535ade0, 0x5642e534db30)
             ls -> libc.so.6      :*fwrite_unlocked(0x5642e535ade0, 0x1, 0x5)
             ls -> libc.so.6      :*__overflow(0x7f4e75bc7760, 0x20, 0x1)
             ls -> libc.so.6      :*__overflow(0x7f4e75bc7760, 0x20, 0x2)
             ls -> libc.so.6      :*strlen(0x5642e535ae60, 0x5642e535ae60, 0x5642e534db30)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ae60, 0x5642e535ae60, 0x5642e535ae60)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ae60, 0x5, 0x0)
             ls -> libc.so.6      :*strlen(0x5642e535ae60, 0x5642e535ae60, 0x5642e534db30)
             ls -> libc.so.6      :*fwrite_unlocked(0x5642e535ae60, 0x1, 0x5)
             ls -> libc.so.6      :*__overflow(0x7f4e75bc7760, 0x20, 0x0)
             ls -> libc.so.6      :*__overflow(0x7f4e75bc7760, 0x20, 0x1)
             ls -> libc.so.6      :*strlen(0x5642e535ae20, 0x5642e535ae20, 0x5642e534db30)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ae20, 0x5642e535ae20, 0x5642e535ae20)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ae20, 0x6, 0x0)
             ls -> libc.so.6      :*strlen(0x5642e535ae20, 0x5642e535ae20, 0x5642e534db30)
             ls -> libc.so.6      :*fwrite_unlocked(0x5642e535ae20, 0x1, 0x6)
             ls -> libc.so.6      :*__overflow(0x7f4e75bc7760, 0x20, 0x0)
             ls -> libc.so.6      :*__overflow(0x7f4e75bc7760, 0x20, 0x1)
             ls -> libc.so.6      :*strlen(0x5642e535ae40, 0x5642e535ae40, 0x5642e534db30)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ae40, 0x5642e535ae40, 0x5642e535ae40)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ae40, 0xa, 0x0)
             ls -> libc.so.6      :*strlen(0x5642e535ae40, 0x5642e535ae40, 0x5642e534db30)
             ls -> libc.so.6      :*fwrite_unlocked(0x5642e535ae40, 0x1, 0xa)
             ls -> libc.so.6      :*__overflow(0x7f4e75bc7760, 0x20, 0x4)
             ls -> libc.so.6      :*__overflow(0x7f4e75bc7760, 0x20, 0x5)
             ls -> libc.so.6      :*strlen(0x5642e535ace0, 0x5642e535ace0, 0x5642e534db30)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ace0, 0x5642e535ace0, 0x5642e535ace0)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ace0, 0x5, 0x0)
             ls -> libc.so.6      :*strlen(0x5642e535ace0, 0x5642e535ace0, 0x5642e534db30)
             ls -> libc.so.6      :*fwrite_unlocked(0x5642e535ace0, 0x1, 0x5)
             ls -> libc.so.6      :*__overflow(0x7f4e75bc7760, 0x20, 0x3)
             ls -> libc.so.6      :*__overflow(0x7f4e75bc7760, 0x20, 0x4)
             ls -> libc.so.6      :*strlen(0x5642e535aca0, 0x5642e535aca0, 0x5642e534db30)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535aca0, 0x5642e535aca0, 0x5642e535aca0)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535aca0, 0x3, 0x0)
             ls -> libc.so.6      :*strlen(0x5642e535aca0, 0x5642e535aca0, 0x5642e534db30)
             ls -> libc.so.6      :*fwrite_unlocked(0x5642e535aca0, 0x1, 0x3)
             ls -> libc.so.6      :*__overflow(0x7f4e75bc7760, 0x20, 0x0)
             ls -> libc.so.6      :*__overflow(0x7f4e75bc7760, 0x20, 0x1)
             ls -> libc.so.6      :*strlen(0x5642e535ac60, 0x5642e535ac60, 0x5642e534db30)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ac60, 0x5642e535ac60, 0x5642e535ac60)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ac60, 0x3, 0x0)
             ls -> libc.so.6      :*strlen(0x5642e535ac60, 0x5642e535ac60, 0x5642e534db30)
             ls -> libc.so.6      :*fwrite_unlocked(0x5642e535ac60, 0x1, 0x3)
             ls -> libc.so.6      :*__overflow(0x7f4e75bc7760, 0x20, 0x5)
             ls -> libc.so.6      :*__overflow(0x7f4e75bc7760, 0x20, 0x6)
             ls -> libc.so.6      :*strlen(0x5642e535ad40, 0x5642e535ad40, 0x5642e534db30)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ad40, 0x5642e535ad40, 0x5642e535ad40)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ad40, 0x4, 0x0)
             ls -> libc.so.6      :*strlen(0x5642e535ad40, 0x5642e535ad40, 0x5642e534db30)
             ls -> libc.so.6      :*fwrite_unlocked(0x5642e535ad40, 0x1, 0x4)
             ls -> libc.so.6      :*__overflow(0x7f4e75bc7760, 0x20, 0x3)
             ls -> libc.so.6      :*__overflow(0x7f4e75bc7760, 0x20, 0x4)
             ls -> libc.so.6      :*strlen(0x5642e535ac80, 0x5642e535ac80, 0x5642e534db30)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ac80, 0x5642e535ac80, 0x5642e535ac80)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ac80, 0x4, 0x0)
             ls -> libc.so.6      :*strlen(0x5642e535ac80, 0x5642e535ac80, 0x5642e534db30)
             ls -> libc.so.6      :*fwrite_unlocked(0x5642e535ac80, 0x1, 0x4)
             ls -> libc.so.6      :*__overflow(0x7f4e75bc7760, 0x20, 0x1)
             ls -> libc.so.6      :*__overflow(0x7f4e75bc7760, 0x20, 0x2)
             ls -> libc.so.6      :*strlen(0x5642e535abc0, 0x5642e535abc0, 0x5642e534db30)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535abc0, 0x5642e535abc0, 0x5642e535abc0)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535abc0, 0x3, 0x0)
             ls -> libc.so.6      :*strlen(0x5642e535abc0, 0x5642e535abc0, 0x5642e534db30)
             ls -> libc.so.6      :*fwrite_unlocked(0x5642e535abc0, 0x1, 0x3)
             ls -> libc.so.6      :*__overflow(0x7f4e75bc7760, 0x20, 0x6)
             ls -> libc.so.6      :*__overflow(0x7f4e75bc7760, 0x20, 0x7)
             ls -> libc.so.6      :*strlen(0x5642e535abe0, 0x5642e535abe0, 0x5642e534db30)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535abe0, 0x5642e535abe0, 0x5642e535abe0)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535abe0, 0x4, 0x0)
             ls -> libc.so.6      :*strlen(0x5642e535abe0, 0x5642e535abe0, 0x5642e534db30)
             ls -> libc.so.6      :*fwrite_unlocked(0x5642e535abe0, 0x1, 0x4)
             ls -> libc.so.6      :*__overflow(0x7f4e75bc7760, 0x20, 0x4)
             ls -> libc.so.6      :*__overflow(0x7f4e75bc7760, 0x20, 0x5)
             ls -> libc.so.6      :*strlen(0x5642e535adc0, 0x5642e535adc0, 0x5642e534db30)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535adc0, 0x5642e535adc0, 0x5642e535adc0)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535adc0, 0x4, 0x0)
             ls -> libc.so.6      :*strlen(0x5642e535adc0, 0x5642e535adc0, 0x5642e534db30)
             ls -> libc.so.6      :*fwrite_unlocked(0x5642e535adc0, 0x1, 0x4)
             ls -> libc.so.6      :*__overflow(0x7f4e75bc7760, 0x20, 0x2)
             ls -> libc.so.6      :*__overflow(0x7f4e75bc7760, 0x20, 0x3)
             ls -> libc.so.6      :*strlen(0x5642e535ac20, 0x5642e535ac20, 0x5642e534db30)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ac20, 0x5642e535ac20, 0x5642e535ac20)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ac20, 0x3, 0x0)
             ls -> libc.so.6      :*strlen(0x5642e535ac20, 0x5642e535ac20, 0x5642e534db30)
             ls -> libc.so.6      :*fwrite_unlocked(0x5642e535ac20, 0x1, 0x3)
             ls -> libc.so.6      :*__overflow(0x7f4e75bc7760, 0x9, 0x7)
             ls -> libc.so.6      :*strlen(0x5642e535ad60, 0x5642e535ad60, 0x5642e534db30)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ad60, 0x5642e535ad60, 0x5642e535ad60)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ad60, 0x3, 0x0)
             ls -> libc.so.6      :*strlen(0x5642e535ad60, 0x5642e535ad60, 0x5642e534db30)
             ls -> libc.so.6      :*fwrite_unlocked(0x5642e535ad60, 0x1, 0x3)
             ls -> libc.so.6      :*__overflow(0x7f4e75bc7760, 0x20, 0x4)
             ls -> libc.so.6      :*__overflow(0x7f4e75bc7760, 0x20, 0x5)
             ls -> libc.so.6      :*strlen(0x5642e535ac00, 0x5642e535ac00, 0x5642e534db30)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ac00, 0x5642e535ac00, 0x5642e535ac00)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ac00, 0x3, 0x0)
             ls -> libc.so.6      :*strlen(0x5642e535ac00, 0x5642e535ac00, 0x5642e534db30)
             ls -> libc.so.6      :*fwrite_unlocked(0x5642e535ac00, 0x1, 0x3)
             ls -> libc.so.6      :*__overflow(0x7f4e75bc7760, 0x20, 0x1)
             ls -> libc.so.6      :*__overflow(0x7f4e75bc7760, 0x20, 0x2)
             ls -> libc.so.6      :*strlen(0x5642e535ac40, 0x5642e535ac40, 0x5642e534db30)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ac40, 0x5642e535ac40, 0x5642e535ac40)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ac40, 0x3, 0x0)
             ls -> libc.so.6      :*strlen(0x5642e535ac40, 0x5642e535ac40, 0x5642e534db30)
             ls -> libc.so.6      :*fwrite_unlocked(0x5642e535ac40, 0x1, 0x3)
             ls -> libc.so.6      :*__overflow(0x7f4e75bc7760, 0x20, 0x6)
             ls -> libc.so.6      :*__overflow(0x7f4e75bc7760, 0x20, 0x7)
             ls -> libc.so.6      :*strlen(0x5642e535ad00, 0x5642e535ad00, 0x5642e534db30)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ad00, 0x5642e535ad00, 0x5642e535ad00)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ad00, 0x3, 0x0)
             ls -> libc.so.6      :*strlen(0x5642e535ad00, 0x5642e535ad00, 0x5642e534db30)
             ls -> libc.so.6      :*fwrite_unlocked(0x5642e535ad00, 0x1, 0x3)
             ls -> libc.so.6      :*__overflow(0x7f4e75bc7760, 0x20, 0x3)
             ls -> libc.so.6      :*__overflow(0x7f4e75bc7760, 0x20, 0x4)
             ls -> libc.so.6      :*strlen(0x5642e535ae80, 0x5642e535ae80, 0x5642e534db30)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ae80, 0x5642e535ae80, 0x5642e535ae80)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ae80, 0x7, 0x0)
             ls -> libc.so.6      :*strlen(0x5642e535ae80, 0x5642e535ae80, 0x5642e534db30)
             ls -> libc.so.6      :*fwrite_unlocked(0x5642e535ae80, 0x1, 0x7)
             ls -> libc.so.6      :*__overflow(0x7f4e75bc7760, 0x20, 0x4)
             ls -> libc.so.6      :*__overflow(0x7f4e75bc7760, 0x20, 0x5)
             ls -> libc.so.6      :*strlen(0x5642e535ab40, 0x5642e535ab40, 0x5642e534db30)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ab40, 0x5642e535ab40, 0x5642e535ab40)
             ls -> libc.so.6      :*__ctype_get_mb_cur_max(0x5642e535ab40, 0xb, 0x0)
             ls -> libc.so.6      :*strlen(0x5642e535ab40, 0x5642e535ab40, 0x5642e534db30)
             ls -> libc.so.6      :*fwrite_unlocked(0x5642e535ab40, 0x1, 0xb)
             ls -> libc.so.6      :*__overflow(0x7f4e75bc7760, 0xa, 0x0)
bin  boot  cdrom  dev  etc  home  initrd.img  initrd.img.old  lib  lib32  lib64  libx32  lost+found  media  mnt  opt  proc  root  run  sbin  snap  srv  sys  tmp  usr  var  vmlinuz  vmlinuz.old
             ls -> libc.so.6      :*__fpending(0x7f4e75bc7760, 0x0, 0x5642e3e7d640)
             ls -> libc.so.6      :*fileno(0x7f4e75bc7760, 0x0, 0x5642e3e7d640)
             ls -> libc.so.6      :*__freading(0x7f4e75bc7760, 0x0, 0x5642e3e7d640)
             ls -> libc.so.6      :*__freading(0x7f4e75bc7760, 0x0, 0x804)
             ls -> libc.so.6      :*fflush(0x7f4e75bc7760, 0x0, 0x804)
             ls -> libc.so.6      :*fclose(0x7f4e75bc7760, 0x7f4e75bc88c0, 0x0)
             ls -> libc.so.6      :*__fpending(0x7f4e75bc7680, 0x0, 0x7f4e75bc2760)
             ls -> libc.so.6      :*fileno(0x7f4e75bc7680, 0x0, 0x7f4e75bc2760)
             ls -> libc.so.6      :*__freading(0x7f4e75bc7680, 0x0, 0x7f4e75bc2760)
             ls -> libc.so.6      :*__freading(0x7f4e75bc7680, 0x0, 0x4)
             ls -> libc.so.6      :*fflush(0x7f4e75bc7680, 0x0, 0x4)
             ls -> libc.so.6      :*fclose(0x7f4e75bc7680, 0x7f4e75bc88b0, 0x0)

strace и невидимый суслик, который есть


Вывод strace date
$ strace date
execve("/bin/date", ["date"], 0x7ffd24f0d7c0 /* 60 vars */) = 0
brk(NULL)                               = 0x5593e5b58000
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=231893, ...}) = 0
mmap(NULL, 231893, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f043c2cd000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\260A\2\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=1996592, ...}) = 0
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f043c2cb000
mmap(NULL, 2004992, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f043c0e1000
mprotect(0x7f043c103000, 1826816, PROT_NONE) = 0
mmap(0x7f043c103000, 1511424, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x22000) = 0x7f043c103000
mmap(0x7f043c274000, 311296, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x193000) = 0x7f043c274000
mmap(0x7f043c2c1000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1df000) = 0x7f043c2c1000
mmap(0x7f043c2c7000, 14336, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f043c2c7000
close(3)                                = 0
arch_prctl(ARCH_SET_FS, 0x7f043c2cc580) = 0
mprotect(0x7f043c2c1000, 16384, PROT_READ) = 0
mprotect(0x5593e5431000, 8192, PROT_READ) = 0
mprotect(0x7f043c32f000, 4096, PROT_READ) = 0
munmap(0x7f043c2cd000, 231893)          = 0
brk(NULL)                               = 0x5593e5b58000
brk(0x5593e5b79000)                     = 0x5593e5b79000
openat(AT_FDCWD, "/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=5703680, ...}) = 0
mmap(NULL, 5703680, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f043bb70000
close(3)                                = 0
openat(AT_FDCWD, "/etc/localtime", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=1544, ...}) = 0
fstat(3, {st_mode=S_IFREG|0644, st_size=1544, ...}) = 0
read(3, "TZif2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\21\0\0\0\21\0\0\0\0"..., 4096) = 1544
lseek(3, -936, SEEK_CUR)                = 608
read(3, "TZif2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\21\0\0\0\21\0\0\0\0"..., 4096) = 936
close(3)                                = 0
fstat(1, {st_mode=S_IFCHR|0600, st_rdev=makedev(136, 6), ...}) = 0
write(1, "\320\237\320\275 \320\274\320\260\321\200 11 14:44:42 MSK 2019"..., 33Пн мар 11 14:44:42 MSK 2019
) = 33
close(1)                                = 0
close(2)                                = 0
exit_group(0)                           = ?
+++ exited with 0 +++

Загадка: найти time или gettimeofday.
Решение: перезагрузиться с опцией ядра vdso=0 и поискать снова.


Дело в том, что некоторые вызовы, такие как gettimeofday, считаются часто вызываемыми и при этом не требующими полноценного переключения в ядро. Поэтому наверху пользовательского адресного пространства ядром подкладывается псевдо-библиотека vDSO, предоставляющая быстрый интерфейс к некоторым системным вызовам. Кстати, там же написано, что seccomp их тоже, скорее всего, не увидит.


Бонус


Знете ли вы...


  • что псевдографический интерфейс есть прямо в gdb? Просто наберите tui en — верхняя часть экрана при этом будет в реальном времени показывать текущую часть исходного кода.
  • что команда gdb break поддерживает задание выражения, только при равенстве которого true нужно остановиться на точке останова, иначе идти дальше: break malloc if sz > 10000 (это не полный список возможностей команды break)
  • что можно с целью отладки недописанного кода отложить проблемы с отсутствующими функциями на время выполнения с помощью опции компилятора/линкера
Теги:
Хабы:
+33
Комментарии 6
Комментарии Комментарии 6

Публикации

Истории

Работа

Программист С
43 вакансии

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн