摘要:除了jmp call ret指令jcc也可以修改eip指令 与其他不同的是,jcc是有条件修改eip指令 1.JE,JZ 2.JNE,JNZ 3.JS 4.JNS 5.JP,JPE 6.JNP,JP0 7.J0 8.JN0 9. 10. 1.CF(Carry flag) 进位标志 判断无符号数整型计
阅读全文
摘要:栈顶指针esp 栈底指针ebp esp寻址 构建函数 1.使用寄存器传递参数 2.使用堆栈来传递参数 push 1 push 2 push 3 把要用的参数压入堆栈后,需要用call调用函数来计算参数,调用call时,会将call的下一行指令的地址压入栈中,所以使用参数时地址为[esp+4,8,12
阅读全文
摘要:jmp 用jmp实现函数,需要再用jmp调回来,且不可重复 call 用call实现函数,并且在使用后能跳回来继续下一行指令 如实现两个整数的加法 0x00186784 mov ecx,1 0x00186788 mov edx,1 0x0018678C call 0x0018679C 记录函数的头地
阅读全文
摘要:EIP中的值就是CPU下次要执行的地址 jmp 直接修改eip的值 1.jmp imm=mov eip,imm 2.jmp r 3.jmp m call 直接修改eip的值,并把当前指令的下一行地址存到堆栈中 1.call imm/r/m ret 栈顶指针+4,把原来栈顶指针的指向的值赋值给eip
阅读全文
摘要:汇编语言中的堆栈和数据结构中的堆栈没有关系 堆栈是操作系统预先分配的内存 ESP为栈指针寄存器,当前堆栈用到哪了 当使用过堆栈后需要修改ESP的值 push 向堆栈中压入数据并修改栈顶指针ESP寄存器的值 1.push r32 2.push r16 3.push m32 4.push m16 5.p
阅读全文
摘要:mov 1.mov r/m8,r8 r 通用寄存器 2.mov r/m16,r16 m 内存 3.mov r/m32,r32 imm 立即数 4.mov r/m8,r8 8/16/32 代表位数 5.mov r/m16,r16 6.mov r/m32,r32 7.mov r8,imm8 8.mov
阅读全文
摘要:大端模式:数据高位在存储低位,数据低位在高位 小端模式:数据低位在存储低位,数据高位在高位 存储低位 0x00000000 0x00000001 0x00000002 0x00000003 0x00000004 0xFFFFFFFF 存储高位 例如: mov byte ptr ds:[0x00000
阅读全文
摘要:每个应用程序都有4GB的独立运行空间 4G=4096MB=4194304KB=4294967296B=34359738368bit换算成十六进制是800000000bit=100000000B=(FFFFFFFF+1)B 而FFFFFFFF即32位的内存地址,寻址宽度为32位,所以每个应用程序都有4
阅读全文
摘要:mov指令有两种写法 1.将立即数赋值给寄存器 如 mov eax,1 2.将寄存器中的数值赋值给寄存器 如 mov edx,eax mov后的两个寄存器要为同位数才可以进行
阅读全文
摘要:寄存器是cpu中存储数据的地方 32位cpu中有8位、16位、32位的寄存器 64位cpu中有8位、16位、32位、64位的寄存器 32位通用寄存器 EAX ECX EDX EBX ESP EBP ESI EDI 16位通用寄存器 AX CX DX BX SP BP SI DI 8位通用寄存器 AL
阅读全文
摘要:计算机能做的运算称为位运算,即直接对0和1做运算 有些计算机功能必须通过位运算才能实现:比如写调试器,判断CPU的各种状态位 位运算主要有 1.与(&)1&1=1 2.或(|)0|1=1 3.异或(^)0^1=1 1^0=1 0^0=0 1^1=0 4.非(~)~0=1 ~1=0 5.左移:各二进制
阅读全文
摘要:原码:最高位为符号位,其余各位为数值本身的绝对值 反码:正数:反码与原码相同 负数:符号位为1,其余位对原码取反 补码:正数:补码与原码相同 负数:符号位为1,其余位对原码取反加1 计算机中正数以原码存储,负数以补码存储
阅读全文