代码基本结构:
; .586 指令集 分号是注释 .586 ; MODEL 后面加 内存模式flat 和语言模式stdcall +其他模式(可以没有) ; 调用约定 flat内存使用方式 stdcall:win32 .MODEL flat, stdcall ;includelib +包含的静态库lib,链接库 系统api includelib user32.lib includelib kernel32.lib ; 系统api ExitProcess 退出进程 MesageBoxA:弹出消息窗口 PROTO 伪指令 ExitProcess PROTO, dwExitCode : DWORD MessageBoxA PROTO hwnd : DWORD, lpText : BYTE, lpCaption : BYTE, uType :DWORD ;大小写不敏感 option casemap:none ;上面都是头,下面是段 ; 段 .data:数据段,可读可写已经定义的变量,已经初始化,已经储存在.data内存区段里面 ;.data?:未初始化的数据段,未定义的变量,储存在缓冲区,不会增大exe文件的大小 ; .const: 常量数据段,可读不可写,其实吧一般都不用直接定义在.data里面 ; .code:代码数据段,可执行的代码都在这里 .stack:堆栈段,现在没必要写了,系统会自己申请 .data Number DWORD 0 text db "shellcode",0 .code ; main 是我们自己配置的代码入口点,不叫main也可以 需要告诉编辑器,在链接器高级里面指定的入口点 main ; proc 是函数的意思 main proc mov eax,5 mov ebx,6 add eax,ebx add eax,Number push 0 push offset text push offset text push 0 call MessageBoxA add esp,16 call ExitProcess main ENDP ;end 结束 main ;主函数起始位置 END main ;相当于 int main(){} 函数
数值的概念
度量单位 c语言里面
基本数据度量单位:
1BYTE(字节)=8BIT(比特) 相当于一个字符chat
WORD=2BYTE=16BIT 短整型
DWORD=4BYTE 整型
QWORD=8BYTE
1kb = 1024b = 8192B
取值范围:
BYTE = 有符号:-128到127 无符号:0到255
位运算