状态寄存器

缓冲区溢出实例(一)--Windows

不羁的心 提交于 2019-11-28 06:16:38
一、基本概念 缓冲区溢出:当缓冲区边界限制不严格时,由于变量传入畸形数据或程序运行错误,导致缓冲区被填满从而覆盖了相邻内存区域的数据。可以修改内存数据,造成进程劫持,执行恶意代码,获取服务器控制权限等。 在Windows XP或2k3 server中的SLMail 5.5.0 Mail Server程序的POP3 PASS命令存在缓冲区溢出漏洞,无需身份验证实现远程代码执行。 注意,Win7以上系统的防范机制可有效防止该缓冲区漏洞的利用: DEP:阻止代码从数据页被执行; ASLR:随机内存地址加载执行程序和DLL,每次重启地址变化。 二、实验环境准备: SLMail 5.5.0 Mail Server ImmunityDebugger_1_85_setup.exe mona.py 下载地址: https://slmail.software.informer.com/download/ https://www.softpedia.com/get/Programming/Debuggers-Decompilers-Dissasemblers/Immunity-Debugger.shtml https://github.com/corelan/mona mona手册 https://www.corelan.be/index.php/2011/07/14/mona-py-the

C# ModBus 读取数据

喜你入骨 提交于 2019-11-28 05:39:04
简单介绍:   项目上需要与多家公司做接口对接。我们提供接口的有,其他公司提供的接口也有。所有的接口全部对接完了,遇到一个非常棘手的问题,需要获取甲方船厂设备上的状态,就给了一个文档,文档上写了IP、端口、协议、一些地址,没有API文档,拿到手上一面懵逼,这怎么玩儿。。。。 文档如下: 百度百科:   Modbus是一种串行 通信协议 ,是Modicon公司(现在的 施耐德电气 Schneider Electric)于1979年为使用 可编程逻辑控制器 (PLC)通信而发表。Modbus已经成为工业领域通信协议的业界标准(De facto),并且现在是工业电子设备之间常用的连接方式。   看上去好像跟Socket差不多,本身又不是工业领域出身的,大概知道是一种工业领域通用的一套通信标准,下面直接上DEMO示例 第一步:下载类库 使用的类库已上传百度云盘: 链接:https://pan.baidu.com/s/1JtaGC0r17jjnQPMhkMKRJg 提取码:wagl 第二步:引入类库 第三步:引入命名空间 1 using HslCommunication.ModBus; 2 using HslCommunication; 第四步:初始化对象 1 初始化方式一、 2 private ModBusTcpClient busTcpClient = new

(1)——计算机硬件组成

生来就可爱ヽ(ⅴ<●) 提交于 2019-11-28 03:10:30
一、CPU 功能:获取程序指令、对指令进行编码、执行。 (1)程序控制:通过执行指令来控制程序执行顺序。 (2)操作控制:一条指令需要有若干操作信号操作对应部件按指令进行操作。 (3)时间控制:对操作信号的出现时间、持续时间及出现时间顺序进行严格控制。 (4)数据处理:cpu根本任务; 组成:运算器、控制器、寄存器、内部总线; 二、运算器:接受 控制器 的命令完成计算机的各种 算术 和 逻辑运算 。 (1)算术逻辑单元(ALU):负责处理数据,实现数据的算术运算和逻辑运算。 (2)累加寄存器(AC):通用寄存器,为ALU提供一个工作区,存放运算结果。运算器至少有一个累加寄存器。 例:减法运算,先将被减数放到AC中,再从内存存储器中取出减数同AC的内容相减,并将结果放到AC中。 (3)数据缓冲寄存器(DR) 1)主要作用:作为CPU和内存、外部设备之间数据传输的中转站和操作速度上的缓冲; 2)单个累加器结构的运算器,数据缓冲器可作为操作数寄存器; 3)存放和隔离对内存存储器进行读写指令和数据; (4)状态条件寄存器(PSW):保存由算术指令、逻辑指令和测试结果建立各种条件码内容,只要分为:状态标志和控制标志; 三、控制器:控制整个CPU的工作,包括处理异常事件。 组成:指令控制逻辑、时序控制逻辑、总线控制逻辑、中断控制逻辑。 (一)指令控制逻辑——工作流程:取指令、指令译码

汇编基础知识

