gdb显示异常退出码咨询:为何显示033而非预期的27
GDB显示的进程退出码与实际不一致的原因
我编写了以下汇编代码:
section .data .section .text .globl _start _start: movl $1,%eax mov $27,%ebx int $0x80
将其编译生成可执行文件后导入GDB运行,GDB输出:
[Inferior 1 (process 13321) exited with code 033]
但预期的退出码应该是27,而且直接运行该可执行文件后执行echo $?,输出确实是27。为什么GDB会有这种显示差异?
这是因为GDB默认以八进制格式显示进程的退出码,而shell的$?变量默认以十进制格式输出退出码。
你看到的033是八进制表示,转换成十进制就是27——和直接运行后得到的结果完全一致。八进制033的计算方式为:3*8^1 + 3*8^0 = 24 + 3 = 27,完全符合预期的退出值。
如果想让GDB用十进制显示退出码,可以在GDB中执行命令:
set output-radix 10
之后再运行程序,GDB就会直接显示十进制的退出码了。
内容的提问来源于stack exchange,提问作者user16713791
相关产品推荐
相关产品推荐

