免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2141 | 回复: 8
打印 上一主题 下一主题

汇编改成AT&T汇编 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-11-22 15:13 |只看该作者 |倒序浏览
.globl        rtsetjmp
        .type        rtsetjmp,@function
        .hidden        rtsetjmp
        .align        16
rtsetjmp:
        /* Save registers.  */
        movq %rbx, (JB_RBX*(%rdi)
        movq %rbp, (JB_RBP*(%rdi)
        movq %r12, (JB_R12*(%rdi)
        movq %r13, (JB_R13*(%rdi)
        movq %r14, (JB_R14*(%rdi)
        movq %r15, (JB_R15*(%rdi)
        leaq 8(%rsp), %rdx        /* Save SP as it will be after we return.  */
        movq %rdx, (JB_RSP*(%rdi)
        movq (%rsp), %rax        /* Save PC we are returning to now.  */
        movq %rax, (JB_PC*(%rdi)
        .size        rtsetjmp,.-rtsetjmp

上面是一段glibc的汇编代码,想要改成AT&T的,查了AT&T的格式,不过还是不会写。请指教!

论坛徽章:
0
2 [报告]
发表于 2010-11-22 15:24 |只看该作者
再发一下
        .globl        rtsetjmp
        .type        rtsetjmp,@function
        .hidden        rtsetjmp
        .align        16
rtsetjmp:
        /* Save registers.  */
        movq %rbx, (JB_RBX*(%rdi)
        movq %rbp, (JB_RBP* (%rdi)
        movq %r12, (JB_R12*  (%rdi)
        movq %r13, (JB_R13* (%rdi)
        movq %r14, (JB_R14* (%rdi)
        movq %r15, (JB_R15* (%rdi)
        leaq 8(%rsp), %rdx        /* Save SP as it will be after we return.  */
        movq %rdx, (JB_RSP* (%rdi)
        movq (%rsp), %rax        /* Save PC we are returning to now.  */
        movq %rax, (JB_PC* (%rdi)
        .size        rtsetjmp,.-rtsetjmp

论坛徽章:
0
3 [报告]
发表于 2010-11-22 15:30 |只看该作者
  1.         .globl        rtsetjmp
  2.         .type        rtsetjmp,@function
  3.         .hidden        rtsetjmp
  4.         .align        16
  5. rtsetjmp:
  6.         /* Save registers.  */
  7.         movq %rbx, (JB_RBX*8)(%rdi)
  8.         movq %rbp, (JB_RBP*8)(%rdi)
  9.         movq %r12, (JB_R12*8)(%rdi)
  10.         movq %r13, (JB_R13*8)(%rdi)
  11.         movq %r14, (JB_R14*8)(%rdi)
  12.         movq %r15, (JB_R15*8)(%rdi)
  13.         leaq 8(%rsp), %rdx        /* Save SP as it will be after we return.  */
  14.         movq %rdx, (JB_RSP*8)(%rdi)
  15.         movq (%rsp), %rax        /* Save PC we are returning to now.  */
  16.         movq %rax, (JB_PC*8)(%rdi)
  17.         .size        rtsetjmp,.-rtsetjmp
复制代码

论坛徽章:
0
4 [报告]
发表于 2010-11-22 16:38 |只看该作者
SOS,哪个大侠帮帮忙!

论坛徽章:
0
5 [报告]
发表于 2010-11-23 09:21 |只看该作者
自己写了一个,不过不对
  1. #define rtsetjmp(env)                            \
  2. {                                                \
  3.         register int ret;                            \
  4.                                                  \
  5.         asm volatile (  "movq %%rbx, (%%rdi)\n\t"    \
  6.                                         "movq %%rbp, 8(%%rdi)\n\t"   \
  7.                                         "movq %%r12, 16(%%rdi)\n\t"  \
  8.                                         "movq %%r13, 24(%%rdi)\n\t"  \
  9.                                         "movq %%r14, 32(%%rdi)\n\t"  \
  10.                                         "movq %%r15, 40(%%rdi)\n\t"  \
  11.                                         "leaq 8(%%rsp), %%rdx\n\t"   \
  12.                                         "movq %%rdx, 48(%%rdi)\n\t"  \
  13.                                         "movq (%%rsp), %%rax\n\t"    \
  14.                                         "movq %%rax, 56(%%rdi)\n\t"  \
  15.                 : "=a" (ret)                     \
  16.                                 : "d" (env));                    \
  17.                                                  \
  18.          ret;                                        \
  19. }
复制代码

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
6 [报告]
发表于 2010-11-23 09:32 |只看该作者
这段代码啥意思?

论坛徽章:
0
7 [报告]
发表于 2010-11-23 10:03 |只看该作者
是GLIBC的setjmp函数。

论坛徽章:
0
8 [报告]
发表于 2010-11-23 10:05 |只看该作者
用于保存当前的context,以后再longjmp的时候进行跳转。我是这么理解的

论坛徽章:
0
9 [报告]
发表于 2010-11-25 09:56 |只看该作者
自己搞定了,贴出来大家看看吧,GLIBC的setjmp
  1. #include <bits/setjmp.h>


  2. #define rtsetjmp(env)                           \
  3. ({                                              \
  4.      int ret;                                   \
  5.                                                 \
  6. __asm__ __volatile__ (  "movq %%rbx, (%1)\n\t"      \
  7.                     "movq %%rbp, 8(%1)\n\t"     \
  8.                     "movq %%r12, 16(%1)\n\t"    \
  9.                     "movq %%r13, 24(%1)\n\t"    \
  10.                     "movq %%r14, 32(%1)\n\t"    \
  11.                     "movq %%r15, 40(%1)\n\t"    \
  12.                     "leaq (%%rsp), %%rdx\n\t"   \
  13.                     "movq %%rdx, 48(%1)\n\t"    \
  14.                     "movq -8(%%rsp), %%rax\n\t" \
  15.                     "movq %%rax, 56(%1)\n\t"    \
  16.                 : "=S" (ret)                    \
  17.                 : "D" (env)                     \
  18.                 : "memory", "cc","cx");         \
  19.      ret;                                       \
  20. })
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP