汇编语言 EAX怎么得到EIP的地址?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了汇编语言 EAX怎么得到EIP的地址?相关的知识,希望对你有一定的参考价值。
详细题目是编写一个程序段,若EIP低位为0,使EAX为0,否则为1.
这是我们老师自己出的,也不知道是不是有什么错误。
请高人指点!!!
.386 ;可以使用386指令集,定义32位段程序
.MODEL FLAT, stdcall ;定义存储模式
include \masm32\include\io32.inc ;自定义的32位输入输出包含文件
.STACK 4096 ; 定义堆栈段,大小为4096(一页)
.DATA ; 定义数据段
.CODE ; 代码段
start: ;地址标号
test eip,0001h
jz m1
mov eax,1
jmp done
m1: mov eax,0
done: ret ;程序返回操作系统
END start ; 汇编结束
连接的时候出现错误
ERROR A4910:CANNOT OPEN FILE:E\MASM32\BIN\\ML.ERR
E:\MASM32\1.ASM<9>:ERROR A2006: :EIP
-
ASSEMBLY ERROR
code segment
assume cs:code
main proc far
start:
call ok
mov ax,4c00h
int 21h
main endp
ok proc near
pop ax
ret
ok endp
code ends
end start
在调用子程序的同时,将IP入栈用来返回调用前的地址。子程序中再将入栈的IP值赋给AX,此时AX中保存的即为CALL OK的下一条指令的偏移地址。即子程序返回后IP的值。MOV等指令是无法直接改变IP值的。EIP应该同理。以上程序DEBUG通过。感觉汇编不是很容易。。要加油啊! 参考技术B 直接用test指令测试eip的末位,为零则置eax为零,否则置eax为1 参考技术C MOV AH,13H
MOV AL,88H
MOV BH,03H
MOV BL,0EBH
DIV BX
结果 AH 保存商 AL保存余数
汇编学习笔记
EIP 用来存储CPU要读取指令的地址,CPU通过EIP寄存器读取即将要执行的指令。每次CPU执行完相应的汇编指令之后,EIP寄存器的值就会增加。
jmp 分为段间转移和段内转移,段间转移需要提供新的段地址和偏移地址。
ip instruction pointer,即 段,用来存储将要执行的下一条指令的偏移量。
条件转移指令:v(1)根据单个标志位的状态判断转移的指令
指令 | 转移条件 | 说明 |
JC DEST | CF=1 | 有进位/借位 |
JNC DEST | CF=0 | 无进位/借位 |
JE/JZ DEST | ZF=1 | 相等/等于零 |
JNE/JNZ DEST | ZF=0 | 不相等/不等于零 |
JS DEST | SF=1 | 是负数 |
JNS DEST | SF=0 | 是正数 |
JO DEST | OF=1 | 有溢出 |
JNO DEST | OF=0 | 无溢出 |
JP/JPE DEST | PF=1 | 有偶数个“1” |
JNP/JPO DEST | PF=0 | 有奇数个“1” |
指令 | 转移条件 | 含义 | 英文表述 |
JG/JNLE DEST | SF=OF AND ZF=0 | 有符号数A>B | JMP greater (not less or equal) |
JGE/JNL DEST | SF=OF OR ZF=1 | 有符号数A≥B | JMP greater or equal (not less) |
JL/JNGE DEST | SF≠OF AND ZF=0 | 有符号数A<B | JMP less (not greater or equal) |
JLE/JNG DEST | SF≠OF OR ZF=1 | 有符号数A≤B | JMP less or equal (not greater) |
v(3)根据两个无符号数的比较结果判断转移的指令 v
指令 | 转移条件 | 含义 | 英文表述 |
JA/JNBE DEST | CF=0 AND ZF=0 | 无符号数A>B | JMP above (not below or equal) |
JAE/JNB DEST | CF=0 | 无符号数A≥B | JMP above or equal (not below ) |
JB/JNAE DEST | CF=1 |
无符号数A<B | JMP blow (not above or equal) |
JBE/JNA DEST | CF=1 OR ZF=1 | 无符号数A≤B | JMP blow or equal (not above) |
以上是关于汇编语言 EAX怎么得到EIP的地址?的主要内容,如果未能解决你的问题,请参考以下文章