:s
저는 실수로 null 바이트(^@ )( replace) 명령을 삽입하기 전까지는 잘 작동하는 명령줄 프로그램(패키지 관리자를 통해 설치)을 사용해 왔습니다 . 그 시점부터 프로그램이 실행되지 않고 대신 다음 오류가 발생합니다.
/usr/include/c++/9/bits/basic_string.h:1048: std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::const_reference std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::operator[](std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type) const [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::const_reference = const char&; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]: Assertion '__pos <= size()' failed.
Aborted (core dumped)
gnome-abrt가 표시하는 오류의 원인은 다음과 같습니다.
task killed by SIGABRT
구체적으로SIGABRT 6
Linux에서 실행 파일이 읽는 텍스트 파일에 null 바이트를 삽입하면 무엇을 합니까? 프로그램 데이터 파일에 널 바이트를 삽입하는 것은 git 커밋 메시지에 널 바이트를 삽입하는 방법과 유사하며 어떻게든 git을 중단시킵니다.
널 바이트로 인해 해당 텍스트 파일을 읽을 때 프로그램이 중단됩니까, 아니면 다른 이유가 있습니까?
답변1
매뉴얼 페이지에는 다음과 signal(7)
같이 나와 있습니다.
Signal Value Action Comment
──────────────────────────────────────────────────────────────────────
SIGABRT 6 Core Abort signal from abort(3)
그리고 abort(3)
:
NAME
abort - cause abnormal process termination
DESCRIPTION
The abort() first unblocks the SIGABRT signal, and then raises that
signal for the calling process (as though raise(3) was called). This
results in the abnormal termination of the process
따라서 SIGABRT
절차 자체가 중단되기로 결정되면 사망이 발생할 가능성이 높습니다. 데이터에 대한 일부 온전성 검사를 수행하고 데이터가 유효하지 않은 경우 중단될 수 있습니다.
이것assert()
매크로는 라고도 하며 abort()
오류 메시지에 다음 비트가 포함됩니다.
std::__cxx11::basic_string...: Assertion '__pos <= size()' failed.
이는 C++ 라이브러리 어딘가에 유효하지 않은 값이 사용되고 있음을 나타내는 것으로 보이며, 유효하지 않은 데이터로 인해 발생하는 불가능한 경우를 확인하고 있습니다.