C 是否同时检查两种不同格式(十进制和十六进制)的内存地址?

C 是否同时检查两种不同格式(十进制和十六进制)的内存地址?,c,gdb,C,Gdb,这是我的C代码 C:\Codes>gdb var -q Reading symbols from C:\Codes\var.exe...done. (gdb) list 1 #include<stdio.h> 2 3 int main() 4 { 5 int a = 9; 6 int b = 10; 7 int c = 11; 8 return 0; 9

这是我的C代码

C:\Codes>gdb var -q
Reading symbols from C:\Codes\var.exe...done.
(gdb) list
1       #include<stdio.h>
2
3       int main()
4       {
5           int a = 9;
6           int b = 10;
7           int c = 11;
8           return 0;
9       }
(gdb) 
变量a、b和c的内存地址

(gdb) info locals
a = 9
b = 10
c = 11
(gdb)
(gdb) print &a
$1 = (int *) 0x22ff4c

(gdb) print &b
$2 = (int *) 0x22ff48

(gdb) print &c
$3 = (int *) 0x22ff44
(gdb)
(gdb) x 0x22ff4c
0x22ff4c:       0x09
(gdb)

(gdb) x 0x22ff48
0x22ff48:       0x0a
(gdb)

(gdb) x 0x22ff44
0x22ff44:       0x0b
(gdb)
(gdb) x/d 0x22ff4c
0x22ff4c:       9

(gdb) x/d 0x22ff48
0x22ff48:       10

(gdb) x/d0x22ff44
0x22ff44:       11
(gdb)
检查变量a、b和c的十六进制内存地址值

(gdb) info locals
a = 9
b = 10
c = 11
(gdb)
(gdb) print &a
$1 = (int *) 0x22ff4c

(gdb) print &b
$2 = (int *) 0x22ff48

(gdb) print &c
$3 = (int *) 0x22ff44
(gdb)
(gdb) x 0x22ff4c
0x22ff4c:       0x09
(gdb)

(gdb) x 0x22ff48
0x22ff48:       0x0a
(gdb)

(gdb) x 0x22ff44
0x22ff44:       0x0b
(gdb)
(gdb) x/d 0x22ff4c
0x22ff4c:       9

(gdb) x/d 0x22ff48
0x22ff48:       10

(gdb) x/d0x22ff44
0x22ff44:       11
(gdb)
检查变量a、b和c的十进制内存地址值

(gdb) info locals
a = 9
b = 10
c = 11
(gdb)
(gdb) print &a
$1 = (int *) 0x22ff4c

(gdb) print &b
$2 = (int *) 0x22ff48

(gdb) print &c
$3 = (int *) 0x22ff44
(gdb)
(gdb) x 0x22ff4c
0x22ff4c:       0x09
(gdb)

(gdb) x 0x22ff48
0x22ff48:       0x0a
(gdb)

(gdb) x 0x22ff44
0x22ff44:       0x0b
(gdb)
(gdb) x/d 0x22ff4c
0x22ff4c:       9

(gdb) x/d 0x22ff48
0x22ff48:       10

(gdb) x/d0x22ff44
0x22ff44:       11
(gdb)
问题是,;是否可以在单个命令中以十六进制和十进制打印内存地址值

如果我能像这样输出,那将非常有帮助

Address   Variable  Dec Hex
0x22ff4c  a         9   0x09
0x22ff48  b         10  0x0a
0x22ff44  c         11  0x0b
您可以为此定义一个,尽管您将无法获得输出,但格式如下:

define my_x
  x $arg0
  x/d $arg0
end

除了ks1322的用户定义命令外, 这将添加一个GDB命令来打印出各种格式的表格 为vars添加多个参数以打印出所需的表应该不会太难

class Foo (gdb.Command):
      """dereference and print in various formats"""

      def __init__ (self):
        super (Foo, self).__init__ ("foo", gdb.COMMAND_USER, gdb.COMPLETE_SYMBOL)

      def invoke (self, arg, from_tty):
        ptr = gdb.parse_and_eval("&" + str(arg));
        val = ptr.referenced_value();
        print('0x%x 0x%x %d' % (ptr, val, val));

Foo ()
还有一份简短的记录

(gdb) source foo.py
(gdb) foo a
0x7fffffffdebc 0x9 9
(gdb) foo b
0x7fffffffdeb8 0xa 10
(gdb) foo c
0x7fffffffdeb4 0xb 11