ASM16 3-4 汇编语言寄存器篇
什么是指令系统
计算机的指令系统就是指该计算机能够执行的全部指令的集合
每种计算机都有它支持的指令集合
16位8086指令系统是Intel 80x86系列微处理器指令系统的基础
调试程序DEBUG
DEBUG是常用的汇编语言级调试工具,为汇编语言的程序员提供了分析指令、跟踪程序的有效手段
常用命令:
-A汇编
-U反汇编
-T单步执行
-G断点执行
-D数据显示
-R寄存器
8086的寄存器组
对程序员来说,8086内部结构的最重要的是其寄存器组
8个通用寄存器
1个指令指针寄存器
1个标志寄存器
4个段寄存器
8086的通用寄存器
8086的16位通用寄存器是:AX BX CX DX SI DI BP SP
其中前4个数据寄存器都还可以分成高8位和低8位两个独立的寄存器
8086的8位通用寄存器是:AH BH CH DH AL BL CL DL
对其中某8位的操作,并不影响另外对应8位的数据
数据寄存器
数据寄存器用来存放计算的结果和操作数,也可以存放地址
每个寄存器又有它们各自的专用目的
AX——累加器,使用频率最高,用于算术。逻辑运算以及与外设传送信息 ...
ASM16 1-2 汇编语言入门
什么是汇编语言
汇编语言的主要特点:
汇编语言程序与处理器指令系统密切相关
程序员可直接、有效地控制系统硬件
形成的可执行文件运行速度快、占用主存容量少
汇编语言和高级语言
汇编语言与处理器密切相关:汇编语言程序的通用性、可移植性较差
高级语言与具体计算机无关:高级语言程序可以在多种计算机上编译后执行
汇编语言功能有限、涉及硬件细节:编写程序比较繁琐,调试起来也比较困难
高级语言提供了强大的功能,不必关心琐碎问题:类似自然语言的语法,易于掌握和应用
汇编语言本质上就是机器语言:
可以直接、有效地控制计算机硬件
易于产生速度快、容量小的高效率目标程序
高级语言不针对具体计算机系统
不易直接控制计算机的各种操作
目标程序比较庞大、运行速度较慢
汇编语言的优点:
直接控制计算机硬件部件
可以编写在“时间”和“空间”两方面最有效的程序
汇编语言的缺点:
与处理器密切有关
需要熟悉计算机硬件系统、考虑许多细节
编写繁琐,调试、维护、交流和移植困难
汇编语言的优点使得它在程序设计中占有重要的位置,是不可被取代的
汇编语言的缺点使得人们主要采用高级语言进行程序开发工作
有时需要 ...
网络 5 udp和tcp的区别
udp和tcp的区别区别
udp-无连接,数据报,不安全不可靠不稳定
tcp-面向连接,数据流,安全可靠稳定
udp
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061// Server.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//#define _WINSOCK_DEPRECATED_NO_WARNINGS#include <iostream>using namespace std;#define WIN32_LEAN_AND_MEAN//仅保留windows.h中的必要的头文件//如果不加这一行则要把Winsock2.h放到windows.h前面,否则会因重定义而报错#include <windows.h>#include <Winsock2.h>#pragma comment(lib,"Ws2_32.lib& ...
网络 3-4 心跳包和tcp
心跳包和tcp心跳包这节用的还是上节课的代码,算是对上一节的补充扩展
keep-alive-保活
在ChatClient中添加类向导
123456void CChatClientDlg::OnTimer(UINT_PTR nIDEvent){ CPackage pkg(PT_HEARTBEAT, m_client); sendto(m_sockClient, (char*)&pkg, sizeof(pkg), 0, (sockaddr*)&m_siServer, sizeof(m_siServer)); CDialogEx::OnTimer(nIDEvent);}
添加类
12345678910111213//CLock.h#pragma once#include<Windows.h>class CLock{public: CLock(); ~CLock(); void Lock(); void Unlock();private: CRITICAL_SECTION m_cs;};
123456789101112 ...
网络 2 聊天室
聊天室上线新建控制台程序
新建头文件
Proto.h
123456789101112131415161718192021222324252627282930#pragma once#define WIN32_LEAN_AND_MEAN#include <windows.h>#include <WinSock2.h>#pragma comment(lib,"ws2_32.lib")//包类型enum PackageType{ PT_ONLINE, PT_OFFLINNE, PT_PUBLIC,//群聊,公聊 PT_PRIVATE//私聊};#define NAMELEN 64struct CLientInfo{ sockaddr_in m_si; char m_szName[NAMELEN];};#define MASLEN 1300struct CPackage{ PackageType m_pt;//包的类型 CLientInfo m_ci;//客户端的信息 char m_szMsg[M ...
网络 1 udp
基础概念协议:约定好的数据格式,约定好的数据的解析方式
在cmd中输入ipcongfig可以查看IP配置
ip地址:当我们使用计算机或者其他网络设备进行互联网通信时,每一个设备都需要一个唯一的标识符来进行通信。这个标识符被称为 IP 地址。IP(Internet Protocol)地址是一个由32位二进制表示的数字,通常被分为四个数字组成的点分十进制的形式表示,例如:192.168.1.1。
端口
protocol port(协议端口)
操作系统中通信的端点,与IP地址及通信协议关联,用来获取相应的网络服务。
(eg.IP地址就像银行的地址,而端口就是银行处理不同业务的窗口)
在网络技术中,端口(Port)大致有两种意思:
一是物理意义上的端口,比如,ADSL Modem、集线器、交换机、路由器用于连接其他网络设备的接口,如RJ-45端口、SC端口等等。
二是逻辑意义上的端口,一般是指TCP/IP协议中的端口
公网
公网是相对于内网而言的。内网上网的计算机得到的IP地址是Internet上的保留地址;而公网上网的计算机得到的IP地址是因特网的公用地址,是非保留的地址。公网的 ...
windows 14 钩子和服务
钩子和服务钩子-windows hook
SetWindowsHookEx
参数说明:
参数 idHook:指示欲被安装的挂钩处理过程之类型,类型如下。WH_MSGFILTER(-1):安装一个挂钩处理过程,以监视由对话框、消息框、菜单条、或滚动条中的输入事件引发的消息.详情参见MessageProc挂钩处理过程.
WH_JOURNALRECORD(0):安装一个挂钩处理过程,对寄送至系统消息队列的输入消息进行纪录.详情参见JournalRecordProc挂钩处理过程.
WH_JOURNALPLAYBACK(1):安装一个挂钩处理过程,对此前由WH_JOURNALRECORD 挂钩处理过程纪录的消息进行寄送.详情参见 JournalPlaybackProc挂钩处理过程.
WH_KEYBOARD(2):安装一个挂钩处理过程对击键消息进行监视. 详情参见KeyboardProc挂钩处理过程.
WH_GETMESSAGE(3):安装一个挂钩处理过程对寄送至消息队列的消息进行监视,详情参见 GetMsgProc 挂钩处理过程.
WH_CALLWNDPROC(4): 安装一个挂钩处理过程,在 ...
windows 13 复习
这节课主要是复习之前的内容,查缺补漏
TLS线程局部存储(Thread Local Storage,TLS),是一种变量的存储方法,这个变量在它所在的线程内是全局可访问的,但是不能被其他线程访问到,这样就保持了数据的线程独立性。而熟知的全局变量,是所有线程都可以访问的,这样就不可避免需要锁来控制,增加了控制成本和代码复杂度。
新建控制台应用
12345678910111213141516171819202122232425262728293031// test.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//#include <windows.h>#include <iostream>using namespace std;DWORD WINAPI ThreadFunc(LPVOID lpParam){ DWORD dw = (DWORD)TlsGetValue(0); TlsSetValue(0, (LPVOID)0x44557788); return 0;}int mai ...
windows 12 C线程和mfc线程
C线程和mfc线程C多线程tls-thread local storage
1234TlsAllocTlsFreeTlsSetValueTlsGetValue
TlsAlloc
12345函数原型:DWORD TlsAlloc();作用:为调用该函数的线程分配一个线程局部存储序号,供其它三个函数使用注意:一个进程最多分配TLS_MINIMUM_AVAILABLE个索引,目前定义为64,一个进程中所有线程分配的索引不会重复使用:int index=TlsAlloc()
DWORD TlsAlloc(void); // 返回一个TLS索引
每个线程创建时系统给它分配一个LPVOID指针的数组(叫做TLS数组,长度为TLS_MINIMUM_AVAILABLE),TlsAlloc()函数的作用是返回访问当前线程的TLS数组的一个下标(索引),不同线程得到不同的索引变量值。
当调用TlsAlloc的时候,系统会挨个检查这个数组中成员的值,直到找到一个值为FREE的成员。把找到的成员的值由FREE改为INUSE后,TlsAlloc函数返回该成员的索引。如果不能找到一个值 ...
windows 11 远程线程注入
远程线程注入信号12CreateSemaphoreReleaseSemaphore
CreateSemaphore
创建或打开命名或未命名的信号量对象。
要指定对象的访问掩码,请使用CreateSemaphoreEx函数。
参数lpSemaphoreAttributes指向SECURITY_ATTRIBUTES结构的指针。如果此参数为NULL,则子进程无法继承句柄。
结构的lpSecurityDescriptor成员为新信号量指定安全描述符。如果此参数为NULL,则信号量将获取默认安全描述符。信号量的默认安全描述符中的ACL来自创建者的主要或模拟令牌。
*lInitialCount信号量对象的初始计数。该值必须大于或等于零且小于或等于lMaximumCount。信号量的状态在其计数大于零时发出信号,在信号为零时发出信号。只要wait函数释放等待信号量的线程,计数就会减1。通过调用ReleaseSemaphore函数将计数增加指定的量。
*lMaximumCount信号量对象的最大计数。该值必须大于零。
*lpName信号量对象的名称。名称仅限于MAX_PATH个字符。名称比较区分大 ...