使用 GDB 进行调试

2021-07-17  本文已影响0人  wjundong

实例

.section .data

output:
    .ascii "The processor Vender ID is 'xxxxxxxxxxxx'\n"

.section .text
.globl _start

_start:
    nop
    // 获取 CPU ID
    movl $0, %eax
    cpuid
    
    // 将 CPU ID 填充到 output 的占位符部分
    movl $output, %edi
    movl %ebx, 28(%edi)
    movl %edx, 32(%edi)
    movl %ecx, 36(%edi)

    // 系统调用, 显示 CPUID
    movl $4, %eax
    movl $1, %ebx
    movl $output, %ecx
    movl $42, %edx
    int $0x80
    movl $1, %eax
    movl $0, %ebx
    int $0x80

    // 系统调用, 返回程序执行结果
    movl $1, %eax
    movl $0, %ebx
    int $0x80
    ret

编译链接

  1. 汇编器编译
    as demo.s -32 -gstabs 
    ld ./a.out demo -m elf_i386 
    
  2. gcc 编译
    gcc demo.s -o demo -m32 -g
    

使用 gdb 调试需要在as编译时加入参数 -gstabs 或者 gcc 加入 -g.

调试

gdb ./demo

在 gdb 中执行 run 命令运行程序:

(gdb) run
Starting program: /home/shino/code/ass/a.out 
The processor Vender ID is 'GenuineIntel'
[Inferior 1 (process 3031) exited normally]
(gdb)

可以看到程序正常执行并返回, gdb 调试常用命令如下

上一篇 下一篇

猜你喜欢

热点阅读