[REDIS] 코드의 의미를 - " 'X'= * ((1) (문자 *를))"무슨 일입니까?
REDIS코드의 의미를 - " 'X'= * ((1) (문자 *를))"무슨 일입니까?
나는 독서에 문제가 소스 코드, 캔 사람이 debug.c의 _redisAssert 기능의 마지막 문장의 사용이 무엇인지 말해 레디 스했다 :
*((char*)-1) = 'x';
해결법
-
==============================
1.최신 정보
최신 정보
나는 debug.c의 라인이 OP에서 언급하고 우리가이 코드를 위의 두 라인에서 볼 수있는 발견 :
redisLog(REDIS_WARNING,"(forcing SIGSEGV to print the bug report.)");
와 같은 코드는 _redisPanic에서 찾을 수 있습니다뿐만 아니라, 그래서 주장에 오류가 발생하거나 패닉이있을 때 SIGSEGV를 강제로 자신의 방법처럼 보인다.
기발한
디버깅 도구 등이 외모, 우리는 가이드와 관련 섹션 말한다 디버깅이 문서 레디 스에서 볼 수있다 :
및 프로그램이 GDB 출력 :
(gdb) continue Continuing. Program received signal EXC_BAD_ACCESS, Could not access memory. Reason: KERN_INVALID_ADDRESS at address: 0xffffffffffffffff debugCommand (c=0x7ffc32005000) at debug.c:220 220 *((char*)-1) = 'x'; ^^^^^^^^^^^^^^^^^^^
무엇을하고있는 것은 **는 * 문자 -1 캐스팅 한 다음에 간접을 수행하고 그 메모리 위치에 'x'를 지정합니다. 스레드로서 ALK는 ((무효 *) -1) 유효 주소를 연결하는 것이? 이 접근 유효 커녕에 값을 할당하지 않습니다 대부분의 시스템에 말했다. 이것은 대부분의 현대 운영 체제에서 세그먼트 오류를 생성합니다.
이것은 정의되지 않은 동작과 같은 간단한 표준 C의 세그먼트 폴트를 생성하는 방법을 준수 무엇 스레드에 가서했다? 그것은 의존 할 수 없습니다. 컴파일러는 스마트지고 컴파일러가 예상치 못한 나쁜 방법으로 정의되지 않은 동작을 악용에 대한 스마트 일부 유명한 예가있다.
-
==============================
2.당신의 표현 *에서 ((의 char *) - 1) 'x'를 ;: =
당신의 표현 *에서 ((의 char *) - 1) 'x'를 ;: =
당신은 값 -1 문자에 * 다음은 절대적으로 제공이 주소의 내용 값을 'X'할당하십시오하려고 부정적인 주소로 당신에게 포인터를 제공 캐스팅하고 세그먼트 오류.
from https://stackoverflow.com/questions/20844863/what-does-char-1-x-code-mean by cc-by-sa and MIT license
'REDIS' 카테고리의 다른 글
[REDIS] 나쁜 액티브 디렉토리의 LDAP 자격 증명과 세션 / 레디 스 직렬화 오류 봄 부팅 (0) | 2020.01.01 |
---|---|
[REDIS] 하나의 클라이언트에 의해 레디 스 시계 MULTI EXEC (0) | 2020.01.01 |
[REDIS] 레디 스에서 NumPy와 배열을 저장하는 가장 빠른 방법 (0) | 2020.01.01 |
[REDIS] 어떻게 레디 스를 사용하여 NodeJs와 PHP 사이에 공유 세션에? (0) | 2020.01.01 |
[REDIS] 당신은 레디 스에 저장할 수있는 최대 값의 크기는 얼마입니까? (0) | 2020.01.01 |