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

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

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

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

ld -o eatsyscall eatsyscall.o

Это вернуло:

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

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

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

Я выбираю точку останова в строке и, как обычно, появляется красный кружок. Я нажимаю кнопку «Выполнить», и красный кружок не меняется на стрелку. Вместо этого в KDbg: Program output он выводит это сообщение (я не показываю, где находится файл .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 и kdbg ./program. { {1}} Исполняемый файл, который я хочу отладить, называется программа и находится в папке asmwork . Когда мой рабочий каталог находится в этой папке, я пишу ls -l и получаю следующее о файле:

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

This

this

this

2
задан 11 September 2017 в 11:07

1 ответ

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

Я прочитал некоторые ответы, и это сказало, что я должен был использовать 'elf64' (не как сказанная книга).

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

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

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

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

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

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

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

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

ld -m elf_i386 -o executablename objectfilename.o

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

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

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

Я работаю в терминале 'kdbg eatsyscall.o'. Это открывает программное обеспечение Kdbg и Kdbg: Программа производится

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

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

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

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

  1. Откройте диалоговое окно Настроек путем выбора Программы Settings|This.
  2. Переключитесь на вкладку Output.
  3. Выберите вывод Only, простую эмуляцию терминала и нажмите "OK".
  4. Перезагрузите программу путем выбора его из списка в File|Recent> Исполняемые файлы.
1
ответ дан 2 December 2019 в 04:55

Другие вопросы по тегам:

Похожие вопросы: