摘要: ESP寻址的好处,很灵活。 弊端,当函数比较复杂时,使用的时候要使用很多寄存器,需要把寄存器的值保存在堆栈中备份,寻址计算复杂一些。 阅读全文
posted @ 2020-11-04 07:15 KeepMoving2018 阅读(261) 评论(0) 推荐(0)
摘要: 当执行函数调用call指令的时候,会把call指令下一条指令的内存地址压入堆栈(ESP值减4)。 在call指令里面,我们可以随意使用,比如push压入堆栈,使用堆栈传参等。 但是要保证,在函数调用结束的时候 即执行ret指令之前,要把esp-栈顶寄存器的值修改为执行call指令压入堆栈的那个值。 阅读全文
posted @ 2020-11-03 21:02 KeepMoving2018 阅读(1032) 评论(0) 推荐(0)
摘要: 函数 就是一堆指令,可以实现特定功能,这个功能以后可能反复使用。 函数调用--call指令就是在调用函数。 参数--使用函数需要的参数。 如果参数很多,寄存器数量不够,(假如要实现10个数相加),该怎么办? 阅读全文
posted @ 2020-11-03 20:41 KeepMoving2018 阅读(204) 评论(0) 推荐(0)
摘要: 通常用call指令调用函数,执行结束很容易回来,继续执行。 汇编中,EAX通常用来存储返回值。 传递参数,上面用的是ECX,EDX,这个不是一定的,可以用其它方式传递参数--后面会将如何用其它方式传递参数。 阅读全文
posted @ 2020-11-03 20:31 KeepMoving2018 阅读(150) 评论(0) 推荐(0)
摘要: EIP 不叫通用寄存器,它里面存放的值,是CPU下次要执行的指令的地址。那么如何去修改它的值呢? 使用MOV 0xxxxx,是不可以的。 mov eip,0x12345678 相当于 jmp 0x12345678 CALL指令,与jmp指令相同的点 修改EIP的值。 不同的点,会将call指令下一条 阅读全文
posted @ 2020-11-03 06:43 KeepMoving2018 阅读(507) 评论(0) 推荐(0)
摘要: 每一个应用程序(进程)都会有一个独立的4GB内存空间,但是并不能随便用,实际使用的时候要向操作系统申请,称之为内存的申请。 堆栈 就是一块内存,只不过不是程序员自己申请的,它是程序在启动执行的时候,操作系统为我们分配好了的这样一块内存。 堆栈这块内存 主要是给程序执行的时候用的,程序在执行的时候需要 阅读全文
posted @ 2020-11-02 20:31 KeepMoving2018 阅读(941) 评论(0) 推荐(0)
摘要: MOVS指令,可以由内存到内存移动数据。固定的是将ESI值对应的内存地址里面的值,移动到EDI值对应的内存地址里。 标志寄存器--EFL 32位,每一位都有特定的含义。 下标第10位,是DF位,方向标志位。 DF为0的时候,执行完MOVS指令,ESI EDI的值会加 1/2/4,(具体是1还是2还是 阅读全文
posted @ 2020-11-01 19:42 KeepMoving2018 阅读(686) 评论(0) 推荐(0)
摘要: 指令详情,可参考Intel的白皮书,里面有具体描述。 阅读全文
posted @ 2020-11-01 18:53 KeepMoving2018 阅读(223) 评论(0) 推荐(0)
摘要: 80x86绝大部分程序都是使用的小端存储;手机 ARM 绝大多数都是使用大端存储的。这个不是绝对的,编译器可以改存储模式。 观察手机QQ应用程序,使用的是小端存储。 阅读全文
posted @ 2020-11-01 16:16 KeepMoving2018 阅读(241) 评论(0) 推荐(0)
摘要: 内存地址的五种形式: 阅读全文
posted @ 2020-11-01 15:59 KeepMoving2018 阅读(145) 评论(0) 推荐(0)