문자는 \0
으로 시작하는 문자열을 가지고 있습니다. 이는 설계 상으로는 실제 길이를 알고 있습니다.gdb에서 NUL로 시작하는 문자열 출력
길이가 알고있는 경우 "\0foo\0bar\0"
과 같은 이스케이프를 사용하여 표현을 어떻게 인쇄 할 수 있습니까?
문자는 \0
으로 시작하는 문자열을 가지고 있습니다. 이는 설계 상으로는 실제 길이를 알고 있습니다.gdb에서 NUL로 시작하는 문자열 출력
길이가 알고있는 경우 "\0foo\0bar\0"
과 같은 이스케이프를 사용하여 표현을 어떻게 인쇄 할 수 있습니까?
글쎄, 당신은 배열로 인쇄 할 수 있어야한다 :
print *[email protected]
당신은 GDB printf의 명령을 사용할 수 있습니다.
NULL 문자가 없으므로 char *을 1 씩 증가시켜 인쇄하면됩니다.
다음과 같은 코드가있는 경우 :
gcc -Wall -g -o test test.c
다음과 같이 실행 GDB :
int main(void)
{
char * s1 = "abcd";
char * s2 = "\0abcd";
return 0;
}
과 함께 프로그램을 컴파일이 이후
gdb test
(gdb) break main
(gdb) run
Breakpoint 1 at 0x100000f04: file test.c, line 3.
(gdb) si
1 char * s1 = "abcd";
(gdb) si
2 char * s2 = "\0abcd";
(gdb) printf "%s", s1
abcd
(gdb) printf "%s", s2+1
abcd
+1 실제로 NULL를 통해 인쇄 할 수 있습니다 경계. – gamen
+1 너무 원했고, 더 이상, 덜도 없었습니다. – Flavius
@gamen : NUL과 NULL을 혼동하지 마십시오. 전자는 문자이고, 나중에 포인터입니다. – Flavius