自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(101)
  • 收藏
  • 关注

原创 PE——节表结构

联合体节表数据结构① Name:8个字节,内容可自定义,需要注意的是该名称并不遵守必须以"\0"结尾的规律,如果不是以"\0"结尾,系统会截取8个字节的长度进行处理.我们在读取的时候需要小心!可以使用char[9]然后拷贝8个字节② Misc:该节在没有对齐前的真实尺寸...

2022-03-11 15:27:53 330

原创 使用按位与运算(&)巧妙实现求模运算(%)

static int indexFor(int h, int length) { return h & (length-1);}我们在进行hash相关的计算操作时,经常会涉及到求模运算,如上面的算哈希映射位置的代码。前提:length是一个2的幂次方整数,这样,length-1 的二进制就是一个形如“0000111…”的数,比如,如果length=4,length-1=3,其二进制表示为“0011”,如果length=8,length-1=7,其二进制表示为“0111”,以此类推。将h

2022-03-10 15:44:17 505

原创 PE——PE基础结构分析

PE结构总体结构IMAGE_NT_HEADERS包含了标准PE头IMAGE_FILE_HEADER和可选PE头IMAGE_OPTIONAL_HEADER。//DOS头typedef struct _IMAGE_DOS_HEADER { WORD e_magic; WORD e_cblp; WORD e_cp; WORD e_crlc; WORD e_cparhdr; WORD e_minalloc; WORD e_maxalloc; WORD e_ss; WORD e_sp;

2022-03-08 16:38:23 395

原创 ubuntu20.04+windows10_1909显卡直通(GPU Passthrough)

休息的时候看到了Nvidia放开了个人显卡在虚拟机里使用的操作权限,就花了点时间研究了下,最终的目的是能在win虚拟机里流畅地打游戏~这里记录下踩过的坑。cpu支不支持虚拟化和你开没开虚拟化是俩玩意。网上的教程里都是让你敲命令检查cpu支不支持虚拟化,我一敲,支持,就没再管,可是后来VFIO开不开,研究半天才发现是CPU虚拟化没开,重新进bios开下就可以了。网上的很多教程在开了VFIO相关模块重启后,使用了lsmod去查vfio模块开没开,但是在ubuntu20.04系统里已经将VFIO模块内置在

2022-02-22 19:29:25 3376 2

原创 const char * 、char const *、 char * const 三者的区别

const char * ptr 等价于 char const * ptr定义一个指向const char的指针。不能通过ptr来修改所指向的内容,指针指向的内容不可变,但指针本身可以再赋值char * const ptr定义一个指向char的指针常数。即const指针,不能修改ptr指针,但是可以修改该指针指向的内容。...

2022-02-08 17:09:52 447

转载 汇编——数据定义伪指令助记符DB DD DQ DT以及全称

DB 定义的变量为字节型 Define ByteDW 定义的变量为字类型(双字节)Define WordDD 定义的变量为双字型(4字节)Define Double WordDQ 定义的变量为4字型(8字节)Define Quadra WordDT 定义的变量为10字节型 Define Ten Byte...

2022-02-07 16:38:44 4148

原创 汇编——32位汇编基础框架

代码.586.model flat,stdcalloption casemap:noneincludelib ucrt.libincludelib legacy_stdio_definitions.libincludelib User32.libincludelib Kernel32.libMessageBoxA PROTO hwnd:DWORD,lpText:BYTE,lpCaption:BYTE,uTyoe:DWORDExitProcess PROTO uType:DWORD.

2022-02-07 15:37:08 3810

原创 汇编——16位汇编&调试&一些练习代码

编译:ml 1.asm调试:debug 1.exe调试命令:r 查看当前位置代码;p 单步步过;t 单步步入;u 查看附近代码d 0b3b 查看0b3b位置内存;g 运行程序16位汇编代码基本结构assume cs:code,ds:datadata segmentbuffer db 'xxxx$'data endscode segmentrkmain proc mov ax,data mov ds,ax mov dx,offset buffer mov ah,09H .

2022-02-07 10:58:31 1031

