2016-06-25 3 views
1

GDB에서 두 개의 명령을 계단식으로 연결하는 방법이 있습니까? 파이프 처리를 시도했지만 작동하지 않았습니다. 내가 0xbfffefd4 주소에 저장되는보고 싶다면GDB 명령을 파이프 할 수 있습니까?

, 내가 입력 :

x/x 0xbfffefd4 

내가 0xbffff1dc에 저장되는 것을보고 싶어 지금 경우 내 예에서 저를 0xbffff1dc 제공, 난 유형 :

x/x 0xbffff1dc 

이 두 가지 명령을 파이프 할 수있는 방법이 있습니까?

x/x (x/x 0xbfffefd4)와 같은 것?

그런데 16 진수 대신 문자를 표시하는 방법이 있습니까?

답변

1

몇 가지 방법으로 gdb 명령을 작성할 수는 있지만 쉽지 않습니다.

간접 지정의 특정 경우에 C 연산자 만 사용할 수 있습니다. 즉 :

그런데
(gdb) x/x *(void**)0xbfffefd4 

, 대신 진수의 문자를 표시하는 방법은 무엇입니까?

help x을 참조하십시오. /c 형식으로 문자가 표시됩니다. 또 다른 방법은 char *에 대한 포인터를 캐스팅하고, GDB는 문자열로 출력합니다 : 다루기 훨씬 간단 표현, 반대로 명령의 일반적인 구성 (대한

(gdb) print (char *) 0xADDR 

), 두 가지 접근법이 있습니다. 둘 다 아프다.

오래된 학교 방법은 로깅과 shell의 조합을 사용하는 것입니다. 당신이하는 일은 set logging과 그 부속 명령을 사용하여 출력을 파일에 기록하는 것입니다. 그런 다음 shell을 사용하여이 파일을 새 gdb 스크립트로 다시 작성합니다. 마지막으로 source 결과 파일을 사용하여 원하는 명령을 실행할 수 있습니다.

새 학교 접근법은 원하는대로하는 맞춤식 명령을 Python으로 작성하는 것입니다. 그것이 정말로 원하는 경우 일반적인 구성 명령을 쓸 수 있습니다.

관련 문제