linux平台学x86汇编
shallnet
一个没赶上脑残一代90后的80后程序猿!
展开
-
linux平台学x86汇编(五):使用gdb调试汇编程序
【版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet,文章仅供学习交流,请勿用于商业用途】 正如C语言一样,编写所有语言程序一样会出现一些一些错误,发生错误时,我们可以使用调试器一步一步运行程序以监视数据是如何被处理的。本节使用GNU调试器检查上一节hello程序,监视处理过程中寄存器和内存的值的变化。要调试汇编语言程序,在编译时,需要使用-gs原创 2015-05-08 23:51:16 · 10824 阅读 · 0 评论 -
linux平台学x86汇编(十四):函数的使用
【版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet,文章仅供学习交流,请勿用于商业用途】 和高级语言一样,汇编语言在多个项目之间可能会编写相同的过程和处理,如果使用函数的话就可以不必每次需要时都重复编写实用程序代码,从而在需要它的时候调用它。 函数包含完成特定功能所需的代码,数据从主程序传递给函数,然后结果返回给主程序。调用函原创 2015-05-10 20:58:18 · 4474 阅读 · 0 评论 -
linux平台学x86汇编(十九):C语言中调用汇编函数
【版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet,文章仅供学习交流,请勿用于商业用途】 除了内联汇编以外,还有一种途径可以把汇编代码整合到C/C++语言中,C/C++语言可以直接调用汇编函数,把输入值传递给函数,然后从函数获得输出值。 如果希望汇编语言函数和C/C++程序一起工作,就必须显示地遵守C样式的函数格式,也就是原创 2015-05-11 22:57:22 · 7972 阅读 · 0 评论 -
linux平台学x86汇编(八):条件跳转
【版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet,文章仅供学习交流,请勿用于商业用途】 在此之前我们使用的汇编代码示例都是从第一条指令开始,直到最后最后一条指令程序退出。但实际上和高级语言类似,汇编代码也提供指令来改变程序处理数据方式。 正常情况下,程序要执行要执行的下一条指令是在指令指针寄存器中,指令指针确定程序中原创 2015-05-09 16:02:46 · 4818 阅读 · 0 评论 -
linux平台学x86汇编(九):循环指令
【版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet,文章仅供学习交流,请勿用于商业用途】 循环也是改变指令执行顺序的一种方式,循环操作重复的执行,直到满足条件。我们可以使用条件跳转指令来创建循环,但事实上汇编语言中有更简单的循环指令系列。 循环指令使用ECX寄存器作为计数器,随着循环指令的执行自动递减它的值,并且不会影原创 2015-05-09 16:04:13 · 3587 阅读 · 0 评论 -
linux平台学x86汇编(十三 ):字符串的比较与搜索
【版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet,文章仅供学习交流,请勿用于商业用途】 cmps指令用于比较字符串值,cmps指令有三种格式:cmpsb、cmpsw、cmpsl。隐含的源操作数和目标操作数位置存储在esi和edi寄存器中,每次执行cmps指令时,根据DF标志,esi和edi寄存器按照被比较的数据长度递增或递减。cmps指令原创 2015-05-10 20:53:09 · 2580 阅读 · 0 评论 -
linux平台学x86汇编(十六):在汇编语言中调用C库函数
【版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet,文章仅供学习交流,请勿用于商业用途】 其实在汇编语言中也是可以使用C库函数的,这一节我们来看一下如何在汇编语言中调用C库函数以使得我们的程序看上去很方便地和用户交互。 C库包括C程序通用的喝多函数,如printf和exit等,下面我们紧接着上一节的知识来实现一个两整数原创 2015-05-10 21:07:16 · 4015 阅读 · 0 评论 -
linux平台学x86汇编(六):数据的传送
【版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet,文章仅供学习交流,请勿用于商业用途】 前面讲了定义数据元素,既然定义了数据元素,那么就需要知道如何处理这些数据元素。数据元素位于内存中,并且处理器很多指令要使用寄存器,所以处理数据元素的第一个步骤就是在内存和寄存器之间传送它们。数据传送指令为mov,其为汇编语言中最常用的指令之一。原创 2015-05-08 23:55:23 · 3138 阅读 · 3 评论 -
linux平台学x86汇编(十二):字符串的存储与加载
【版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet,文章仅供学习交流,请勿用于商业用途】 字符串的存储与加载是指,将字符串的值加载到寄存器和将其传回内存位置中。其使用指令lods指令和stos指令。 lods指令用于把内存中的字符串值传送到eax寄存器中,该指令有三种不同格式:lodsb(1字节)、lodsw(2字节)、lod原创 2015-05-09 16:21:38 · 2433 阅读 · 0 评论 -
linux平台学x86汇编(十一):字符串的传送
【版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet,文章仅供学习交流,请勿用于商业用途】 在高级语言中,我们经常操作字符串,比如字符串拷贝、比较、查找等。在汇编语言中也有实现这些操作的命令。这一节讲述在汇编语言中字符串传送相关操作命令。 movs指令可以把字符串从一个内存位置传送到另一个内存位置,指令后面跟表示长度的字符:原创 2015-05-09 16:17:09 · 3910 阅读 · 0 评论 -
linux平台学x86汇编(十五):使用命令行参数
【版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet,文章仅供学习交流,请勿用于商业用途】 在高级语言中,程序在命令行上启动时常常带一个或多个参数,在汇编语言中也可以实现这一特性。在实现这一特性之前,我们先了解一下linux如何从命令行执行程序。 每一个应用程序开始执行时,系统都会为该程序分配一块内存区域,并且每个程序都原创 2015-05-10 21:02:52 · 2984 阅读 · 0 评论 -
linux平台学x86汇编(七):堆栈的使用
堆栈是内存中用于存放数据的专门保留的区域,该区域的数据存放和删除方式比较特殊。一般内存区域数据元素按照连续的方式存放到数据段,在数据段中最低内存开始存放,然后向更高的内存位置依次存放。而堆栈保留在内存区域的末尾位置,并且在当数据存放在堆栈中时,它向下增长。程序运行时使用的任何命令行参数都被送入堆栈中,并且堆栈指针被设置为指向数据元素的底部。 当每个数据被添加到堆栈数据区域中时,使原创 2015-05-08 23:58:22 · 3014 阅读 · 1 评论 -
linux平台学x86汇编(十八):内联汇编
【版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet,文章仅供学习交流,请勿用于商业用途】 使用汇编语言笔编程最常见的方式是在高级语言(C和C++)程序内编写汇编函数,这种吧汇编语言直接写到C和C++语言程序内的技术称为内联汇编。 GNU的C编译器使用asm关键字指出使用汇编语言编写的源代码段落。asm段的基本格式如下:原创 2015-05-11 22:41:17 · 2952 阅读 · 0 评论 -
linux平台学x86汇编(二十):汇编库的使用(结)
【版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet,文章仅供学习交流,请勿用于商业用途】 汇编语言和C一样,可以通过使用库来简化阻止大量函数的目标文件的问题。GNU C编译器可以不在命令行中独立地包含每个独立地函数目标文件,它允许吧所有目标文件组合在单一存档文件中。在编译C程序时,要做的工作就是包含单一的目标库文件,在编译时,编译器可以从库文件原创 2015-05-12 23:38:00 · 2674 阅读 · 0 评论 -
linux平台学x86汇编(三):相关开发工具
【版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet,文章仅供学习交流,请勿用于商业用途】 类似于其它高级语言,编写汇编语言,必须有一个开发环境,那么也就需要适当的工具了。搭建汇编语言至少应该有下面这些工具:汇编器、链接器、调试器。下下面看看在汇编语言开发环境中如何使用它们。汇编器 汇编器用于把汇编语言源代码转换原创 2015-05-06 23:46:20 · 3987 阅读 · 0 评论 -
linux平台学x86汇编(二):处理器指令码及IA-32平台了解
【版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet,文章仅供学习交流,请勿用于商业用途】 在计算机操作的最底层,所有计算机处理器都按照制造厂商在处理器内部定义的二进制代码来操作数据,这些代码定义了处理器应该利用程序员提供的数据完成相应的功能,这些预置的代码被称为指令码。不同类型的处理器的指令码是不一样的,但处理指令码的方式是类似的。原创 2015-05-06 23:42:27 · 3734 阅读 · 0 评论 -
linux平台学x86汇编(四):从“hello world!”开始
【版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet,文章仅供学习交流,请勿用于商业用途】 汇编语言程序由定义好的段构成,每个段有各自的目的。三个最常用的的段如下:数据段、bss段、文本段。文本段是可执行程序内声明指令码的地方,所有汇编程序都必须有文本段,数据段和bss段是可选的,但是在程序中经常使用。数据段声明带有初始值的变量,bss段声明原创 2015-05-06 23:56:54 · 10504 阅读 · 1 评论 -
linux平台学x86汇编(一):现代计算机结构组成与工作过程
【版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet,文章仅供学习交流,请勿用于商业用途】 现代计算机计算过程通常是把用户书写并送入计算机内的高级语言程序翻译成机器能识别的语言程序,再通过机器自动运行该语言程序计算出结果并输出。 但在早期没有高级语言的时候,用户是直接编写机器语言,直接在机器执行。向编写这种只由0、1原创 2015-05-06 23:32:33 · 4076 阅读 · 1 评论 -
linux平台学x86汇编(十):整数运算
【版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet,文章仅供学习交流,请勿用于商业用途】这一节介绍如何在编语言中上使用整数运算,包括加法、减法、乘法和除法。加法指令 add指令用于把两个整数想加。格式如下:add src, dest 其中src可以是立即数值、内存地址、寄存器。dest可以是寄存器或内存原创 2015-05-09 16:08:19 · 3763 阅读 · 0 评论 -
linux平台学x86汇编(十七):在汇编中使用linux系统调用
【版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet,文章仅供学习交流,请勿用于商业用途】 在前面章节我们已经看到,启动系统调用需要使用INT指令。linux系统调用位于中断0x80,执行INT指令时,所有操作转移到内核中的系统调用处理程序,完成后执行转移到INT指令之后的下一条指令。 linux的系统调用在如下文件(3原创 2015-05-10 21:11:45 · 3643 阅读 · 1 评论