原创 汇编——段寄存器

CS段只有16位,8086CPU有20根地址线,地址该如何存储呢?答:地址除以16(十进制),此时地址以0结尾(十六进制)作为段地址。IP:指令指针寄存器,存储了指令的偏移地址CS:代码段DS:数据段ES:拓展段(和DS使用功能差不多)SS:栈段...

2022-01-30 12:38:40 443

转载 #program once 和 #ifndef

#program once 和 #ifndef在写小demo的时候,注意到vs中会自动生成#program once;看别人写的代码的时候见到比较多的反而是#ifndef—#define—#endif;从字面上看两种方式会产生相同的效果:避免同一个文件重复包含多次,但知道两种方式的本质还是有必要的。#program once:“同一个文件”指存储在相同位置的文件,即物理位置下相同;当编译器意识到文件存储位置向同事便会跳过“副本文件”,仅仅编译一次该物理位置的文件;但如果发生拷贝情况,便会出现重复包含的情

2022-01-29 14:00:36 4668 2

原创 汇编——电路基础(计算机组成基础)

寄存器 = 一组锁存器地址线——决定取址范围控制线——CPU对外部器件的控制能力。例如决定是读是写(一般低电平是读)数据线——用来传输数据指令的概念 = 硬编码CPU的雏形

2022-01-29 13:57:56 921

原创 Visual Studio快捷键

编译&运行&调试Ctrl + F7 编译F5 运行Shift + F5 停止调试Ctrl + F5 运行(不调试)F9 下断点F10 单步步过F11 单步步入监视窗口 err,hr 显示错误码和错误说明。(或 工具——错误查找,手动输入错误码查找)编码创建函数声明/定义。(函数名右键——快速操作和重构——创建声明/定义)F12 跳转到定义Ctrl + F12 跳转到声明Alt + 方向键上下 整行移动一行代码...

2022-01-29 12:38:07 1482

原创 C语言与汇编——宏定义,头文件重复包含,内存申请和释放

.c文件 -> 替换 -> 编译 -> 链接 -> exe文件typedef 只能给变量类型起别名。而#define可以给任何东西起别名。头文件重复包含问题#pragma once也能避免同一个头文件被包含(include)多次一般由编译器提供保证:同一个文件不会被包含多次。注意这里所说的“同一个文件”是指物理上的一个文件,而不是指内容相同的两个文件。你无法对一个头文件中的一段代码作pragma once声明,而只能针对文件。内存申请和释放..

2022-01-19 17:49:22 753

原创 汇编基础——算术移位,逻辑移位,循环移位,带进位的循环移位

算术左移和逻辑左移一样都是右边补0逻辑右移只要将二进制数整体右移,左边补0即可。算术右移二进制数整体右移后,左边要补上符号位。算术左移和算术右移主要用来进行有符号数的倍增,减半;逻辑左移和逻辑右移主要用来进行无符号数的倍增。减半。...

2022-01-18 10:21:08 2948 2

原创 C——数组指针

为什么px 与*px的地址值是一样的?#include "stdafx.h"int main(int argc, char* argv[]){ int arr[16] = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 }; int(*px)[2]; //宽度:4 printf("%d\n", sizeof(px)); //赋值 px = (int(*)[2])arr; printf("%d\n", px); px++; .

2022-01-16 17:35:11 176

原创 C语言与汇编——字符串操作

常量区的概念

2022-01-06 16:34:33 99

转载 strcpy及memcpy的内存重叠处理

strcpy和memcpy同是一个类型的函数,但实质上却是不同的,他们的原型分别为:char *strcpy(char *dest, const char *src);void *memcpy(void *dest, const void *src, size_t count);当我们使用这两个函数时都会出现同样一个问题,内存重叠。那么我们就来分析一下内存重叠是如何产的。现在假设有char *d = dest; char *s = src;要复制count = 5个字符,如下图所示:1、第一种

2022-01-06 10:16:09 1544

原创 C语言与汇编——指针汇编相关

指针赋值&运算赋值++,–加减相减比较

