免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: qiangtoucao121
打印 上一主题 下一主题

向高手请教AT&T汇编语法,谢谢 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2007-09-30 09:43 |只看该作者
老大,能给我简单的讲讲调试跟踪内核的方法吗?谢谢!

论坛徽章:
0
12 [报告]
发表于 2007-10-01 17:56 |只看该作者
原帖由 qiangtoucao121 于 2007-9-30 09:43 发表
老大,能给我简单的讲讲调试跟踪内核的方法吗?谢谢!


惭愧,偶不是 linux kernel 爱好者,没学习过 linux kernel,所以不了解 kernel 调试方法

不过,偶喜欢分析汇编代码:
  1.      push   %rbp
  2.         mov    %rsp,%rbp
  3.         push   %r15
  4.         mov    %r8,%r15                                   /* key */
  5.         push   %r14
  6.        lea    0x8(%rdi),%r14                           /* r14 = &q->task_list */
  7.        push   %r13
  8.        mov    %edx,%r13d                             /* r13d = nr_exclusive */
  9.        push   %r12
  10.        push   %rbx
  11.        sub    $0x8,%rsp           
  12.        mov    %esi,0xffffffffffffffd4(%rbp)      /* [rbp-40] = mode */
  13.        mov    %ecx,0xffffffffffffffd0(%rbp)      /* [rbp-48] = sync */
  14.        mov    0x8(%rdi),%rax                      /* rax = q->task_list */
  15.        cmp    %r14,%rax                            /* 判断是否回到头节点 */
  16.        mov    (%rax),%r12                        /* r12 = *q->task_list */
  17.        je     0xffffffff8013093e <__wake_up_common+94>
  18.        data16
  19.        data16
  20.        nop   
  21.        lea    0xffffffffffffffe8(%rax),%rdi                /* curr */
  22.        mov    0xffffffffffffffe8(%rax),%ebx   
  23.        mov    %r15,%rcx                                    /* key */
  24.        mov    0xffffffffffffffd0(%rbp),%edx          /* sync */
  25.        mov    0xffffffffffffffd4(%rbp),%esi            /* mode */
  26.        callq  *0xfffffffffffffff8(%rax)                     /* curr->func() */
  27.        test   %eax,%eax
  28.        je     0xffffffff80130932 <__wake_up_common+82>
  29.        and    $0x1,%ebx
  30.        je     0xffffffff80130932 <__wake_up_common+82>
  31.        dec    %r13d
  32.        nop   
  33.        je     0xffffffff8013093e <__wake_up_common+94>
  34.        mov    %r12,%rax                               /* rax = *q->task_list */
  35.        mov    (%r12),%r12                           / q->task_list = *q->task_list */
  36.        cmp    %r14,%rax                             /* 判断是否回到头节点 */
  37.        jne    0xffffffff80130910 <__wake_up_common+48>
  38.        add    $0x8,%rsp
  39.        pop    %rbx
  40.        pop    %r12
  41.       pop    %r13
  42.       pop    %r14
  43.       pop    %r15
  44.       leaveq
  45.       retq   
  46.       data16
  47.       data16
  48.       nop
复制代码

curr->func 被置为 0 时,就出现了以下的错误。

偶给你介绍一下 AMD64 的 ABI 几个特性:
1、7个通用寄存器(rdi,rsi,rdx,rcx,r8,r9 和 rax)依次用作函数传递参数。
2、rsp 及 rbp 用于管理堆栈
3、r10 及 r11 用于临时寄存器
4、5个通用寄存器(r12,r13,r14,r15 及 rbx)由被调用方保存
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP