摘要: 在C语言编程中,我们几乎不可能看见有人将一个结构体变量作为参数进行传递,因为效率太低了。本文尝试从反汇编的角度给出其中的缘由。 对于C语言来说,所有的参数传递都是值传递。如果一个变量为指针,那么传递的就是指针变量的值(即某个内存地址)。 那么,如果一个参数是结构体变量(包括多个成员),怎么从call 阅读全文
posted @ 2017-01-19 18:51 veli 阅读(1141) 评论(0) 推荐(0)
摘要: 在C语言中,如果我们要访问一个数组的某个下标对应的元素,通常的写法是a[i]。但从汇编的角度看,写成i[a]一点问题都没有。 下面通过代码给出证明。 o foo1.c o foo2.c o foo3.c o 编译和运行 o 反汇编后diff 1) foo1.gdb.out 2) foo2.gdb.o 阅读全文
posted @ 2017-01-19 10:47 veli 阅读(787) 评论(0) 推荐(0)
摘要: 如果我们定义一个有符号整数 int a = 0x80000000; 然后执行 a = a >> 1; 那么a将变为0xc0000000; 我们再定义一个无符号整数 unsigned int b = 0x80000000; 然后执行 b = b >> 1; 那么b则将变为0x40000000; 为什么 阅读全文
posted @ 2017-01-19 09:43 veli 阅读(11172) 评论(1) 推荐(2)