
汇编
sooolo
这个作者很懒,什么都没留下…
展开
-
汇编指令基础
1. 堆栈相关指令 push:把一个32位的操作数压入堆栈中。这个操作导致esp被减去4。esp被称为栈顶,顶部是地址小的区域,那么压入堆栈的数据越多,esp就越来越小。在32位平台上,esp每次减少4个字节。 pop:与pop相反,esp被加4,一个数据出栈。pop的参数一般是寄存器,栈顶的数据被弹出到这个寄存器中。虽然一般不把sub、add这些算术指令和call、ret原创 2013-01-26 15:45:45 · 971 阅读 · 0 评论 -
DOS下Debug
Debug种的几个命令:R:查看、改变CPU寄存器的内容D:查看内存中的内容E:改写内存中的内容U:将内存中的机器指令翻译成汇编指令T:执行一条机器指令G:一次执行完循环中的语句,而不是单步执行。也可以执行到指定目的处,例如g 0016A:以汇编指令的格式在内存中写入一条机器指令Q:退出debug模式 注意:段寄存器的几个特点我们可以将一段内存定义为一个原创 2013-01-30 15:07:12 · 1241 阅读 · 0 评论 -
DOS下的DEBUG命令的详细用法
名称 解释 格式 a (Assemble) 逐行汇编 a [address] c (Compare) 比较两内存块 c range address d (Dump) 内存16进制显示 d [address]或 d [range] e (Enter) 修改内存字节 e address [list] f (fin) 预置一段内存 f range list g (Go) 执行程序转载 2013-02-18 21:46:31 · 5031 阅读 · 0 评论 -
linux c 中嵌入汇编
为了提高代码的执行效率,有时程序中需要使用汇编语言来编制源代码。这就涉及在两种语言的相互调用问题,而且linux 使用的是 AT&T 的汇编语言格式,与 INTEL 汇编的有所区别,详细可以参考相关书籍。 在汇编应用程序中调用 C 函数主要涉及汇编程序如何向 C 函数传递参数以及相关寄存器的保存,我们先看一个将C 程序转换编译成汇编程序的代码,看看汇编程序调用函数时所做的处理:/转载 2013-03-02 12:56:26 · 1879 阅读 · 0 评论 -
汇编中寄存器的详解
1、数据寄存器数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间。32位CPU有4个32位的通用寄存器EAX、EBX、ECX和EDX。对低16位数据的存取,不会影响高16位的数据。这些低16位寄存器分别命名为:AX、BX、CX和DX,它和先前的16位CPU中的寄存器相一致。4个16位寄存器又可分割成8个独立的8位寄存器(AX:AH-AL、BX转载 2013-03-02 12:57:02 · 864 阅读 · 0 评论 -
反汇编分析C++的返回值
这几天一直在给同学讲数据结构和算法的题,讲题的过程中突然想到这函数的返回值究竟是存放在哪的,为什么可以通过函数的调用来直接给变量赋值。仔细想想这么多年居然没有深究过这个问题,太不应该,于是今天花了些时间来好好研究了一下这个问题。也跟了一些thread,某些前辈的观点是“不应该动不动就提到寄存器,栈,堆这些较底层的概念。完全可以这样理解:返回值保存在一段临时区域,到下一条语句时,返回值被销毁,所以,转载 2013-03-02 13:15:43 · 1203 阅读 · 0 评论