2015-02-01 8 views
4
I want to use gdb to see my GDTR/LDTR/TTR and segment register 

invisiable 부분 (86) 그래서 GDB에 나는 "P/X $의 GDTR"를 입력 .... 등 하지만 결과는 을 "= 값이 정수로 변환 할 수 없습니다 $ 6"및 gdb를 I에 "P/X $ CS"를 입력 유일한 결과는 CS, 단지 visiable 일부 답변에 대한gdb에서 gdtr 및 gdt 설명자를 인쇄 할 수 있습니까?

can anyone tell me how to view these value?? 

감사

+0

나는 그렇게 생각하지 않습니다. – Jester

답변

4

GDB는 GDB가 수 있다면 이러한 기능은 다음이 기능은 일하는 것이 있었다면 SGDT 명령을 사용하여 GDTR을 읽습니다. 이것은 GDB가 링 0에서 실행되어야한다는 것을 의미합니다.

Linux 나 Windows, Mac OS에서는 링 (ring) 0에서 실행중인 응용 프로그램 (GDB와 같은)이 허용되지 않으므로 로컬 응용 프로그램에서는 작동하지 않습니다.

원격 디버깅을 사용하는 경우 (RS-232 또는 TCP/IP 연결을 사용하여 다른 컴퓨터 또는 가상 컴퓨터를 디버깅 함) 원격 디버깅에 사용되는 기본 프로토콜은 GDTR을 읽는 패킷을 지정하지 않습니다.

원격 디버깅의 경우 백엔드 (디버깅 된 컴퓨터의 코드)는 "monitor"명령을 사용하여 비표준 기능을 정의 할 수 있습니다. "monitor readspr gdtr"과 같은 명령을 사용하여 이러한 기능을 구현할 수 있습니다.

+0

그러나 LDT에 액세스하는 것과 마찬가지로 GDT를 읽는 시스템 호출을 금지하지 않습니다. 'gdb'는 링 0에서 실행될 필요가 없으며, 단지 syscall을 사용할 수 있습니다. 따라서 첫 번째 단락은 유효하지 않습니다. – Jester

+0

이것은 정확합니다. 그러나 나는 어떤 OS도 그러한 시스템 콜을 제공하지 않을 것이라고 생각한다. 이론적으로 커널 드라이버 (예를 들어 Linux 용)를 작성하면/dev/gdtread를 통해 GDT를 읽을 수 있습니다 ...하지만 아무도 그러한 기능을 구현하지 못할 것이라고 생각합니다! –