【问题标题】:map c language into assembly language [closed]将c语言映射到汇编语言[关闭]
【发布时间】:2016-12-04 00:50:55
【问题描述】:

我是 c 语言的新手,想建立将 c 语言映射到汇编语言的直觉,这样当我看到 c 代码时,我就能对堆栈、寄存器、内存、代码的工作方式有深刻的了解。看过几本汇编语言书籍,主要关注汇编语法,而不是c和汇编的关系。有谁知道我在哪里可以找到这样的关于 c 和汇编语言之间映射的书。

【问题讨论】:

  • 没有“the map”,不同的编译器做的不一样,甚至同一个编译器在不同的设置下做的也不一样
  • C 不需要堆栈,也不需要寄存器。

标签: c assembly


【解决方案1】:

我不知道这样的书是否存在(如果存在,它很可能是一本关于编译器的书)。但是,有一个更简单的解决方案:尝试一下。

编写一些 C 代码,然后用调试符号编译它(这些指令假定 linux):

gcc foo.c -o foo

然后,使用调试器:

gdb ./foo
break MyFunction
run
disass

这将在MyFunction 上设置一个断点,然后运行程序直到它到达该断点。 disass 将打印该函数的程序集。您可以使用stepi 一次执行一条指令,或使用next 一次执行一条C 行。

【讨论】:

  • 或者,运行gcc -S foo.c 让编译器直接生成程序集文件(这可能会在程序集文件中留下更多关于映射的信息)。