gdb를 사용하여 매우 간단한 어셈블리 프로그램 (SPARC)을 디버깅 중이며 이상한 문제가 발생했습니다. gdb를 사용하여 argv의 인수를 내 프로그램의 주요 기능에 인쇄하려고합니다. 어떤 이유로 main의 두 번째 인수 인 $ i1의 주소가 -1을 가리 키도록 변경됩니다. 다음은 gdb 세션의 복사 붙여 넣기입니다.gdb에서이 주소가 변경되는 이유는 무엇입니까?
(gdb) p/x $i1
$1 = 0xffbff084
(gdb) x/x 0xffbff084
0xffbff084: 0xffbff1e4
(gdb) x/s 0xffbff1e4
0xffbff1e4: "..."
(gdb) x/x 0xffbff088
0xffbff088: 0xff
(gdb) x/x 0xffbff084
0xffbff084: 0xff
인쇄 된 실제 경로 대신 "..."을 사용했습니다.
첫 번째 인수를 올바르게 인쇄했지만 두 번째 인수의 주소를 얻는 대신 gdb는 다음 값이 -1이라고 말합니다. 첫 번째 문자열의 주소를 다시 확인하기 위해 되돌아갔습니다. gdb에서는 -1 일 뿐이라고 말했지만, 다른 것으로 밝혀졌습니다.
이 다중 스레드 프로그램이 아닙니다, 그래서 주소 변경 할 수있는 것을 모르는 :/
편집 : X/s는 주소의 내용을 인쇄에 사용 후에 일이 나타납니다 만 .