汇编

概述

  • 学习汇编的意义
  1. 开发时调试
  2. 逆向时的代码阅读
  3. 某些特殊技术的使用(shellcode,壳)
  • 16/32/64汇编的区别



    栈的作用:
  1. 存储数据
  2. 保存寄存器环境
  3. 传递参数
  • lea eax,dword ptr ss:[esp-4] 将 ss:[esp-4] 传入eax(传址)

  • xchg eax,dword ptr ss:[esp-4] 将两操作数互相交换

比较指令

  • cmp oprd1,oprd2 将两数相减进行比较

  • test oprd1,oprd2 仅影响标志位,进行and运行

选择常用的jcc指令

  • jmp 无条件

  • JZ/JE ZF=1/等于0/相等跳转

  • JNZ/JNE ZF=0 /不等于0/不相等

  • JBE/JNA: CF=1/ZF=1 低于等于/不高于跳转

  • JNBE/JA : CF=0/ZF=0 不低于等于/高于跳转

  • JL/JNGE : SF ! =OF 小于/不大于等于跳转

  • JNL/JGE : SF=OF 不小于/大于等于跳转

串操作指令

  • movs p1,p2 p2-->p1 p2为源串符号地址,p1为目的串符号地址

  • stos oprd

    • 功能:把AL(字节)或AX(字)中的数据存储到DI为目的串地址指针所寻址的存储器单元中去指针DI将根据DF的值进行自动调整.


	.586
	.MODEL flat,stdcall
	.code

	addf proc
		add eax,ebx
		ret
	addf endp

	main proc
		mov eax,6
		mov ebx,5
		call addf
		mov eax,eax
	main ENDP
	END main
    .586
    .MODEL flat,stdcall
    .code

    addf proc
        mov eax,[esp+4]
        mov ebx,[esp+8]
        add eax,ebx
        ret
    addf endp

    main proc
        push 5
        push 6
        call addf
        mov eax,eax
    main ENDP
    END main  

API

  • ExitProcess PROTO, dwExitCode : DWORD

  • MessageBoxA PROTO hWnd : DWORD, IpText : BYTE, IpCaption: BYTE, uType:DWORD

.586
.MODEL flat,stdcall
includelib user32.lib
includelib kernel32.lib

ExitProcess PROTO, dwExitCode : DWORD
MessageBoxA PROTO hWnd : DWORD, IpText : BYTE, IpCaption: BYTE, uType:DWORD

.data
string db "helloworld",0

.code

main proc
	push 0
	lea eax,string
	push eax
	push eax
	push 0
	call MessageBoxA
	add esp,16
	call ExitProcess
main ENDP
END main
posted @ 2020-05-01 14:48  10nnn4R  阅读(202)  评论(0编辑  收藏  举报