Когда я запускаю отладчик: "не удалось установить управляющий терминал"

В книге, которую я прочитал, процессор автора был 32-разрядным. Мой 64-битный. Я запускаю ассемблер NASM в терминале с:

nasm -f elf -g -F stabs asmwork/eatsyscall.asm

Затем я запускаю компоновщик:

ld -o eatsyscall eatsyscall.o

Это вернулось:

архитектура входного файла ld: i386 eatsyscall.o несовместим с выходом i386:x86-64

Я прочитал несколько ответов, и он сказал, что мне нужно использовать elf64 (не так, как сказано в книге). Я запускаю ассемблер, и это решило это сообщение.

Теперь я бегу в терминале kdbg eatsyscall.o, Открывается программное обеспечение KDbg и KDbg: вывод программы.

Я выбираю точку останова в строке и, как обычно, появляется красный круг. Я нажимаю кнопку "Выполнить", и красный круг не изменяется для стрелки. Вместо этого в выводе программы KDbg: она выводит это сообщение (я не показываю, где .o файл как в выводе написано):

warning: GDB: Failed to set controlling terminal: Operation not permitted 
/bin/bash: Permission denied 
/bin/bash: line 0: exec: cannot execute: Permission denied.

Или в одном случае, просто это сообщение:

warning: GDB: Failed to set controlling terminal: Operation not permitted

В Настройки> Глобальные параметры у меня есть следующее.

  • Как вызвать GDB: gdb --fullname --nx
  • Терминал для вывода программы: xterm -name kdbgio -title %T -e sh -c %C

Что я могу сделать? Почему я получаю ошибку разрешения? Это что-то связано с командой sudo?


ОБНОВИТЬ

Для запуска отладчика я использовал kdbg program а также kdbg ./program, Исполняемый файл, который я хочу отладить, называется program и он находится в папке asmwork, Когда мой рабочий каталог находится в этой папке, я пишу ls -l и я получаю следующее о файле:

-rwxrwxr-x 1 adam adam 1304 יול 24 17:56 program

это

этот

этот

1 ответ

Я вижу, что это старо. Тем не менее, это без ответа, и он получает значительные мнения, следовательно.....

Я прочитал некоторые ответы, и они сказали, что мне нужно использовать `elf64` (не так, как сказано в книге).

Рассматриваемая книга действительно посвящена программированию на ассемблере для 32-битных процессоров Intel x86, об этом прямо говорится во всех публикациях по маркетингу, которые я видел. Вам нужно помнить о тонких различиях между архитектурами IA-32 и x86-64. Если вы используете компьютер с архитектурой x86-64, то вполне вероятно, что некоторые примеры, приведенные в тексте, могут потребовать незначительной настройки.

В дополнение к изменению elf в elf64было бы разумно заменить stabs с dwarf, как по моему опыту, сборка вашей программы с stabs в x86-64 не совсем совместимо; stabs будет более подходящим форматом для работы с IA-32 Linux.

Опять же, вам решать, где примеры, приведенные в тексте, необходимо скорректировать с учетом изменений в технологии.

nasm -f elf -g -F stabs eatsyscall.asm

становится...............

nasm -f elf64 -g -F dwarf eatsyscall.asm

Это должно успешно скомпилировать ваш исходный код в файл объектного кода, совместимый с x86-64....................................................................................................................................................................

С помощью elf формат в отличие от elf64Будет сборка x86 файл объектного кода. Затем вы можете создать 32-битный исполняемый файл, используя следующее:

ld -m elf_i386 -o executablename objectfilename.o

вариант -m для эмуляции (смотрите ld справочные страницы). Здесь вы можете выбрать желаемую архитектуру из доступных. С помощью -m elf_i386 позволяет нам создать i386 исполняемый на нашей машине x86-64.

Вы можете использовать опцию -V получить список доступных архитектур; пожалуйста, смотрите справочные страницы для более подробной информации.

..............................................................................

Я запускаю в терминале `kdbg eatsyscall.o`. Он открывает программное обеспечение Kdbg и Kdbg: вывод программы

Вам нужно будет загрузить исполняемый файл в отладчик, а не файл объектного кода, как указано выше. Вы уже создали этот исполняемый файл, предполагая, что он был успешным, когда вы запускали объектный модуль через компоновщик; как указано в вашем вопросе.

Похоже, ваша главная проблема связана с предупреждением в окне выходного терминала.

Решение можно найти в руководстве. Я воспроизведу решение здесь, на случай, если в будущем произойдет сбой URL.

Когда программа отлаживается с помощью KDbg в первый раз, программа
окно вывода не используется. Причина этого заключается в том, что KDbg не может знать, требует ли программа сложной эмуляции терминала или ожидает ввода через терминал. Таким образом, программа-эмулятор терминала используется по умолчанию. Чтобы перенаправить вывод в окно вывода, вы должны сделать следующее:

  1. Откройте диалоговое окно "Настройки", выбрав "Настройки | Эта программа".
  2. Перейдите на вкладку "Вывод".
  3. Выберите "Только вывод", простую эмуляцию терминала и нажмите "ОК".
  4. Перезагрузите программу, выбрав ее в списке "Файл | Недавние"> "Исполняемые файлы".
Другие вопросы по тегам