2022-01-05 16:25:02 308

原创 C语言与汇编——switch语句反汇编;do...while语句反汇编;while语句反汇编;for语句反汇编

编译器会根据switch的分支个数来调整生成的汇编代码。例如:在vc6.0编译器中,当分支个数小于4时,switch语句和if语句翻译成的汇编代码没有区别;当分支个数大于等于4时,switch语句的汇编代码变成了jg [edx*4+第一个分支代码的内存地址],其中,edx为switch (x)语句中x与最小情况的差值。此时各分支的内存地址排列称为大表。switch语句的常量表达式顺序不影响生成的汇编代码。switch语句的常量表达式大小不影响生成的汇编代码。关键点:连续。...

2021-12-24 11:32:26 912

原创 c语言-结构体字节对齐

对齐参数和sizeof()vc6.0编译器默认对其参数为8对齐原则(以对齐参数为8为例)

2021-12-22 09:59:39 77

原创 C语言类型长度(int,long,long long)

不同系统下的C语言类型长度绝大部分64位的Unix,linux都是使用的LP64模型;32位Linux系统是ILP32模型;64位的Windows使用的是LLP64(long long and point 64)模型。

2021-12-21 16:38:49 1121

原创 c语言与汇编——参数/返回值/局部变量本质,数组反汇编

1、返回值是如何传递的?根据返回值类型,选择 正确大小的寄存器存储函数结果。2、参数传递的本质3、局部变量的内存分配4、数组的本质5、数组越界,基于缓冲区溢出的HelloWorldarr[6] = (int)HelloWord;这里相当于把HelloWord()函数的地址写到了堆栈中ebp+4的位置(本来应该存储的是CALL指令下一条指令的地址),导致Func()执行完ret时,eip变成了HelloWord()函数的地址。6、多维数组...

2021-12-21 16:20:47 215

原创 为什么中断上下文中不能睡眠

中断发生以后,CPU跳到内核设置好的中断处理代码中去,由这部分内核代码来处理中断。这个处理过程中的上下文就是中断上下文。为什么可能导致睡眠的函数都不能在中断上下文中使用呢? 首先睡眠的含义是将进程置于“睡眠”状态,在这个状态的进程不能被调度执行。然后,在一定的时机,这个进程可能会被重新置为“运行”状态,从而可能被调度 执行。 可见,“睡眠”与“运行”是针对进程而言的,代表进程的task_struct结构记录着进程的状态。内核中的“调度器”通过task_struct对进 程进行调度。但是,中断上下文却不是

2021-12-14 15:09:04 1149

原创 C语言与汇编——C语言基础与循环

1、变量的声明?什么是赋值?声明变量就是告诉计算机,我要用一块内存,你给我留着,宽度和存储格式由数据类型决定.计算机什么时候把这块内存给你,取决于变量的作用范围。如果是全局变量,在程序编译完就已经分配了空间,如果是局部变量,只有所在的程序被调用的时候,才会分配空间.全局变量如果不赋初始值,默认是0,但局部变量在使用前一定要赋初值(否则可能是垃圾值).2、类型转换MOVSX 先符号扩展,再传送.MOVZX 先零扩展,再传送.小转大:高位补符号位大转小:截去高位数据3、什么是表达式?表

2021-12-08 11:12:37 369

原创 c语言与汇编-内联汇编和调用约定

c语言与汇编-内联汇编和调用约定裸函数声明裸函数与普通函数的区别在于在函数前多声明了__declspec (naked)作用要讲裸函数的作用,就不得不提到裸函数与普通函数的区别裸函数与普通函数区别前面反汇编C语言的笔记里,我们可以得知一个普通空函数的反汇编代码并不少,保护现场、恢复现场等等都有,那么这些反汇编代码是如何产生的呢?答案是编译器会为我们产生这些反汇编代码相比之下,只要普通函数加上裸函数前缀转化为裸函数,编译器就会知道这个函数无需额外生成上面所说的保护现场、恢复现场等反汇编代码,

2021-11-22 16:22:46 410

