如何将c语言程序转成汇编语言程序。

如题,高手赐教,感激不尽。

如果是VC则在编译器命令行参数再加 /FA 则会生成汇编代码。如果参数是 /FAs 则会同时将源码和汇编代码。
/FA 程序集代码;.asm
/FAc 机器码和程序集代码;.cod
/FAs 源代码和程序集代码;.asm
/FAcs 机器码、源代码和程序集码;.cod

/Fa的用法

/Fa 为编译中的每个源代码文件创建一个源文件.asm。
/Fa文件名 将文件名.asm 放到当前目录中。仅在编译单个源代码文件时有效。
/Fa文件名.扩展名 将文件名.扩展名放到当前目录中。仅在编译单个源代码文件时有效。
/Fa目录\ 为编译中的每个源代码文件创建一个源文件.asm,并将其放到指定目录中。请注意必须有后缀反斜杠。只允许使用当前磁盘上的路径。
/Fa目录\文件名 将文件名.asm 放到指定目录中。仅在编译单个源代码文件时有效。
/Fa目录\文件名.扩展名 将文件名.扩展名放到指定目录中。仅在编译单个源代码文件时有效。

如果你是用gcc 或 g++编译器,如dev c++则加入命令行参数 -S 即可

参考资料:MSDN

温馨提示:答案为网友推荐,仅供参考
第1个回答  2006-11-09
问题分两个部分答:
..................................................
第一:仅仅是需要看C语言的每一句执行与汇编语言的对照,可如下来做:
举例:最简单的C程序:
void main()
{
int a = 1,b = 2,c;
c = a+b;
}
在VC中输入程序:
点击菜单[编译]->[开始调试]->[Step Into] 或直接按[F11]进入单步调试,
然后再点击[调试工具栏上的 Disassembly]即显示汇编语言对照.就可以
看到以上最简单的C程序的对应的汇编语言.看到的情况如下:
3: int a = 1,b = 2,c;
00401028 C7 45 FC 01 00 00 00 mov dword ptr [ebp-4],1
0040102F C7 45 F8 02 00 00 00 mov dword ptr [ebp-8],2
4: c = a+b;
00401036 8B 45 FC mov eax,dword ptr [ebp-4]
00401039 03 45 F8 add eax,dword ptr [ebp-8]
0040103C 89 45 F4 mov dword ptr [ebp-0Ch],eax
...................................................
第二:
用IDA 3.74反汇编DOS下的可执行文件和WIN32的NE,PE格式的文件。
在反汇编C语言变的文件时,可以自动辨认出 C语言的库文件。
可找到_main()函数一下子就找到了,能识别VC5.0编写的程序,
识别MMX指令。
下载具体地址为:202.115.9.33\incoming\program\ida
大约为10兆,安装完后,将patch.exe拷到安装目录下,执行一遍
即可去掉64k内存的限制。
第2个回答  2020-02-27
看看汇编怎么算的,然后自己用c重写
比较快点
第3个回答  2006-11-09
先把C语言编译,生成.exe文件,然后反汇编,具体怎么反汇编,不是很清楚,查下资料吧。
相似回答