摘要:这篇随笔源自今天看的这篇文章http://www.cnblogs.com/bluesea147/archive/2012/05/19/2508208.html1. 如何修改函数返回地址今天主要写测试程序思考和验证了一下这个问题,先看一下这个C程序 1 #include <stdio.h> 2 void foo(){ 3 int a, *p; 4 p = (void*)((long)&a + 12); 5 *p += 20; 6 } 7 int main(){ 8 foo(); 9 printf("First pri...
阅读全文
摘要:1。大端小端的一个测试程序在之前一篇文章中有提到,下面是写的一个测试程序,可以用来查看一个机器是大端还是小端表示 1 #include<stdio.h> 2 typedef unsigned char * bytePointer; 3 void show_bytes(bytePointer start, int size){ 4 printf("start address : %p\nsize : %d\n", start, size); 5 for (int i = 0; i < size; i++){ 6 printf("address :
阅读全文
摘要:1, cmp, jmp指令, 先看几个C中的循环 1 int sum(int* p, int size){ 2 int sum = 0; 3 for (int i = 0; i < size; i++){ 4 sum += *(p+i); 5 } 6 return sum; 7 } 8 int sum1(int* p, int size){ 9 int sum = 0;10 int i = 0;11 do{12 sum += *(p+i);13 i++;14 }while(i < s...
阅读全文
摘要:i386的几个寄存器 : segment registers先暂时不管了, 弄清楚, 其作用是不是跟IA32, 或IA64有关GAS的所有指命后面都带个字符后缀, 表操作数的大小, b, w, l分别是 8位, 16位, 32位, l也表示8字节的双精度浮点数, 另外我在自己的电脑上生成.s时看到了movq, pushq %rbx, %rbx表示64位的寄存器引用,这是在Intel 64 architecture中才有的,q指的是(quadword registers)通用寄存器就是整数寄存器, 用来存整数, 当然可以把它看作指针, 看怎么解析了 前6个比较通用, 后两个%ebp, %es..
阅读全文