compiler explorer 轻松从汇编角度理解代码

admin 2024年11月21日13:53:45评论108 views字数 1035阅读3分27秒阅读模式

介绍

compiler explorer 是一个交互式编译探索网站。用C、c++、c#、f#、Rust、Go、D、Haskell、Swift、Pascal、ispc、Python、Java或其他30多种支持的语言组件编辑代码,并查看代码在实时编译后的样子。

compiler explorer 轻松从汇编角度理解代码

声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途给予盈利等目的,否则后果自行承担!

compiler explorer 轻松从汇编角度理解代码

截止目前,star 16.4k

compiler explorer 轻松从汇编角度理解代码

优点

有在线版,国内可这直接访问 https://godbolt.org/
有github开源地址,可在本地搭建 https://github.com/compiler-explorer/compiler-explorer

可以从底层观察各个函数是如何构成的,程序是如何运行的。

C、C++、Java、Python都是高级语言,它们为了方便我们人理解,语法进行了很多人性化的操作,方便上手和理解。但随着时间推移,用的多了,项目复杂后,我们可能会变得疑惑,这么写和那么些有什么区别,为什么这么写有问题。

有些东西在高级语言上看不同的东西,其实在CPU看来是没有区别的。

比如 int i 和 int* p,在汇编代码层次,他们并没有区别,都是给一个栈地址赋值。

compiler explorer 轻松从汇编角度理解代码

对于想要入门逆向的人来说,用 compiler explorer 来了解高级语言和汇编之间的对应关系,为后续逆向汇编,从汇编反编译成高级语言也很有帮助。

案例:下面都是支持的语言
https://github.com/compiler-explorer/compiler-explorer/tree/main/examples

compiler explorer 轻松从汇编角度理解代码

推荐一本书:《CPU眼里的C/C++》,微信读书上也有

作者根据 compiler explorer 工具,分析了C/C++当中遇到的常见指令,比如指针变量和一般变量的区别,goto和if、for、while的区别。从底层的视角看,往往能解答很多我们在高级语言中看到的代码的疑惑。

让我印象最深刻的时候,是看 goto 和 for 的区别,这在C语言中是两个不同的指令,但在汇编层次,我们用 goto 构造指定的代码,然后到了CPU验证,汇编指令是没有任何区别的。

compiler explorer 轻松从汇编角度理解代码

还有就是 i++ 和 ++i 的区别。如果是在大学学过C语言,参加过考试的,一定会见过对这两种区别的考核,问最后的结果是多少。从C语言上看,可能不明所以,但到了汇编,具体过程就一目了然。

compiler explorer 轻松从汇编角度理解代码

原文始发于微信公众号(进击的HACK):compiler explorer 轻松从汇编角度理解代码

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年11月21日13:53:45
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   compiler explorer 轻松从汇编角度理解代码https://cn-sec.com/archives/3398728.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息