汇编笔记
mfmfmmf1
这个作者很懒,什么都没留下…
展开
-
YJX基础66 多线程与临界区 重点
// 线程关键区五人抢厕所.cpp : 定义控制台应用程序的入口点。// 5个线程进行存尿和上厕所的循环。厕所(临界区)同一时间只能一人用。//每个线程上完5次厕所即结束本线程#include "stdafx.h"#include <windows.h>#include<time.h> //为了用time(0)当随机种子//定义临界区对象CRITICAL_SECTION bathroom;DWORD WINAPI seize_bathroom(L...原创 2021-08-29 15:58:07 · 144 阅读 · 0 评论 -
YJX基础65 键盘指示灯
// 检测numlock状态.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include"windows.h"int main(){ printf_s("get into main \n"); bool num_light_on = ((GetKeyState(VK_NUMLOCK) & 1) != 0); //GetKeyState的高位表示此键是否按下 低位表示指示灯状态 if (num_light_on)...原创 2021-08-28 20:01:45 · 215 阅读 · 0 评论 -
YJX基础65 进程管理
// 关闭进程B.cpp : 定义控制台应用程序的入口点。#include "stdafx.h"#include <windows.h> //为了用 DWORD OpenProcess 等#include<tlhelp32.h> //为了调用 CreateToolhelp32Snapshot函数BOOL myKillProcess(DWORD ProcessId);DWORD GetProcessID(const char *ProcessName);...原创 2021-08-28 17:46:07 · 155 阅读 · 0 评论 -
YJX基础64 用Active启动
1在注册表中添加路径HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Active Setup\Installed Components\{E92B03AB-B707-11d2-9CBD-0000F87A369E}在此位置StubPath写入自启动程序A的完整路径此时重启,程序A会运行。再次重启,程序不会运行。原因 重启后系统会建立克隆键值2在注册表中删除克隆键值HKEY_CURRENT_USER\SOFTWARE\Microsoft\Active Setu原创 2021-08-28 12:36:03 · 111 阅读 · 0 评论 -
YJX基础64 注册表自启动
注册表是启动程序藏身之处最多的地方,主要有以下几项: 1.Run键 Run键是病毒最青睐的自启动之所,该键位置是[HKEY_CURRENT_ USER\Software\Microsoft\Windows\CurrentVersion\Run]和[HKEY_ LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run],其下的所有程序在每次启动登录时都会按顺序自动执行。 还有一个不被注意的Run键,位于注册...原创 2021-08-28 11:10:42 · 101 阅读 · 0 评论 -
YJX基础62 手动后门
cmd命令 查看端口状态netstat -an原创 2021-08-27 18:08:33 · 69 阅读 · 0 评论 -
YJX基础63动态数据链接库dll
1 VS->win32console->dll 空项目 ex->完成创建一个ex.c文件__declspec(dllexport) int myadd(int a,int b){ return a + b; }编译此时会生成 ex.lib ex.dll两个文件(在debug文件夹中)关闭项目2 新建win32console exe 项目im新建一个im.c文件#include<stdio.h> #pragma...原创 2021-08-27 18:02:39 · 101 阅读 · 0 评论 -
YJX基础59 简易UDP通信
发送端// UDP_B_发送端.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <stdio.h>#include <winsock.h>#pragma comment(lib, "Ws2_32.lib")//void handle_error(void); /* Error handler routine */int main(){ printf_s("进入main函数,请...原创 2021-08-26 19:18:08 · 142 阅读 · 0 评论 -
YJX基础58 网络基础知识
物理层 10101100数据链路层该层将不可靠的物理信道处理为可靠的通道该层的数据单元为帧(frame)IEEE标准将该层又分为介质访问控制层(MAC)和逻辑链路控制层( LLC )介质访问控制确定共享介质环境(冲突域)中的计算机哪一台可以发送数据的协议。网络层将网络逻辑地址转换成物理机器地址: IP=>MAC。决定服务质量(如消息的优先权), ...原创 2021-08-25 20:51:21 · 92 阅读 · 0 评论 -
YJX基础48 没啥
一个补全函数参数的技巧:int WINAPI WinMain() //光标放在小括号内,按下tab键,会自动补全4个参数{}本节课的内容是创建一个Win32 Application程序很繁琐。手动设置各种窗体参数 各种消息处理函数...原创 2021-08-25 18:50:25 · 68 阅读 · 0 评论 -
YJX基础44 __declspec(naked)
(在写驱动时)如果函数前不加__declspec(naked)编译时编译器会自作主张补上栈移动和return,这样会破坏栈平衡void __declspec(naked) NTSTATUS _MyNtGetThreadContext(HANDLE hThread, PCONTEXTpcontext){ __asm{ jmp dword ptr[g_NtGetThreadContext] //...原创 2021-08-25 11:40:45 · 2402 阅读 · 0 评论 -
YJX基础36 汇编指令集
在c中添加汇编的方法:int a,b;__asm{ mov a,3; mov b,4;}数据传送指令movpushpopXCHG交换算术指令ADD 加SUB 减INC 加1DEC 减1NEG 取补(相反数)逻辑运算指令and or xor not test跳转指令cmpjmpjne...短循环指令loop 通常看不到此指令。只有手写汇编时才会...原创 2021-08-25 10:55:27 · 113 阅读 · 0 评论 -
vcYJX基础4.VC集成环境编译方式的区别
本节课讲了debug和release两种发布方法F10单步步过 F11单步步入本人用vs2015仿照视频实测进入main函数后的地址:00C517A0准备call printf时的地址:00C517C3被call的地址:0C5131Bh相关源代码:int main(){ int a, b, c; printf("helloworld!\n"); a = 1; b = 3; c = 9; _gettch(); return...原创 2021-08-24 19:00:06 · 423 阅读 · 0 评论 -
vcYJX基础3.用CL.exe编译C程序
12323123123123123123原创 2021-08-24 17:08:55 · 210 阅读 · 0 评论 -
2021-04-17 非对称加密为什么不能用公钥解密?
非对称加密为什么不能用公钥解密?因为加密过程中的一步使用了模运算,模运算是不可逆的23%3=2 但是由2和3是无法逆推回23原创 2021-04-17 08:17:44 · 595 阅读 · 0 评论 -
2021-04-07 标志寄存器
标志寄存器多数情况下push 后 esp会-4 例如push eax (eax是32位寄存器) 再例如 push dword ptr ds:[123abc] (dword 双字 32位)少数情况下push后esp会-2 例如push ax (ax是16位寄存器) 再例如 push wor...原创 2021-04-07 11:56:46 · 118 阅读 · 0 评论 -
2021-04-06 函数的参数是如何入栈出栈的
函数的参数是如何入栈出栈的制作逆向靶 建议用debug版而不是release版,因为release版会自作聪明把很多东西省略掉在调试器中 寄存器EIP 表示当前程序走到哪一步了ctrl+G 光标定位到某一地址在单步调试中 右侧哪个寄存器变红了 就是哪个寄存器发生了变化call 的第一个作用就是 将EIP的值改为函数所在的地址由硬编码知识 可以计算出返回地址的值,举例E8 84 FF FF FF (call stack.00401005) 这行硬编码是5个字节 所以 call完的返原创 2021-04-06 19:33:52 · 148 阅读 · 0 评论 -
2021-04-06 字节 xor加密 汇编指令举例 堆栈
字节 xor加密1个字节 0~FF 即0~255 即0~11111111原文件 xor 密钥 = 加密文件加密文件再次 xor 密钥 = 原文件原创 2021-04-06 13:14:43 · 400 阅读 · 0 评论 -
2021-04-05 可执行文件的PE结构
可执行文件的PE结构 proble execute任何可执行文件 都有 文件头 代码区 数据区 这三个部分知道了相应的16进制数字所代表的意义 就能从一堆1010中看懂一个文件比如 55 8B 就是函数头 2C 或者3C 就是函数尾...原创 2021-04-05 21:12:17 · 87 阅读 · 0 评论 -
2021-04-03 cmp与jne配合实现if判断
逆向插入汇编代码cmp与jne配合cmp a,b 如果a==b 那么寄存器ZF会变为1 否则为0当ZF为0时,也就是a不等于b时, jne会完成跳转原创 2021-04-03 09:14:59 · 831 阅读 · 0 评论 -
loop循环 FFFF:0006单元中的内容 乘以3 结果存储在dx中
分析1 FFFF:0006 是一个字节单元 0~255 . dx是两个字节的空间 0~65535. 前者乘以3 不会越界2 以dx为目标结果 先让(dx)=0, 让(ax)=(FFFF6), 再用dx加三次ax3 ax两字节 FFFF:0006 一字节, 如何赋值? 让(ah)=0 ,(al)=(FFFF6) assume cs:abcabc segment ...原创 2018-12-16 11:12:17 · 453 阅读 · 0 评论 -
loop循环 2^12
如果说求 2^3 的方法是mov ax,2add ax,axadd ax,ax==================================================================那么,如何求2^12? 循环次数用cx表示assume abc:codecode segment mov ax,2 mo...原创 2018-12-15 20:50:43 · 262 阅读 · 0 评论 -
简洁描述的约定
先看几句代码的解释mov ax,[0] 将一个内存单元(字单元)放入ax , 内存单元长度为2字节, 存放一个字, 段地址是DS 偏移地址是0mov al,[0] 将一个内存单元(字节单元)放入ax , 内存单元长度为1字节, 存放一个字节, 段地址是DS 偏移地址是00表示的是偏移地址 具体长度(类型)由其操作对象决定mov ax,[bx] ...原创 2018-12-15 11:54:24 · 319 阅读 · 0 评论 -
用debug来执行exe
用debug来执行exe运行dosboxmount c k:\c:debug 1.exe此时 1.exe的内容被加载到内存中 位置是DS 或者说DS+10H :0 (10H 是十进制的16) DS代表的是段地址 换算成字节要乘以16 所以10H的空间是 16*16=256字节这256个字节的空间 叫PSP,是DOS用的 与程序本身没关系 不深究程序正式开始的内存...原创 2018-12-15 11:11:57 · 2128 阅读 · 0 评论 -
初次汇编程序 masm5
下载masm5.zip 解压到 k: \masm5 (汇编语言编译工具包)下载debug.exe 放在k:下载dosbox 并运行mount c k:\ 把k盘加载到C盘c:debug ...原创 2018-12-14 21:03:15 · 973 阅读 · 0 评论 -
数据段
汇编的上机测试并非命令行以下代码 要控制CS IP 然后用a命令a之后再逐行输入 再用t命令运行数据段 连续 起始位置为16倍数例如 123B0H ~ 123B9H 就可以是一个数据段 起始位置 123BH 长度10个字节累加前三个单元的方法mov ax,123BHmov ds,axmov al,0mov al,[0]mov al,[1]mov al...原创 2018-12-12 20:10:52 · 176 阅读 · 0 评论 -
内存单元 地址寄存器
mov指令可以完成两种传送1 将数据直接送入寄存器(CS IP除外) 2 将一个寄存器的内容送入另一个寄存器那么 如何将内存单元中的内容送入一个寄存器中呢?例题 已知内存单元情况 10000H 23 10001H 11 10002H 22 10003H...原创 2018-12-12 19:56:24 · 1158 阅读 · 0 评论 -
g p [bx] 段前缀 DOS安全区域
在debug分步运行程序时, 如果想快进到CS:0012 前面的跳过 怎么办? g 0012分步运行到循环 想快进到循环结束, p 当然也可以用g 后面的标号 我们想 mov al,[0] 在debug中这样写可以, 但是在编译器中这样写, 会被翻译成mov ax,0于是 方法1 mov bx,0 ...原创 2018-12-17 18:17:14 · 132 阅读 · 0 评论 -
多个段的程序
程序取得空间的方法 1 l加载时提分配空间 2 执行过程中向系统申请(第二种先不讨论) 如果要将 cs:10 ~ cs:2F 当栈用 则SS:SP 要指向栈底 指向 CS:30下面是多个段的程序assume cs:code,ds:data,ss:stackdata segment dw 0123h,0456h,0789h,0abch,0defh,0...原创 2018-12-17 18:39:25 · 117 阅读 · 0 评论 -
and or 字符型数据 灵活定位内存地址
and用来抠0 or用来填1al第6位设为0的方法是 and al,10111111B al第7位设为0的方法是 and al,01111111B 用单引号写的字符型数据 'unIX' 在编译的时候 会被转化为相应的ASCII码字母A的ascii码是 41H 也就是65 01000001小写字母的ascii码是61H 0110...原创 2018-12-17 19:05:02 · 227 阅读 · 0 评论 -
双层循环 利用栈存储变量算子
进入内层循环前 1把cs 压入栈 2重新赋值cs 3 内层循环 4 从栈中取出cs 5 loop 外层 ...原创 2018-12-17 19:32:38 · 132 阅读 · 0 评论 -
用 word ptr 和 byte ptr 指明内存单元的长度
以下的操作 都是字操作mov ax,1 mov bx,ds:[0] mov ds,ax mov ds:[0], ax inc ax add ax,1000以下的操作 都是字节操作mov al,1mov al,blmov al,ds:[0]mov ds:[0], alinc a...原创 2018-12-17 19:53:56 · 1083 阅读 · 0 评论 -
word ptr 按字处理 byte ptr按字节处理
名字 seg:60 +00 DEC 单位 +03 Huawei 年龄 +0C 34 收入 +0E 7000 产品名 +10 PDP 任务 将年龄改为 35 , 将产品名改为 COMmov ax,segmov ds,axmov bx,60mov word ptr [bx].0ch, 35 ...原创 2018-12-17 20:32:33 · 3828 阅读 · 0 评论 -
第一章 基础知识
不管是显卡还是网卡 还是什么的, 只要和主板相连的 都被CPU当作内存来对待 用外部主线(简称主线)来连接 CPU还有自己的内部主线, 连接 寄存器 运算器 控制器. 其中的寄存器, 是玩家操控CPU的手段 汇编指令 意义 高级语言 mov ax,18 将18 放入寄存器 AX AX=18 add ax,8...原创 2018-12-11 20:27:35 · 106 阅读 · 0 评论 -
段式地址 寄存器
8086CPU 它的位数是16位 但是地址总线是20位的于是它用两个16位地址合成来表达一个20位的地址 (用地址加法器加工的)第一个16位叫段地址 第二个16位地址叫偏移地址所以 物理地址= 段地址*16+偏移地址============================================================CPU的工作原理 重点以8086CPU为...原创 2018-12-11 21:29:25 · 502 阅读 · 0 评论 -
除法div
格式 : div reg 或 div 内存单元 被除数默认放在 DX和AX中如果除数为8位 则 AX当被除数如果除数为16位 则DX*10000+AX 当被除数 DX放高十六位 AX放低十六位除数放在一个reg或者一个内存单元中例题 求100001 / 100 既186A1H / 100 ...原创 2018-12-17 20:51:08 · 930 阅读 · 0 评论 -
windows 操作系统下 进入debug r d e u t a
下载dosbox下载debug.exe 这个放在某个盘根下 方便点双击dosbox在dos环境下 输入 mount c K:\ c: debug用r命令 显示寄存器 r这时会显示各个寄存器的信息...原创 2018-12-12 18:10:36 · 441 阅读 · 2 评论