2012-04-26 14 views
6

gccコンパイラの動作を理解するために、アセンブリ内のcプログラムをデバッグしています。 $ 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

レジスタの読み取り/設定には、pおよびsetコマンドを使用する必要があります。レジスタの名前はマシンごとに異なります。 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 
関連する問題