事情的经过是这样的,博主在用C写一个简单的业务时使用递归,由于粗心而忘了写return。结果发现返回的结果依然是正确的。经过半小时的反汇编调试,证明了我的猜想,现在在博客里分享。也是对C语言编译原理的一次加深理解。
引子:
首先我想以一道题目引例,比较能体现出问题。
例1:
#include
/**
函数功能:用递归实现位运算加法
*/
int Add_Recursion...
分类:
编程语言 时间:
2016-04-18 20:48:19
阅读次数:
430
编写涉及系统特性的一些底层程序,特别是ShellCode,不可避免地要采用直接编写汇编代码的方式。 在目标平台为x86模式时,可以直接使用内联汇编,这个很多人都比较熟悉了,也非常地方便。 但是当目标平台为x64时,微软不再允许直接内联汇编了,这给我们编程造成了一些不便。 怎么解决这个问题呢? 一种办 ...
分类:
其他好文 时间:
2016-04-10 10:13:23
阅读次数:
241
原文链接:http://www.orlion.ga/776/ 用C写的程序效率可能不如汇编,而且有些平台相关的指令必须手写,例如x86是端口I/O,而c语言就没有这个概念,所以in/out指令必须用汇编来写。 gcc提供了一种扩展写法可以在C代码中试用内联汇编,最简单的格式是__asm__("ass ...
分类:
其他好文 时间:
2016-04-03 21:51:14
阅读次数:
158
首先,先看一下mdk下的混合编程的基本方法: 使用如上方法就可以进行混合编程了。 但是要特殊注意一点,个人感觉这个是直接调用一个代码段,并非一个函数,因为他不会保护调用这个代码段之前的现场。比如: 在调用上面这个代码段之前,先定义一个num变量,供下面使用,如下: 而根据mdk的c语言转化成的汇编,...
分类:
其他好文 时间:
2016-03-08 21:32:57
阅读次数:
150
1.移植性差,假设是软件项目建议不要用。假设希望一段程序仅在单一设备上执行而且效率极高,能够使用内联汇编。比方。单片机开发。 2. 。。。。。。持续更新中。。。。。。
分类:
编程语言 时间:
2016-01-30 13:42:27
阅读次数:
139
GCC内联汇编(INLINE ASSEMBLY) 什么是内联汇编(Inline assembly)? 1、这是GCC对C语言的扩张,就是在C代码里面去写汇编代码 2、可以直接在C的语句中插入汇编指令 有何用处? 1、C语言不足以完成所有CPU的指令, 特别是有一些特权指令,比如加载gdt表...
分类:
其他好文 时间:
2016-01-24 18:14:26
阅读次数:
181
汇编指令:Push是四个字节对齐的,因此每次压入四个字节。_asm关键字用于调用内联汇编程序,并且可以在c/c++语句中出现。它不能单独出现,必须后接汇编指令。如果其后面不接大括号,那么表示这行的其余部分是一条汇编语句。leaeax,shellcode:向eax中加入有效地址。Xor,表示..
分类:
其他好文 时间:
2015-12-03 11:52:40
阅读次数:
228
1. 寄存器约束2. 内存约束3. 立即数约束4. 通用约束
分类:
其他好文 时间:
2015-08-03 14:16:43
阅读次数:
265
参考资料:1、Linux 中 x86 的内联汇编2、__asm__ __volatile__内嵌汇编用法简述3、第19章汇编与C之间的关系4、AT&T inline Assembly Constraint5、Assembler Instructions with C Expression Opera...
分类:
其他好文 时间:
2015-07-25 19:55:21
阅读次数:
161