Почему в моей ассемблерной программе x64 возникает ошибка сегментации?Linux

Ответить Пред. темаСлед. тема
Anonymous
 Почему в моей ассемблерной программе x64 возникает ошибка сегментации?

Сообщение Anonymous »

Недавно я тестировал различные системные вызовы в x64, поэтому эта программа должна была позволить мне добавлять в конец файла с помощью lseek, все, что было до этого, работает, но по какой-то причине в конце системного вызова выхода после вызова выхода есть случайная инструкция, которую я не ввел.

Код: Выделить всё

Breakpoint 2, 0x0000000000401069 in exit ()
(gdb) si
0x000000000040106b in exit ()
(gdb) si
0x000000000040106e in exit ()
(gdb) x/i $pc
=> 0x40106e :   syscall
(gdb) si
0x0000000000401070 in ?? ()
(gdb) x/i $pc
=> 0x401070:    add    %al,(%rax)
(gdb) disass/r exit
Dump of assembler code for function exit:
0x0000000000401069 :     b0 3c                   mov    $0x3c,%al
0x000000000040106b :     40 b7 00                mov    $0x0,%dil
0x000000000040106e :     0f 05                   syscall
End of assembler dump.

Это сам файл

Код: Выделить всё

%include "fileio.s"
global _start

section .text
_start:
openat -100, file, U_EXEC+UGO_RW, STDIN
mov rdi, rax
mov al, 0x8
mov rsi, 00
mov rdx, 0x2
syscall
fchmod rdi, UGO_RW
write rdi, message, len
syncfs rdi
close rdi

exit:
mov al, 0x3c
mov dil, 0x0
syscall

section .data
file:
db "Payload.txt", 0
message:
db "Ahoy Matey", 0xa
len equ $-message

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

Подробнее здесь: https://stackoverflow.com/questions/791 ... tion-fault
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как использовать функции вывода и ввода C (scanf и printf) в ассемблерной программе FASM для 64-разрядной версии Linux?
    Anonymous » » в форуме Linux
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • В чем ошибка этой ассемблерной программы
    Anonymous » » в форуме Linux
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Ошибка сегментации в моей программе сборки
    Anonymous » » в форуме Linux
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • X64-linux становится x64-1 при определении макроса?
    Anonymous » » в форуме C++
    0 Ответы
    25 Просмотры
    Последнее сообщение Anonymous
  • X64-linux становится x64-1 при определении макроса? [дубликат]
    Anonymous » » в форуме C++
    0 Ответы
    43 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Linux»