ELF 文件中的变量大小与 GDB 报告的大小不同?

Variable size in ELF file is different from size reported by GDB?

ELF symtab table 报告我的变量大小为 16。特别是,在 运行 readelf -s mybinary 之后,我看到以下输出:

Num:    Value  Size Type    Bind   Vis      Ndx Name
83: 0804a718    16 OBJECT  LOCAL  DEFAULT   25 myVar

但是,当我打开 GDB 检查 myVar 的大小时,我看到以下输出:

print sizeof(myVar)
 = 4

我不确定这种差异是从哪里产生的。对于某些背景,我使用的是x86-32,并且我无法访问源文件,所以我不知道myVar的实际类型。

您必须使用旧的 GDB 版本(早于 8.1)。

来自 GDB 新闻文件:

*** Changes in GDB 8.1
...
  GDB no longer assumes functions with no debug information return
  'int'.
...
  Similarly, GDB no longer assumes that global variables with no debug
  info have type 'int', and refuses to print the variable's value
  unless you tell it the variable's type:

    (gdb) p var
    'var' has unknown type; cast it to its declared type
    (gdb) p (float) var
     = 3.14

正如文字所说,在 8.1 之前,GDB 将任何没有调试信息的变量视为具有 int 类型,并且 sizeof(int) 在您的系统上是 4。

Online version of the NEWS 的文字略有不同:

GDB no longer makes assumptions about the type of symbols without
debugging information to avoid producing erroneous and often confusing results;

P.S.

I already tried this. Neither gives any extra information

提问时,提供所有相关信息并说明您已经尝试过的内容会有所帮助。

说明您使用的 GDB 版本也会有所帮助。