原创 汇编基础-堆栈

2021-11-17 17:23:43 185

原创 汇编基础-JMP,CALL,JCC

汇编基础-JMP,JCCJMP指令JMP指令:修改EIP的值JMP指令只影响了EIP,不影响堆栈和其它通用寄存器JMP 寄存器/立即数 相当于 MOV EIP,寄存器/立即数CALL指令CALL指令和JMP指令都会修改EIP的值但CALL指令会将返回地址(CALL指令的下一条指令地址)压入堆栈因此也会引起esp的变化RET指令call调用跳转后执行完相关代码完要返回到call的下一条指令时使用ret指令ret指令相当于pop eip(但是不能这么写)CMP指令指令格式:CMP R/

2021-11-15 17:24:02 1439

原创 汇编基础-EFLAGS,ADC/SBB/XCHG/MOVS/STOS/REP

汇编基础-EFLAGSEFLAGS查看DTDEBUG中的EFLAGS的值,然后转换成二进制的形式,并取出CF/PF/AF/ZF/SF/OF的值需要记的几个标志寄存器的位置和名称CF进位标志CF(Carry Flag):如果运算结果的最高位产生了一个进位或借位,那么,其值为1,否则其值为0。PF奇偶标志PF(Parity Flag):奇偶标志PF用于反映运算结果中“1”的个数的奇偶性。如果“1”的个数为偶数,则PF的值为1,否则其值为0。AF辅助进位标志AF(Auxiliary Carry

2021-11-12 16:26:00 714

原创 汇编基础-通用寄存器,内存读写,堆栈

汇编基础-通用寄存器通用寄存器ESP(Extended Stack Pointer)拓展栈寄存器,用于存放栈顶指针。EBP(Extended Base Pointer)拓展基址指针寄存器,用于存放栈底指针。MOV指令ADD指令ADD 目标操作数,源操作数将源操作数加到目标操作数中,结果放到目的操作数中SUB指令SUB 目标操作数,源操作数从目的操作数中减去源操作数,结果放到目的操作数中AND指令AND 目标操作数,源操作数源操作数和目标操作数做与运算,结果放到目的操作数中OR

2021-11-10 17:38:26 794

原创 计算机计算2+3=?的详细过程

假设2存到了X中,3存到了Y中;X:0010Y:0011 0010 0011xor-------------------

2021-11-08 11:33:50 968

原创 [20211014.B64驱动培训]转发模型初始化+网卡挂载设备链+网卡各项配置初始化+网卡使能

DRV_FWD_Init():转发模型初始化FWD_CpuInfoInit():CPU信息初始化关键结构体:g_stDrvCpuInfo获取并设置CPU Mask到全局结构体;同时多核情况下设置Hash分流数为不小于数据核心数目的2的幂数;同时设置Hash掩码g_ulHashLenMask为分流数-1.FWD_SmInit():转发系统中的控制管理线程初始化DRV_Hdisk_ReadFlowLoad():??,先记录下使用的结构体:g_astFlowLoadSaveFWD_SmTime..

2021-10-25 19:22:45 112

原创 工作中遇到的专业术语缩写总结

SOW——statement of work,工作说明书CMO——configuration management officer,配置管理员CCB——Change Control Board,变更控制委员会QA——Quality Assurance,质量保证Scrum是迭代式增量软件开发过程,通常用于敏捷软件开发...

2021-10-25 14:29:54 1103

原创 [20211014.B64驱动培训]linux内核启动+驱动初始化+网卡初始化

ROM(Read Only Memory只读存储器),里面固化了初始化程序(可以理解成BIOS),帮我们检查硬件是否完好等。然后从启动盘启动(这些代码由Grub2放置的),包括boot.img,实模式切换到保护模式,kernel.img等,最后kernel.img会启动我们的操作系统内核内核启动start_kernel(),进行进程管理初始化INIT_TASK(init_task),中断初始化trap_init(),内存管理初始化mm_init(),调度模块初始化sched_init(),虚拟文件系统.

2021-10-14 20:39:08 216

原创 实模式切换到保护模式

关于 Gate A20 我的理解是:8086 地址线20根 -> 可用内存 0 ~ FFFFF寄存器却是16位,寻址模式为 segment(16位):offset(16位), 最大范围变成 0FFFF0(左移了4位) + 0FFFF =10FFEF后果是多出来了 100000 ~ 10FFEF (访问这些地址时会回绕到 0 ~ FFEF)80286 开始地址线变多,寻址范围大大增大,但是又必须兼容旧程序,8086在访问 100000 ~ 10FFEF时会回绕,但是 80286 不会 ,因为

2021-09-30 11:03:37 382

原创 x86架构CPU寄存器介绍

8086CPU组成(16位)CPU包括三个部分,运算单元、数据单元和控制单元。运算单元:运算单元只管算,例如做加法、做位移等等。但是,它不知道应该算哪些数据,运算结果应该放在哪里。数据单元:数据单元包括CPU内部的缓存和寄存器组,空间很小,但是速度飞快,可以暂时存放数据和运算结果。AX、BX、CX、DX、SP、BP、SI、DI。共8个16位通用寄存器。这些寄存器主要用于在计算过程中暂存数据。其中AX、BX、CX、DX可以分成两个8位的寄存器来使用,分别是AH、AL、BH、BL、CH、CL、

2021-09-30 09:38:13 1422

原创 DPDK-传统网络设备驱动包处理的流程

网卡设备收包网卡设备依据配置进行DMA操作网卡发送中断,唤醒处理器驱动填充读写缓冲区数据结构数据报文到达内核协议栈,进行处理如果最终的应用在用户态,数据从内核搬移到用户态;如果最终应用在内核态,在内核继续处理。...

2021-09-29 19:03:55 122

原创 数字证书基础

[此文档是着手处理数字证书模块前的准备工作,图片是网上找的]提出问题:1.非对称加密中公私钥都可以加密,那么什么时候用公钥加密,什么时候用私钥“加密” ?2.什么是数字签名,数字签名的作用是什么?3.为什么要对数据的摘要进行签名,而不是直接计算原始数据的数字签名?4.什么是数字证书,数字证书解决了什么问题?这篇文档,主要围绕数字签名和数字证书的原理以及它们的作用展开。1.什么是加密加密:对明文数据按某种特殊算法进行处理,使其成为不可读的一段代码,通常称为“密文“, 密文通过”密钥“解密后还原

2021-09-13 11:16:39 1868

原创 进程间通信

背景各进程的内存地址相互独立进程间的通信需要有操作系统的支持.共享存储Linux系统如何实现共享存储://注:通过“增加页表项/段表项”即可将同一片共享内存区映射到各个进程的地址空间中(第三章内容)// 通过 shm_open 系统调用,申请一片共享内存区int shm_open(......);// 通过 mmap 系统调用,将共享内存区映射到进程自己的地址空间void * mmap (......);为避免出错,各个进程对共享空间的访问应该是互斥的。各个进程需要自己来实现

2021-09-07 11:31:06 1865 1

原创 qt应用打包成deb安装包

制作deb包准备要打包的文件,存放目录如下|——MyDeb-deb |————usr |————local |——.sslvpn |——应用具体文件(包括bin,lib,启动脚本等.安装后应用就在/usr/local/.sslvpn) |————share |————icons |——deb.png(图标文

2021-09-06 14:23:15 1271

原创 qt应用QtConcurrent多线程启动失败

问题背景:在arm环境下测试客户端时,为了测试统信,银河麒麟两种系统.在arm服务器上起了一个虚拟机,测试发现虚拟机中客户端功能异常,一些工作线程未工作,日志也未打印.问题定位:pstree 问题进程id查看当前面运行的各进程,对比代码发现,使用QTConcurrent启动的线程有几个未正常启动.查询资料后发现,QTConcurrent使用了QThreadPool线程池创建的线程,而此线程池中的最大线程数默认值为QThread::idealThreadCount()与cpu核心数目一致.而..

2021-09-06 10:06:53 702

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除