Как мне узнать информацию (что она делает и как) о скомпилированном 64-разрядном исполняемом файле ELF LSB, который не может быть запущен (недопустимый указатель)?

#pointers #malloc #glibc #elf

#указатели #malloc #glibc #elf

Вопрос:

Когда я запускаю команду file (мой файл), я получаю

мой файл: 64-разрядный исполняемый файл ELF LSB, ARM aarch64, версия 1 (SYSV), динамически связанный, интерпретатор / lib / ld-linux-aarch64.so.1, для GNU / Linux 3.7.0, buildId [sha1]=d0fa19146049b8f8b97701a7fc91284f157403ef, не удален

Когда я пытаюсь запустить ./my-file: * Ошибка в `./lano-campipe’: realloc(): недопустимый указатель: 0x0000000000406dc8 * Прервано (сброс ядра)

Ответ №1:

Существует порт aarch64 valgrind. Если вы запустите свою программу под этим, она, скорее всего, точно сообщит вам, что не так и где произошла ошибка.

Я предполагаю, основываясь на адресе, что вы передаете адреса (массива или строки?) to realloc , который выделяется в разделе .data (или .rodata ), а не в куче. Если вы запустите программу под GDB и введете эту команду

 info symbol 0x0000000000406dc8
  

скорее всего, он напечатает символьную информацию для адреса. Вероятно, необходимо вызвать malloc и скопировать данные в кучу, чтобы исправить эту ошибку.