10.2 通过编译器输出汇编语言的源代码

除了将本地代码进行反汇编这一方法外,通过其他方式也可以获取汇编语言的源代码

大部分C语言编译器,都可以把利用C语言编写的源代码转换成汇编语言的源代码,而不是本地代码。利用该功能,就可以对C语言的源代码和汇编语言的源代码进行比较研究。笔者在学生时代的报告中,使用的便是该功能。Borland C++中,通过在编译器的选项中指定“-S”,就可以生成汇编语言的源代码了。大家也可以实际尝试一下。
用Windows的记事本等文本编辑器编写如代码清单10-1所示的C语言源代码,并将其命名为Sample4.c进行保存。

10.2 通过编译器输出汇编语言的源代码

 10.2 通过编译器输出汇编语言的源代码

 C语言源文件的扩展名,通常用“.c”来表示。

该程序是由返回参数的两个整数值之和的AddNum函数和调用AddNum函数的MyFunc函数构成的。因为没有包含程序运行起始位置的main函数部分,这种情况下直接编译是无法运行的。

①通过解析可执行文件得到源代码的方式称为“反汇编”或“反编译”,也称为“反向工程”。
②AddNum函数仅仅返回两个参数值的相加结果。在实际的编程中,这种函数是不需要的。为了说明函数调用的机制,这里特意使用了这种简单的函数。

③在命令提示符上运行的程序中,main函数位于程序运行起始位置。而在Windows上运行的程序中,WinMain函数位于程序运行起始位置。程序运行起始位置也称为“入口点”。

由Windows开始菜单启动命令提示符,把当前目录变更到Sample4.c保存的文件夹后,输入下面的命令并按下Enter键。bcc32是启动Borland C++编译器的命令。“-c”选项指的是,仅进行编译而不进行链接^。“-S”选项被用来指定生成汇编语言的源代码。
bcc32 -c -S Sample4.c
作为编译的结果,当前目录下会生成一个名为Sample4.asm的汇编语言源代码。汇编语言源文件的扩展名,通常用“.asm”来表示。下面就让我们使用记事本来看一下Sample4.asm的内容。可以发现,C语言的源代码和转换成汇编语言的源代码是交叉显示的。在该汇编语言代码中,分号(;)以后是注释。由于C语言的源代码变成了注释,因此就可以直接对Sample4.asm进行汇编并将其转换成本地代码了(代码清单10-2)。

10.2 通过编译器输出汇编语言的源代码

 10.2 通过编译器输出汇编语言的源代码

 

 ①当前目录指的是当前正在打开的目录(文件夹)。在命令提示符下对C语言的源文件进行编译时,该文件所在的目录必须是当前目录,所以有时候就需要变换当前目录。变换当前目录时,只需在命令提示符中的“CD”后面空上一个半角空格,然后加上需要跳转的目录,再按下回车即可。例如,如果要将Test指定为当前目录的话,只需输入CD Test然后按下回车键即可。CD是Change Dirctory的略称。

②链接是指把多个目标文件结合成1个可执行文件。

原文链接: https://www.cnblogs.com/ttmeng/p/17119675.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    10.2 通过编译器输出汇编语言的源代码

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/318045

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月16日 下午2:57
下一篇 2023年2月16日 下午2:58

相关推荐