文章分类 - 汇编
摘要:movzbl : Move With Zero Extend (movzbl) b->l
阅读全文
摘要:.bss .comm 声明未初始化的数据的通用内存区域 .lcomm 声明未初始化的数据的本地通用内存区域 eg .comm synbol ,length .2byte expression1, expression2, ..., expressionN Refer to the descripti
阅读全文
摘要:加法 addq %r8, %r9 → %r9 += %r8 减法 subq %r8, %r9 → %r9 -= %r8 有符号乘法 imulq %8, %r9 → %r9 *= %r8 有符号除法 movq %r8, %rax cqo idivq %r9 %r8 / %r9 → 商%rax
阅读全文
摘要:linux编译汇编程序 方法一 gcc编译 由于使用as和ld来编译链接汇编程序,在使用C库的时候比较麻烦, 需要输入比较多的指令,所以使用gcc进行编译链接。 注意 32位汇编和64位汇编在调用C库的时候,32位使用pushl指令来压栈传递参数,而64位汇编是使用通用寄存器来传递参数的。 同时
阅读全文
摘要:查看函数,内容如下(xchg %ax,%ax命令交换%ax与%ax,相当于nop): 简单来说,该函数的功能是将%eip寄存器内容传入%eax寄存器。相当于mov %eip,%eax。 这个函数在x86上的PIC(position independent code,即位置无关代码)中使用。它将%ei
阅读全文
摘要:汇编中,函数的参数压栈,一般在ebp上面(地址上大下小)。 CALL指令的步骤:首先是将返回地址(也就是call指令要执行时EIP的值)压入栈顶,然后是将程序跳转到当前调用的方法的起始地址。即一共执行push和jump指令。(入栈,跳转) RET指令则是 将栈顶的返回地址弹出到EIP,然后按照EIP
阅读全文
摘要:gcc生成32位汇编代码 : 汇编代码中,所有以点(.)开头的代码都是为了链接程序,可以删掉
阅读全文
摘要:地址上大下小。ebp在上,esp在下。数据写入内存,往地址增大的方向写入
阅读全文
摘要:1.MOV(传送) 指令写法 : 注意事项 : 1)target不能是CS(代码段寄存器),我的理解是代码段不可写,只可读,所以相应这地方也不能对CS执行复制操作。 2)target和source不能同时为内存数、段寄存器(CS\DS\ES\SS\FS\GS) 3)不能将立即数传送给段寄存器 4)t
阅读全文
摘要:基本寄存器可以归纳为如下几类: 通用寄存器 段寄存器 状态和控制寄存器 指令寄存器 32位通用寄存器有八个,eax, ebx, ecx, edx, esi, edi, ebp, esp, 他们主要用作逻辑运算、地址计算和内存指针,具体功能如下: eax 累加和结果 寄存器 ebx 数据指针 寄存器
阅读全文