邮差的信 提交于 2019-11-27 23:46:34
************************************************************************************************** 寄存器 ************************************************************************************************** 1. 通用寄存器   通用寄存器包括了8个16/32位的寄存器:AX/EAX、BX/EBX、CX/ECX、DX/EDX、SP/ESP、BP/EBP、DI/EDI及SI/ESI。其中AX/EAX、BX/EBX、CX/ECX、DX/EDX在一般情况下作为通用的数据寄存器,用来暂时存放计算过程中所用到的操作数、结果或其他信息。它们还可分为两个独立的8位寄存器使用,命名为AL、AH、BL、BH、CL、CH、DL和DH。这4个通用数据寄存器除通用功能外,还有如下专门用途:   AX/EAX作为累加器用,所以它是算术运算的主要寄存器。在乘除指令中指定用来存放操作数。另外,所有的I/O指令都使用AX或AL与外部设备传送信息。   BX/EBX在计算存储器地址时,可作为基址寄存器使用。   CX/ECX常用来保存计数值,如在移位指令、循环指令和串处理指令中用作隐含的计数器。DX在作双字长运算时

探究为什么FreeRTOS 有些API不能在中断服务函数中调用,转而需要调用带ISR的版本

左心房为你撑大大i 提交于 2019-11-27 15:46:49
  用了好久的FreeRTOS以前只是知道,如果在中断服务程序中调用某一些FreeRTOS的API函数时需要注意,如果有ISR版本的一定要调用,末尾带ISR的函数,并且要调用系统的API函数,中断服务程序的中断优先级不能高于配置宏(configMAX_SYSCALL_INTERRUPT_PRIORITY)的值这是为什么呢。刚好今天受台风影响只能在家里窝着,所以就想着趁有时间看看这一部分的内容,研究一下为什么,那么废话不多说开干。   找了几个函数简化一些安全检查的内容再把一些宏函数替换后对比观察了下内容如下: TickType_t xTaskGetTickCount( void ) { TickType_t xTicks; { xTicks = xTickCount; } return xTicks; } /*-----------------------------------------------------------*/ TickType_t xTaskGetTickCountFromISR( void ) { TickType_t xReturn; UBaseType_t uxSavedInterruptStatus; portASSERT_IF_INTERRUPT_PRIORITY_INVALID(); uxSavedInterruptStatus =

C语言中的volatile

半城伤御伤魂 提交于 2019-11-27 15:27:05
1.volatile有什么含义?有什么用法? 官方定义是: 一个变量也许会被后台程序改变。 关键字volatile与const绝对独立。它指示一个变量也许会被某种方式修改,这种方式按照正常程序流程分析是无法预知的(例如,一个变量也许会被一个中断服务程序所修改)。这个关键字使用以下语法定义: volatile data-defiinition; 注:变量如果加了voletile修饰,则会从内存中重新装载内容,而不是直接从寄存器中拷贝内容。 2.编译器的优化 在本次线程内,当读取一个变量时,为了提高读取速度,编译器进行优化时有时会先把变量读取到一个寄存器中;以后,再读取变量值时,就直接从寄存器中读取;当变量值在本线程里改变时,会同时把变量的新值copy到该寄存器中,以保持一致。 当变量因别的线程值发生改变,上面寄存器的值不会相应改变,从而造成应用程序读取的值和实际的变量值不一致。 3.常见的问题 (1)说明关键字volatile有什么含意,并给出例子。 volatile表示被修饰的符号是易变的。告诉编译器不要随便优化我的代码!! *一个硬件寄存器 *中断中用到的变量 *线程之间共享变量 volatile int a = 10; while((a & 0x01) == 0); #define P_UART_STATUS ((const volatile unsigned int *

闪存寄存器

风格不统一 提交于 2019-11-27 12:52:25
附:stm32闪存编程手册链接https://wenku.baidu.com/view/586bac0c763231126edb11ac.html 1.闪存访问控制寄存(FLASH_ACR) 地址偏移:0x00 复位值:0x0000 0030 各位描述: 2.FPEC键寄存器(FLASH_KEYR) 地址偏移:0x04 复位值:xxxx xxxx 3.闪存OPTKEY寄存器(FLASH_OPTKEYR) 地址偏移:0x08 复位值:xxxx xxxx 4.闪存状态寄存器(FLASH_SR) 地址偏移:0x0C 复位值:0x000 0000 5.闪存控制寄存器(FLASH_CR) 地址偏移:0x10 复位值:0x0000 0080 6.闪存地址寄存器(FLASH_AR) 地址偏移:0x14 复位值:0x0000 0000 7.选项字节寄存器(FLASH_OBR) 地址偏移:0x1C 复位值:0x03FF FFFC 注意: 这个寄存器的复位数值与写入选项字节中的数值相关,OPTERR位的复位值与加载选项字节时对选项字节和它的反码进行比较的结果相关。 8.写保护寄存器(FLASH_WRPR) 地址偏移:0x20 复位值:0xFFFF FFFF 来源: https://blog.csdn.net/yigedaluobo/article/details/99676123

FreeRTOS 任务栈大小确定及其溢出检测

帅比萌擦擦* 提交于 2019-11-27 10:19:11
以下转载自 https://www.cnblogs.com/yangguang-it/p/7123727.html FreeRTOS 的任务栈设置 不管是裸机编程还是 RTOS 编程,栈的分配大小都非常重要。 局部变量,函数调用时的现场保护和返 回地址,函数的形参,进入中断函数前和中断嵌套等都需要栈空间,栈空间定义小了会造成系统崩溃。 裸机的情况下,用户可以在这里配置栈大小: 为什么是堆中的?因为我们采用的就是动态创建任务的方式。如果静态创建,就和我们自己开辟的空间有关,通常静态创建任务用数组作为容器,但是通常静态创建的方式我们都不使用。 FreeRTOS 的系统栈设置 上面跟大家讲解了什么是任务栈,这里的系统栈又是什么呢?裸机的情况下,凡是用到栈空间的地方 都是在这里配置的栈空间: 在 RTOS 下, 上面两个截图中设置的栈大小有了一个新的名字叫系统栈空间 ,而任务栈是不使用这里的空间的。 任务栈不使用这里的栈空间,哪里使用这里的栈空间呢?答案就在中断函数和中断嵌套。  由于 Cortex-M3 和 M4 内核具有双堆栈指针,MSP 主堆栈指针和 PSP 进程堆栈指针,或者叫 PSP 任务堆栈指针也是可以的。在 FreeRTOS 操作系统中,主堆栈指针 MSP 是给系统栈空间使用的,进 程堆栈指针 PSP 是给任务栈使用的。 也就是说,在 FreeRTOS 任务中

反射内存卡编程

一个人想着一个人 提交于 2019-11-27 08:08:49
反射内存卡编程 基本 RFM5565 反射内存写入和读取操作需要很少或根本不需要编程知识。反射内存板上电后进入功能模式。用户将需要访问 PCI配置寄存器(基址寄存器 0,1,2 和 3)获取系统 BIOS 分配寄存器组和反射内存的基址。反射内存的寄存器组的基址和内存地址可以比较随意,。对于超出了基本的设置,如启用或禁用中断或 DMA 周期的操作,用户必须知道三个寄存器组内具体寄存器分配,本章提供的这些信息。 这三个寄存器组如下: PCI 配置寄存器 本地配置寄存器 反射内存控制和状态寄存器 PCI 配置寄存器 PCI 配置寄存器位于 256 字节的 PCI 配置空间,它遵循 PCI 规范V2.2 定义的模板。第一个 64 字节的 PCI 配置空间完全由预定的标头组成的。在该区域中,每个设备只实现必要和相关的寄存器。然而,所有的寄存器和位功能存在必须符合 PCI 规范的定义。除了第一个64 字节边界,每个设备都可以实现额外的设备独特的寄存器。虽然 PCI 配置寄存器可在任何时候访问,但一般他们都很少被用户修改。 表 3-1 PCI 配置寄存器 来源: https://blog.csdn.net/weixin_43549463/article/details/99586126

重学计算机组成原理(五)- \"旋转跳跃\"的指令实现

不问归期 提交于 2019-11-27 06:21:06
CPU执行的也不只是一条指令,一般一个程序包含很多条指令 因为有if…else、for这样的条件和循环存在,这些指令也不会一路平直执行下去。 一个计算机程序是怎么被分解成一条条指令来执行的呢 1 CPU如何执行指令 CPU里差不多几百亿个晶体管 实际上,一条条计算机指令执行起来非常复杂 好在CPU在软件层面已经为我们做好了封装 对于程序员来说,我们只要知道,写好的代码变成了指令之后,是一条一条 顺序执行 不管几百亿的晶体管的背后是怎么通过电路运转起来的 逻辑上,我们可以认为,CPU其实就是由一堆寄存器组成的 而寄存器就是CPU内部,由多个触发器(Flip-Flop)或者锁存器(Latches)组成的简单电路。 触发器和锁存器,其实就是两种不同原理的数字电路组成的逻辑门 如果想要深入学习的话,可以学习数字电路的相关课程 N个触发器或者锁存器,就可以组成一个N位(Bit)的寄存器,能够保存N位的数据 比方说,我们用的64位Intel服务器,寄存器就是64位的 CPU里有很多种不同功能的 1.1 寄存器 寄存器(Register),是中央处理器内的其中组成部分。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和地址。在中央处理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序计数器。在中央处理器的算术及逻辑部件中,包含的寄存器有累加器。 在计算机体系结构里