|
|
03 2011 档案
摘要:1、AT&T的助记法和寄存器名称都必须是小写字母的。Intel set(and hence NASM)提倡使用大写,但是也可以接受小写,但是AT&T必须小写。 2、寄存器名称之前要加 % 。Intel 写作 EAX 或者 AX 的,在AT&T中就要写作 %eax 和 %ax 。 3、AT&T 中的指令如果含有操作数,那么它需要有一个后缀:b, w, 或者 l,分别表示 byte(8 bits),...
阅读全文
摘要:在Linux中,gcc更像一个工具大管家,管理很多工具一起来对C程序进行编译。详细过程请看下图,带阴影的箭头表示文件的流程,空白箭头表示控制过程: 下面详细介绍一下这个过程。 1、程序员在Linux终端中输入命令gcc eatc.c –o eatc 2、gcc接管Linux的控制权,然后立即启用一个工具C preprocessor(cpp)。这个工具处理C语言的源代码文件(eatc.c),处理比...
阅读全文
摘要:当Linux把程序加载到内存中的时候,Stack中是存储有一些预先的信息的。 Stack存在于内存中0xbfffffff附近,但是不会大于这个值。Stack是底朝上的,ESP指向最外面的元素。 · ESP所指向的最外面的元素是这个程序的参数个数,最少为1。比如运行./test这个程序,这唯一一个参数指的就是test。这是32bits的。 · 之上一行是一个地址,指向可执行的文件。也是32bits的...
阅读全文
摘要:这只是一个学习笔记,难免会有些杂乱,记录的都是一些汇编中有关String的要点。 1、在汇编语言看来,只要是在内存中连续的存储单元(byte)中存储的东西都叫做“String”,而不管这些东西是不是人可以识别的字符。 2、汇编语言的String是你通过在R额Register中设定相应的值来指定的。比如在EAX中指定String的首地址,在ECX中指定String的长度。 3、String分为Sou...
阅读全文
摘要:Technorati 标签: 汇编,Macro,Procedure 一、相同之处: Macro和Procedure都是一个程序段。 二、不同之处: Macro是由一对符号表示的:%MACRO Label #(#表示这个Macro需要几个参数,有0,1,2…,在使用的时候用%1, %2…代替相应) %ENDMACRO(注意是在最后一行单独显示) Procedure也是由一对符号表示,CALL和RET...
阅读全文
摘要:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://vanshell.blog.51cto.com/890307/417068 我相信学过C语言的同学,都会在书中看到C语言特点一定有:可移植性。但是什么是可移植?如何才能可移植?C语言是如何做到可移植的?对于初学者,可移植可能是一个经常遇到却很神秘的词。我想通过这篇文章来表达我对于...
阅读全文
摘要:文件描述符和系统调用号。 File Descriptor文件描述符:0:Standard Input 1: Standard Output 2: Standard Error 系统调用号: 0: 1:sys_exit 2: 3:sys_read 4:sys_write
阅读全文
摘要:程序就是要对数据进行操作。在汇编中,这些数据有在buffer中的数据,有变量数据,有在寄存器中的数据。 数据一般分为两类:全局数据和局部数据。 全局数据:在.data以及.bss中定义的数据是全局数据,在寄存器中的数据也是全局数据。 局部数据:局部数据存放在stack中,是由调用者压入栈的。 For now, simply understand that global data is define...
阅读全文
摘要:在汇编中,一个函数的组成大致如下: MyProc: (CODE) (CODE) RET调用这个函数的时候,使用call MyProc这个语句。其调用过程如下: 它与中断最大的区别就是它知道所调用的函数的具体地址。CALL和RET(return)是一对,INT和IRET是一对。
阅读全文
摘要:定义的方式为: <label>: db <data1>,<data2>,… db <data3>,<data4>,… ………… 其中的“db”是Define Byte”的意思,也可以是dw(Define word), dd(Define Double) 数据可以加引号(单引号或者双引号),表示一个字符串。不加,则表示立即数。 每一行的db都是独立的,互不影响,所以每一行的最后可以不加逗号。它们在内...
阅读全文
摘要:在一系列的跳转指令中,如果描述词中有greater than或者less than,那么它所比较的是两个有符号的整数。如果描述词中有above或者below,那么它所比较的是两个无符号的整数: 从另一个方面来说这个表: TEST:还有一个比较是测试一个数中某一位是否为1,使用TEST命令: test <operand>,<mask> test ax,00001000B 它的操作和AND相似,设定相...
阅读全文
摘要:Define the Program 把文件中的所有字符都变成用十六进制书写的格式。 Starting with Pseudo-Code 1、最初的伪代码设计如下: Read a char from the input file convert the character to hex string Write the hex string to the output file Repeat un...
阅读全文
摘要:AND, OR, XOR, NOT <-----------Bitwise logical instructions ROL, ROR, RCL, RCR, SHL, SHR <-------------shift instructions AND op1,op2 结果放在op1中。 AND的一种应用是在一个数中分离出几个bits OR, XOR和AND的格式相同 NOT只有一个操作数 Shift...
阅读全文
摘要:我们在写一个二进制数时,一般高位在左,低位在右:
阅读全文
摘要:sys_read: mov eax,3 ;sys_read的系统调用号 mov ebx,0 ;设置标准输入: Standard Input mov ecx.Buff mov edx,BUFFLEN int 80h sys_write: mov eax,4 ;sys_write的系统调用号 mov ebx,1 ;设置标准输出:Standard output mov ecx,Buff mov edx,...
阅读全文
摘要:Linux中,Stack是一种数据的操作方式,对内存中的数据进行操作。 stack是倒置的,从上往下长。 在C语言中,动态内存分配(malloc)是在heap中进行的。汇编中的动态分配本书没有涉及。 当stack和下面的代码部分发生冲撞时,Linux会产生"segmentation fault”,并终止程序。 stack的大小并不一定与.text .data的大小成比例。 当程序开始运行时,sta...
阅读全文
摘要:汇编语言首先一定要写注释。 ; Excutable name : EATSYSCALL; Version : 1.0; Created date : 1/7/2009; Last update : 2/18/2009; Author : Jeff Duntemann; Description : A simple program in assembly for Linux, using NASM ...
阅读全文
摘要:EFlags as a whole is a single 32-bit register buried inside the CPU. OF: overflow flag 溢出标记,当一个有符号数整数太大溢出时,这位标记为1。通常当作进位标记。 DF: direction flag 这一位是你告诉CPU应该怎么做的一个标记。当设置这一位时,string instruction proceed f...
阅读全文
摘要:mov eax,1一定要注意:逗号之后没有空格,语句最后没有分号。MOV,XCHG:mov destination,resource 把resource中的数copy到destination中,这两个只能有一个是memory locationxchg register1,register2 交换两个寄存器的值section .datasection .text global _start_star...
阅读全文
摘要:Put the least significant byte into the lowest address. 比如: mov eax, ‘WXYZ’ 在寄存器eax中的值为0x5a595857 其中W、X、Y、Z的十六进制数值分别为57h、58h、59h、5ah。 在一个寄存器中,右端是低位,左端是高位。所以把先来的字符放在低位。 这里的WXYZ也可以看做是char ch[4] = ‘WXYZ’...
阅读全文
摘要:我用Xmanager 3远程连接到Ubuntu 10.10上,一切正常。但是我在终端中输入字母d的时候,整个窗口就会变小。原因是Ubuntu自设的快捷键在作怪。选择 系统>首选项>键盘快捷键,找到“隐藏所有正常窗口并将桌面设置为焦点”,可以看到它的快捷方式为D。只要把它改为Alt+D就可以了。
阅读全文
摘要:把整个矩阵按sqrt(n)为一块,分成n/sqrt(n)块,在查询的时候就按照小块进行分割。边缘部分按照顺时针分成相同的小条。 代码如下: /*The solution of RMQ using a <O(n), O(sqrt(n))> algrithom *http://www.topcoder.com/tc?module=Static&d1=tutorials&d2=lowestCommonA...
阅读全文
摘要:预处理时间复杂度为 O(NlogN),查找时间复杂度为 O(1) /*The RMQ question, using Sparse Table(ST) algorithm to solve it *http://www.topcoder.com/tc?module=Static&d1=tutorials&d2=lowestCommonAncestor * *initRMQ: M[N][logN][...
阅读全文
摘要:在老版本的Windows开机的时候,可以注意到左下角有一个‘|’逐渐变成‘/’,又逐渐变成‘-’,再变成‘\’,再依次变换。这里就实现这个程序相似的程序。只不过是显示字母,a显示完之后消失,接着在原地方显示b,依次类推。 这个程序最主要使用ASCII字符中的第8号字符:backspace,它使输出的光标后退一位。 这个程序最主要的一行代码为: #define BACKSPACE printf("%...
阅读全文
|