__kernel_vsyscall в функции сборки (gdb) - PullRequest
0 голосов
/ 05 апреля 2020

У меня есть ошибка __kernel_vsyscall в функции, которая выдает правильный вывод, но программа никогда не может пройти мимо нее и выдает ошибку __kernel_vsyscall. C функции:

void f1(int* input, int* output, int nbElements);

Функция ассемблера (ГАЗ). Я не могу опубликовать все это, потому что это для назначения, и я не хочу, чтобы кто-то копировал это.

f1:
    push %ebp
    mov %esp, %ebp

    movl $0, %ecx
    movl $0, %ebx

    jmp for_loop1

for_loop1:

    cmpl %ecx, 16(%ebp)
    jb end
    movl $0, %ebx
    jmp for_loop2

for_loop2:
    /*move input elements to output elements*/
    cmpl %ecx, %ebx
    jmp incr_2

incr_2:

    addl $1, %ebx
    cmpl %ebx, 16(%ebp)
    jb incr_1
    jmp for_loop2

incr_1:
    addl $1, %ecx
    jmp for_loop1

end:        
    addl $8, %esp               
    leave
    ret

Ошибка при завершении программы:

malloc(): invalid size (unsorted)
Aborted (core dumped)

Ошибка при отладка с помощью gdb с файлом coredump:

For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from ./program_name...
[New LWP 2634]

warning: Loadable section ".note.gnu.property" outside of ELF segments
Core was generated by `./program_name'.
Program terminated with signal SIGABRT, Aborted.
#0  0xf7f35ac9 in __kernel_vsyscall ()

Я попытался посмотреть, что находится по адресу 0xf7f35ac9, и он вернул -402652697 или другое случайное значение.

Локальные переменные имеют адреса около 0xff83b1f c, значения, хранящиеся в указателях, имеют адреса около 0x80cab30, ранее объявленные функции находятся по адресам около 0x8049fc4, а стек имеет значения около 0xffadded c, поэтому я понятия не имею, где это.

Спасибо

1 Ответ

0 голосов
/ 06 апреля 2020

Мне удалось решить проблему, изменив

cmpl %ecx, 16(%ebp)
jb end

на

cmpl 16(%ebp), %ecx
jge end

так же, как и во всех других сравнениях. Посмотрел онлайн, и, очевидно, разница между jb / ja и jl / jg в том, что jb / ja для сравнения без знака, а jl / jg для сравнения со знаком, но я все еще не уверен, почему это вызывает эту ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...