• 学汇编的时候可以拿IDA之类的反汇编工具辅助学习,再用gdb或者IDA动态调试,跟踪每条指令的 执行结果。都不难


    作者:潘安仁
    链接:https://www.zhihu.com/question/40720890/answer/87926792
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    建议先去了解GCC的内联汇编的格式,我之前也没接触过GCC的内联汇编,都是看intel的汇编。临时找了一篇文章GCC内联汇编基础-zhuhefang2006-ChinaUnix博客,学习了一下。
    根据文章里的例子:

    书中第二行汇编可以翻译成intel的:
    lea eax,[eax+2*eax]
    也就是eax*3的意思,lea指令是一个取地址指令,具体可以去查手册,简单来说就是把右操作数的"["和"]"之间的值放到左操作数里,这里就是把eax+2*eax放到eax里。

    而第六行汇编其实是取指针指向的值的意思,也就是intel汇编的:
    mov eax,[edx+4*eax]
    意思是取内存地址edx+4*eax里的值,放到eax里。至于这个值是什么,我们是不知道的,所以书里也只写了个M[……]。
    如果把上条指令的mov变成lea:
    lea eax,[edx+4*eax]
    意思就是把edx+4*eax的值,放到eax里。

    学汇编的时候可以拿IDA之类的反汇编工具辅助学习,再用gdb或者IDA动态调试,跟踪每条指令的 执行结果。都不难。
  • 相关阅读:
    我的友情链接
    我的友情链接
    我的友情链接
    我的友情链接
    我的友情链接
    我的友情链接
    使用kubespray在国内安装Kubernetes(1)
    docker国内镜像拉取和镜像加速registry-mirrors配置修改
    docker pull很慢解决办法
    Docker 国内仓库和镜像
  • 原文地址:https://www.cnblogs.com/findumars/p/8672478.html
Copyright © 2020-2023  润新知