2012-04-26 3 views
6

어셈블리에서 c 프로그램을 디버깅하여 gcc 컴파일러의 작동 방식을 이해합니다. 내 $ fs 세그먼트 레지스터를 읽고 x/x $ fs를 사용하고 싶지만 메모리에 액세스 할 수 없다고 알려줍니다. i386 : 86_64에서 세그먼트, 범용 및 제어 레지스터를 포함하는 모든 레지스터에서 어떻게 읽을 수 있습니까?gdb로 모든 레지스터 값을 읽으려면 어떻게해야합니까?

답변

11

info registers 인쇄 출력 레지스터 값은 :

(gdb) info registers 
rax   0x7ffff7731ec8 140737344904904 
rbx   0x0 0 
rcx   0x0 0 
rdx   0x7fffffffd618 140737488344600 
rsi   0x7fffffffd608 140737488344584 
rdi   0x1 1 
rbp   0x0 0x0 
rsp   0x7fffffffd528 0x7fffffffd528 
r8    0x7ffff7730300 140737344897792 
r9    0x7ffff7dec250 140737351959120 
r10   0x7fffffffd390 140737488343952 
r11   0x7ffff73d0b50 140737341360976 
r12   0x400be0 4197344 
r13   0x7fffffffd600 140737488344576 
r14   0x0 0 
r15   0x0 0 
rip   0x402330 0x402330 <main> 
eflags   0x246 [ PF ZF IF ] 
cs    0x33 51 
ss    0x2b 43 
ds    0x0 0 
es    0x0 0 
fs    0x0 0 
gs    0x0 0 
(gdb) 
3

레지스터를 읽거나 설정하려면 pset 명령을 사용해야합니다. 레지스터의 이름은 각 시스템에 따라 다릅니다. info 레지스터를 사용하여 컴퓨터에서 사용되는 이름을 확인하십시오. 예제들에 대한 자세한 정보는 GDB 매뉴얼의 registers 섹션을 참조하십시오.

$fs 레지스터의 값을 인쇄하려면, 당신은이 작업을 수행 할 수 있습니다

(gdb) p/x $fs 
$1 = 0x0 

무엇 x 명령은 메모리를 검사한다 않습니다. 그러나 당신이 그것을 할 수없는 경우가 있습니다. 예를 들어, 주소가 가리키는 메모리가 보호 된 경우. 가상 주소 0x0에서 메모리를 검사하려고한다면, GDB는 분명히 예를 들어, 그렇게하기를 거부 :

(gdb) x/x $fs 
0x0: Cannot access memory at address 0x0 

그것이 도움이되기를 바랍니다. 행운을 빕니다! 당신은 내가 생각 요구하는 것입니다 나를 위해

+0

감사합니다. 나는 튜토리얼을 따르고 있었고 x/x $ reg를 사용하는 이유를 알지 못했다. 그것은 물건을 깨끗이합니다. –

9
info all-registers 

당신에게 FPU 레지스터 스택, XMM 레지스터를 포함한 모든 레지스터 값을 제공합니다.

(gdb) i all-r 
rax   0x2aaaaace62ce 46912498459342 
rbx   0x2aab18e71290 46914345570960 
rcx   0x2aaab2020d60 46912619285856 
rdx   0xffffffffffd934ee  -2542354 
rsi   0x2aab18ec7a40 46914345925184 
rdi   0xa  10 
rbp   0x2aab18e6f000 0x2aab18e6f000 
rsp   0x2aab18e6f000 0x2aab18e6f000 
r8    0xe  14 
r9    0x2aab18eb1f08 46914345836296 
r10   0x2aaab9085000 46912737136640 
r11   0x0  0 
r12   0x2aab18ec7170 46914345922928 
r13   0x477f3280  1199518336 
r14   0x7  7 
r15   0x2aaada787000 46913298132992 
rip   0x2aaaaae3b18e 0x2aaaaae3b18e <flt_fadd+4> 
eflags   0x283 643 
ds    0x0  0 
es    0x0  0 
fs    0x0  0 
gs    0x0  0 
st0   10  (raw 0x4002a000000000000000) 
st1   3  (raw 0x4000c000000000000000) 
st2   0  (raw 0x00000000000000000000) 
st3   0  (raw 0x00000000000000000000) 
st4   0  (raw 0x00000000000000000000) 
st5   0  (raw 0x00000000000000000000) 
st6   0  (raw 0x00000000000000000000) 
st7   0  (raw 0x00000000000000000000) 
fctrl   0x137f 4991 
fstat   0x7000 28672 
ftag   0xc0  192 
fiseg   0xaae3afe5  -1427918875 
fioff   0x2aaa 10922 
foseg   0x18e6ee48  417787464 
fooff   0x2aab 10923 
fop   0x704 1796 
xmm0   {f = {0x0, 0x6, 0x0, 0x0}}  {f = {0, 6.48876953, 0, 0}} 
xmm1   {f = {0x0, 0x0, 0x0, 0x0}}  {f = {0, 0, 0, 0}} 
xmm2   {f = {0x0, 0x1c0, 0x0, 0x0}}  {f = {0, 448, 0, 0}} 
xmm3   {f = {0x0, 0x1, 0x0, 0x0}}  {f = {0, 1.75, 0, 0}} 
xmm4   {f = {0x0, 0x0, 0x0, 0x0}}  {f = {0, 0, 0, 0}} 
xmm5   {f = {0x0, 0x0, 0x0, 0x0}}  {f = {0, 0, 0, 0}} 
xmm6   {f = {0x0, 0x0, 0x0, 0x0}}  {f = {0, 0, 0, 0}} 
xmm7   {f = {0x0, 0x0, 0x0, 0x0}}  {f = {0, 0, 0, 0}} 
xmm8   {f = {0x0, 0x0, 0x0, 0x0}}  {f = {0, 0, 0, 0}} 
xmm9   {f = {0x0, 0x0, 0x0, 0x0}}  {f = {0, 0, 0, 0}} 
xmm10   {f = {0x0, 0x0, 0x0, 0x0}}  {f = {0, 0, 0, 0}} 
xmm11   {f = {0x0, 0x0, 0x0, 0x0}}  {f = {0, 0, 0, 0}} 
xmm12   {f = {0x0, 0x0, 0x0, 0x0}}  {f = {0, 0, 0, 0}} 
xmm13   {f = {0x0, 0x0, 0x0, 0x0}}  {f = {0, 0, 0, 0}} 
xmm14   {f = {0x0, 0x0, 0x0, 0x0}}  {f = {0, 0, 0, 0}} 
xmm15   {f = {0x0, 0x0, 0x0, 0x0}}  {f = {0, 0, 0, 0}} 
mxcsr   0x1fa0 8096 
관련 문제