__kernel_vsyscall 汇编函数 (gdb)
__kernel_vsyscall in assembly function (gdb)
我在提供正确输出的函数中遇到 __kernel_vsyscall 错误,但程序永远无法通过它并给出 __kernel_vsyscall 错误。
C 函数:
void f1(int* input, int* output, int nbElements);
汇编程序函数 (GAS)。我不能 post 整件事,因为这是一项作业,我不想让别人复制它。
f1:
push %ebp
mov %esp, %ebp
movl [=12=], %ecx
movl [=12=], %ebx
jmp for_loop1
for_loop1:
cmpl %ecx, 16(%ebp)
jb end
movl [=12=], %ebx
jmp for_loop2
for_loop2:
/*move input elements to output elements*/
cmpl %ecx, %ebx
jmp incr_2
incr_2:
addl , %ebx
cmpl %ebx, 16(%ebp)
jb incr_1
jmp for_loop2
incr_1:
addl , %ecx
jmp for_loop1
end:
addl , %esp
leave
ret
程序终止时出错:
malloc(): invalid size (unsorted)
Aborted (core dumped)
使用带有 coredump 文件的 gdb 进行调试时出错:
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 或另一个随机值。
局部变量在0xff83b1fc附近的地址,指针中存储的值在0x80cab30附近的地址,之前声明的函数在0x8049fc4附近的地址,堆栈的值在0xffaddedc附近,所以我不知道这个在哪里是。
谢谢
我可以通过更改
来解决问题
cmpl %ecx, 16(%ebp)
jb end
至
cmpl 16(%ebp), %ecx
jge end
与所有其他比较相同。上网查了一下,jb/ja 和 jl/jg 的区别是 jb/ja 是无符号比较,而 jl/jg 是有符号比较,但我还是不明白这是为什么导致此错误。
我在提供正确输出的函数中遇到 __kernel_vsyscall 错误,但程序永远无法通过它并给出 __kernel_vsyscall 错误。 C 函数:
void f1(int* input, int* output, int nbElements);
汇编程序函数 (GAS)。我不能 post 整件事,因为这是一项作业,我不想让别人复制它。
f1:
push %ebp
mov %esp, %ebp
movl [=12=], %ecx
movl [=12=], %ebx
jmp for_loop1
for_loop1:
cmpl %ecx, 16(%ebp)
jb end
movl [=12=], %ebx
jmp for_loop2
for_loop2:
/*move input elements to output elements*/
cmpl %ecx, %ebx
jmp incr_2
incr_2:
addl , %ebx
cmpl %ebx, 16(%ebp)
jb incr_1
jmp for_loop2
incr_1:
addl , %ecx
jmp for_loop1
end:
addl , %esp
leave
ret
程序终止时出错:
malloc(): invalid size (unsorted)
Aborted (core dumped)
使用带有 coredump 文件的 gdb 进行调试时出错:
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 或另一个随机值。
局部变量在0xff83b1fc附近的地址,指针中存储的值在0x80cab30附近的地址,之前声明的函数在0x8049fc4附近的地址,堆栈的值在0xffaddedc附近,所以我不知道这个在哪里是。
谢谢
我可以通过更改
来解决问题cmpl %ecx, 16(%ebp)
jb end
至
cmpl 16(%ebp), %ecx
jge end
与所有其他比较相同。上网查了一下,jb/ja 和 jl/jg 的区别是 jb/ja 是无符号比较,而 jl/jg 是有符号比较,但我还是不明白这是为什么导致此错误。