随笔分类 - ASM-学习
摘要:Big-endian 的内存顺序和数字的书写顺序是一致的,方便阅读理解。Little-endian 在变量指针转换的时候地址保持不变,比如 int64* 转到 int32*各有利弊,统一就好,目前看来是 little-endian成为主流了。 因为现在基本上遇不到PowerPC的服务器,所以我曾经比
阅读全文
摘要:留个爪,稍后学习选择编译器nasm?fasm?yasm?还是masm、gas或其他?前面三个是免费开源的汇编编译器,总体上来讲都使用Intel的语法。yasm是在nasm的基础上开发的,与nasm同宗。由于使用了相同的语法,因此nasm的代码可以直接用yasm来编译。yasm虽然更新较慢,但对nas...
阅读全文
摘要:有空自己也写一个学习笔记,先把参考文章记下了: http://www.cnblogs.com/aguncn/archive/2012/11/14/2769989.htmlhttp://www.cnblogs.com/aguncn/archive/2012/11/14/2769814.html htt
阅读全文
摘要:汇编语言--call和ret指令call和ret指令call和ret指令都是转移指令,它们都修改IP,或同时修改CS和IP。它们经常被共同用来实现子程序的设计。ret和retfret指令用栈中的数据,修改IP的内容,从而实现近转移;retf指令用栈中的数据,修改CS和IP的内容,从而实现远转移。CP...
阅读全文
摘要:摘要:虽然jmp指令提供了控制转移,但是它不允许进行任何复杂的判断。80x86条件跳转指令提供了这种判断。条件跳转指令是创建循环和实现其他条件执行语句,如if…endif的基本要素。条件跳转指令检查一个或多个标志位,判断它们是否匹配某个特殊条件(就像setcc指令):如果标志匹配成功,该指令就将控制...
阅读全文
摘要:32位CPU所含有的寄存器有:4个数据寄存器(EAX、EBX、ECX和EDX)2个变址和指针寄存器(ESI和EDI)2个指针寄存器(ESP和EBP)6个段寄存器(ES、CS、SS、DS、FS和GS)1个指令指针寄存器(EIP)1个标志寄存器(EFlags)----------------------...
阅读全文
摘要:Java的Reference感觉很象C++的指针,但是区别是本质的 他们相同之处在于都是含有一个地址,但是在Java中你无法对这个地址进行任何数学运算,并且这个地址你不知道,是Java Runtime分配给你的,它随时还要调整这个地址(After GC,Memory要Compact,这时候一个Obj
阅读全文
摘要:记下以后所有碰到使用数组名称时候的是是非非: int main(int argc, char* argv[]) { char x[3]="abc"; // 编译错误 char a[3]={'a','b','c'}; char b[3]; b=a; // 常指针不能赋值 return 0; }
阅读全文
摘要:一、汇编语言中PTR的含义及作用mov ax,bx ;是把BX寄存器“里”的值赋予AX,由于二者都是word型,所以没有必要加“WORD”mov ax,word ptr [bx];是把内存地址等于“BX寄存器的值”的地方所存放的数据,赋予ax。由于只是给出一个内存地址,不知道希望赋予ax的,是byt...
阅读全文
摘要:探索C++的底层机制 在看这篇文章之前,请你先要明白一点:那就是c++为我们所提供的各种存取控制仅仅是在编译阶段给我们的限制,也就是说是编译器确保了你在完成任务之前的正确行为,如果你的行为不正确,那么你休想构造出任何可执行程序来。但如果真正到了产生可执行代码阶段,无论是c,c++,还是pascal,
阅读全文
摘要:段寄存器是因为对内存的分段管理而设置的。16位CPU有四个段寄存器,其程序可同时访问四个不同含义的段,引用方面有如下规定:1. 取命令:段寄存器CS指向存放程序的内存段,IP是用来存放下条待执行的指令在该段的偏移量,把它们合在一起可在该内存段内取到下次要执行的指令。2. 取堆栈:段寄存器SS指向用于...
阅读全文
摘要:// Listing 8.9 - Demonstrates a stray pointer typedef unsigned short int USHORT; #include <iostream> int main() { USHORT * pInt = new USHORT; // 声明第一个
阅读全文
摘要:指针参数是如何传递内存的? 如果函数的参数是一个指针,不要指望用该指针去申请动态内存。如下示例中,Test函数的语句GetMemory(str, 100)并没有使str获得期望的内存,str依旧是NULL,为什么? void GetMemory(char *p, int num) { p = (ch
阅读全文
摘要:CPU的任务就是执行存放在存储器里的指令序列。为此,除要完成算术逻辑操作外,还需要担负CPU和存储器以及I/O之间的数据传送任务。早期的CPU芯片只包括运算器和控制器两大部分。到了近几年,为了使存储器速度能更好地与运算器的速度相匹配,又在芯片中引入了高速缓冲存储器。除了高速缓冲存储器之外的组成,大体...
阅读全文
摘要:this指针,通常是通过ecx传递;gcc是通过堆栈传递的,是最后一个被压栈。传递this指针是为了访问成员变量。除了虚函数,所有成员函数被编译之后都是全局函数。mov eax,[ecx] ; 将第一个成员赋给eaxadd eax,[ecx+4] ; 再用第一个成员函数的值加上4,可能就是第二个成员...
阅读全文
摘要:16位CPU所含有的寄存器有(见图2.1中16位寄存器部分):4个数据寄存器(AX、BX、CX和DX)2个变址和指针寄存器(SI和DI) 2个指针寄存器(SP和BP) ,32位CPU增加2个16位的段寄存器:FS和GS。4个段寄存器(ES、CS、SS和DS)1个指令指针寄存器(IP) 1个标志寄存器...
阅读全文
摘要:int* A = (int*)malloc(sizeof(int)*s); A[0]=11; A[1]=22; printf("A = %d %d\n", A[0], A[1]); // the same reason: s_fm_solution_t** fm_sol; fm_sol[index]
阅读全文
摘要:将指针作为函数传递时候的情况: 如果将外部指针p1传递给函数参数的时候,实际上生成了另一个局部指针p2,p1与p2自身的地址不同,但是p1与p2指向同一个内存地址和对象。此时如果 p2 = new int(); 的时候,p2指向了另一个对象。但p1却没有受到影响。所以如果想让p1也受影响,就必须使用
阅读全文
摘要:在看完了《让你不再害怕指针.pdf》这本29页的书以后,感觉自己对指针的各种使用方法都会了(指针表达式那一块没仔细看,因为平时用不到这么复杂的情况)。但是忽然想起来,以前看MSDN的时候碰到双重指针就不理解,然而这本书却没有细讲,于是又搜了一些网上关于指针的文章看,竟然发现有些内容还是不太懂。于是忽
阅读全文

浙公网安备 33010602011771号