• att与intel风格对照实例


    估计很多朋友都和我一样,多年来习惯intel的汇编风格。可是难免遇到风格炯异的att代码。怎么办?顶着上吧!

    怎么上?个人觉得有intel汇编基础的朋友不必循常规专门去学习att,去查att手册。用gdb使用两种风格反汇编同一段代码,对照一看就能明白其中的差异。

    gdb中有两个命令用于查询和切换反汇编的显示风格

    查询当前反汇编格式:show disassembly-flavor

    设置反汇编格式为intel(att):set disassembly-flavor intel(att)

    下面实例一段代码对照两种风格

      att                 intel

    push  %ebp          push  ebp          ;att寄存器名前加%

    mov   %esp,%ebp       mov  ebp,esp        ;源操作数与目的操作数顺序与intel相反

    sub   %0x68,%esp      sub  esp,0x68        ;分配0x68字节的局部变量空间

    ;下面是带偏移地址的寄存器间接寻址,[]变(),偏移写在括号外面。

    ;偏移可以为负。比如 mov -0x10(%ebp),%eax 相当于 mov eax,DWORD PTR[ebp-10]

    mov  0x10(%ebp),%eax    mov  eax,DWORD PTR [ebp+0x10]

    mov  %eax,-0x48(%ebp)   mov  DWORD PTR [ebp-0x48],eax  ;将参数赋值给局部变量

    ...

    ;att里的l,w,b用来表达操作属性的限定符,l是长字节(4字节), w是双字节,b是单字节.

    ;加在命令的后边,相当于intel中的dword ptr,word ptr,byte ptr

    ;att里立即数前要加$,如下面的$0x0

    movl  $0x0,-0x28(%ebp)   mov  DWORD PTR [ebp-0x28],0x0
     
    ...

    call   0x406c4c         call    0x406c4c  ;不变

    ...

    leave               leave         ;不变

    ret                ret           ;不变

    如果我哪天赚钱了,不会捐慈善, 做个纯投入的游戏公司吧, 只做好玩的游戏, 为了可怜的中国玩家, 为了曾经热血过的青春岁月, 为了曾经追逐过的中国游戏梦。
  • 相关阅读:
    ORACLE
    Android adb.exe程序启动不起来,如何处理
    [转]access 标准表达式中数据类型不匹配
    尝试加载 Oracle 客户端库时引发 BadImageFormatException。问题记录
    ORACLE 监听配置
    Eclipse中JSP生成的class文件去了哪里?
    1、eclipse
    定时提醒
    【转】oracle定制定时执行任务
    jquery mobile开发中页面跳转后js不执行的问题
  • 原文地址:https://www.cnblogs.com/billin/p/2194214.html
Copyright © 2020-2023  润新知