1

我从 objdump 获得以下信息。这是 gcc 为 IA32 编译的 C 代码。

08048e9a <my_func>:
8048e9a:    55                      push   %ebp
8048e9b:    89 e5                   mov    %esp,%ebp
8048e9d:    83 ec 48                sub    $0x48,%esp
8048ea0:    89 5d f4                mov    %ebx,-0xc(%ebp)
8048ea3:    89 75 f8                mov    %esi,-0x8(%ebp)
8048ea6:    89 7d fc                mov    %edi,-0x4(%ebp)
8048ea9:    8d 5d d0                lea    -0x30(%ebp),%ebx
8048eac:    89 5c 24 04             mov    %ebx,0x4(%esp)
8048eb0:    8b 45 08                mov    0x8(%ebp),%eax
8048eb3:    89 04 24                mov    %eax,(%esp)
8048eb6:    e8 52 04 00 00          call   804930d <read_num>
8048ebb:    8d 7d dc                lea    -0x24(%ebp),%edi
8048ebe:    be 00 00 00 00          mov    $0x0,%esi
8048ec3:    8b 03                   mov    (%ebx),%eax
8048ec5:    3b 43 0c                cmp    0xc(%ebx),%eax
8048ec8:    74 05                   je     8048ecf <my_func+0x35>
8048eca:    e8 fc 03 00 00          call   80492cb <other_func>
8048ecf:    03 33                   add    (%ebx),%esi

我有兴趣找出在线比较的值8048ec5在 gdb 中,我可以进入这一行,我可以从中%eax很好地阅读,info registers但我该如何阅读0xc(%ebx)?这意味着0xc偏移%ebx0xc + %ebx

4

1 回答 1

2

%ebx + 0xc它指的是内存中地址处的 32 位值。

于 2013-01-25T07:50:03.310 回答