我想了解如何打印一個整數值(我看到它是x/d)但我錯過了一些東西。gdb調試整數打印信息
所以,我的代碼如下
1 #include <stdio.h>
2 main(){
3 int a;
4 int b;
5 int c;
6 int d;
7 int multiplied;
8 a = 5;
9 b = 6;
10 c = 7;
11 d = adding(a,b,c);
12 multiplied = multiply(a,b,c);
13 printf("The value of d is %d \n",d);
14 printf("The multiplied values are %d \n", multiplied);
15 }
16 int adding(a,b,c){
17 int e;
18 e = a+b+c;
19 return e;
20 }
21 int multiply(a,b,c){
22 int f = a*b*c;
23 return f;
24 }
//我-q編譯,我想打印變量的值(從它們的地址),所以......
(gdb) disassemble main
0x080483ed <+9>: mov DWORD PTR [esp+0x2c],0x5
0x080483f5 <+17>: mov DWORD PTR [esp+0x28],0x6
0x080483fd <+25>: mov DWORD PTR [esp+0x24],0x7
0x08048405 <+33>: mov eax,DWORD PTR [esp+0x24] <code>
我在main/multiply /添加了一些斷點,然後我試着做下面的事情。
我用 print $esp+0x24
和 (gdb) x/4d 0xbffff47c
但IM沒有得到正確的答案回來。
我用4d因爲我認爲一個整數是4個字節(或者可能再次缺少一些東西),但結果arent沒有顯示值5. 你能幫我嗎?感謝和廣發行的不良輸出/格式抱歉..認真我無法理解什麼是錯
(gdb) print $esp+0x2c
$2 = (void *) 0xbffff494
(gdb) print $esp+0x28
$3 = (void *) 0xbffff490
(gdb) print $esp+0x24
$4 = (void *) 0xbffff48c
(gdb) x/d 0xbffff494
0xbffff494: -1208180748
(gdb) x/d 0xbffff490
0xbffff490: -1208179932
(gdb) x/d 0xbffff48c
0xbffff48c: 134513881
這也主要在第一個斷點後ofcourse發生,實際上是相同的價值觀來了所有的時間,所有的斷點(除了主要之前...)
另一個有趣的事情,我發現是以下...我確定第一個值是垃圾。但是爲什麼當它應該打印實際值時,它認爲0x5是一個地址?
Breakpoint 1, main() at functioncalling.c:10
10 a = 5;
(gdb) x/s a
0xb7fc9ff4: "|M\025"
(gdb) cont
Continuing.
Breakpoint 3, adding (a=5, b=6, c=7) at functioncalling.c:21
21 e = a+b+c;
(gdb) x/s a
0x5: <Address 0x5 out of bounds>
「我用'print $ esp + 0x24'」 - 在程序中的哪一點?你真的應該顯示你使用的實際命令和他們的輸出。沒有這些信息,你的問題就無法得到解答。 –