- 博客(245)
- 收藏
- 关注
原创 《Fundamentals of Electromigration-Aware IntegratedCircuit Design》笔记
1、对高可靠性的需求是不断缩小尺寸的主要驱动力之一,利用晶圆中存在缺陷的特定概率。为了正常工作,IC必须位于晶圆上没有缺陷的部分。较小的芯片和较小的晶体管尺寸增加了它们位于缺陷之间的概率,从而提高了产量。除了减少单个晶体管的空间需求所带来的好处之外,追求更小结构的背后还有其他驱动因素。小型场效应晶体管(FET)具有较低的栅极电容,这是晶体管工作期间对其充电的有利特性。因此,由于所需的电荷减少,场效应晶体管可以在相同电流下以更高的频率充电。2、要降低功率耗散,特别是克服散热问题,需要做大量的工作。要做到这一点
2025-03-31 20:37:27
726
原创 Visual Studio2019调试DLL
3、将DLL设置为启动项目之后,按F5启动调试。1、编写好DLL代码之后,对DLL项目的属性进行设置,选择待注入的DLL,如下图所示。4、在dll中打断点,即可对dll进行调试,如下图所示。
2025-01-17 21:33:26
1325
原创 《面向对象的设计与分析》(邵维忠著)读书笔记
2)如果一个已经定义了的类恰好可以描述当前考虑对象的一个局部,提供了该对象所含的一部分属性和操作,则可以用已定义类的对象作为当前考虑的整体对象的一个部分对象,从而不必在整体对象中再重复地描述这些属性与操作;,如:系统中的对象是对现实世界中事物的抽象;6.1、对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位,由一组属性和施加于这组属性的一作操作构成,属性和操作是构成对象的两个主要因素,属性是用来描述对象静态特征的一个数据项,操作是用来描述对象动态特征(行为)的一个动作序列。
2025-01-09 15:22:59
575
原创 《软件工程-北京大学》 学习笔记
16、面向对象方法的基本思想:1)从现实世界中客观存在的事物出发建立软件系统——强调直接以问题域中的事物为中心来思考问题、认识问题,并根据这些事物的本质特征,把它们抽象地表示为系统中中的对象,作为系统的基本构成单位。13、对象的属性和操作结合为一体,构成一个独立的实体,对外屏蔽其内部细节(封装),对事物进行分类,把具有相同属性和相同操作的对象归为一类,类是构成这些对象的抽象描述,每个对象是它所属类的一个实例。19、用况:是对一组动作序列的描述,系统执行这些动作产生对特定的参与者一个有值的、可观察的结果。
2024-11-20 14:21:44
1054
原创 《面向对象分析与设计》读书笔记
1、复杂系统不仅仅是层次化的,而且这种层次化也代表了不同的抽象级别,一层构建于另一层之上,每一层都可以分开理解。在每一层都可以发现一组设备,相互协作,为更高的抽象层提供服务。2、同一层抽象中的所有部分之间,以某种定义良好的方式进行交互。在不同抽象层的不同部分之间,存在着清晰的关注点分离。 3、复杂系统存在着5个共同属性:1)层次结构:许多复杂系统都有几乎可分解的层次结构,所有系统都有子系统,所有系统都是更大系统的组成部分;2)相对本原;3)关注点分离:组
2024-11-15 16:47:33
323
原创 《面向对象是怎样工作的》笔记
16、在推进软件开发时,需要进行如下三个阶段的工作:1)业务分析:整理现实世界的工作的推进方法,在此阶段,需要整理好如何对现实世界中的工作进行职责分配,以及如何推进工工作。14、活动图经常被用来表示现实世界的业务流程,虽然现实世界的工作流程也可以通过时序图和通信图来表示,但在分析实际的工作情况时,相比于人物的职责分配,理解整体流程可能更为重要。7、计算机的工作并不只是执行机器语言的命令,还有读写硬盘、使用打印机打印、与其他联网的计算机进行通信、等待来自键盘和鼠标的输入等等,需要与外部进行很多交互。
2024-09-27 17:00:55
934
原创 《软件架构基础》读书笔记
代理拓扑结构中的组件不知道初始事件的装填甚至不知道原始业务请求的状态,因此拓扑结构中没有角色负责重启业务事务(初始事件),也不知道初始事件是从何处停止的。6、基于服务的架构风格:基于服务的架构是微服务架构风格的混合,由于其架构的灵活性,被认为是最实用的架构风格之一。4.5网络拓扑结构从不改变:该谬误指的是整个网络的拓扑结构(包括网络中使用的所有路由器、集线器、交换机、防火墙、网络和设备),架构师假定这些整体网络拓扑结构是固定的不会发生变化的,但实际上它一直在改变。根据规模和复杂度的不同,
2024-09-06 22:19:52
953
原创 Raft学习笔记
no-op空日志属于领导者任期的日志,多数派达成后立即提交,致使no-op空日志前面的那些未提交的日志全部间接提交了。两阶段提交协议是最经典的原子提交协议,其基本思想是:既然仅发送一个请求不足以知道其他节点是否成功提交事务,那么最直接的想法就是再增加一轮请求,先检查每个节点上的状态是否能够满足事务正确性,再进行事务操作。2)如果接收方发现发送方的任期陈旧,那么无论哪个过程,该RPC请求都会被拒绝,接收方如果将已知的最新任期回传给发送方,发送方知道自己的任期已经过期后,转变为跟随者状态并跟新其任期。
2024-08-30 11:38:57
958
原创 linux下使用xargs批量操作
2、将所有gz文件重命名为.gz.log2文件。3、将所有.log2文件改回为.gz文件。4、将所有的gz文件重命名为log2文件。
2024-08-28 17:02:34
407
原创 《加密与解密 》第四版读书笔记2
在Windows操作系统中,各个进程的内存空间是相互独立的,虽然能通过函数VirtualQueryEx/VirtualProtectEx查询、设置目标进程的内存信息和页属性,通过函数ReadProcessMemory/WriteProcessMemory对目标进程的内存空间进行读写,但是这样操作繁琐(例如获取一个二级指针的内容就需要2次跨进程读内存),更重要的是不能跨进程执行自己的代码。2.1.2 PE中的EAT:EAT输出表与IAT不同,它存放的不是函数地址,而是函数地址的偏移,使用时需要加上模块基址。
2024-08-09 19:25:47
721
原创 《加密与解密》读书笔记1
2.7、文件偏移与虚拟地址的转换:一些PE文见为减少体积,磁盘对齐值不是一个内存页0x1000,而是0x200,当这类文件映射到内存之后,统一数据相对于文件头的偏移量在内存和磁盘文件中是不同的。而那些磁盘对齐值0x1000与内存页相同的区块,同一数据在磁盘文件中的偏移与内存中的偏移相同,因此不需要转换。当PE文件被载入时,Windows加载器的工作之一就是定位所有被输入的函数和数据,并让正在载入的文件可以使用那些地址,这项工作是通过PE文件的导入表Import Table完成的。节表后面就是节的内容。
2024-08-08 07:35:31
814
原创 解决hook汇编代码时空间不足的一种方法
思路:如下图,使用两条jmp指令。原内存地址使用一条jmp指令跳转到新开辟的内存空间(VirtualAlloc或者VirtualAllocEx函数),在新开辟的内存空间完成处理之后再使用jmp指令跳转到原。内存地址合适的位置(通常是原内存处被hook为jmp指令的下一条指令的地址),这样只需要动一条jmp指令大小的空间,对原程序改动最小。参考链接:《51hook软件安全培训教程》
2024-07-29 07:26:15
190
原创 ollydbg找不到进程的一种解决办法
可以考虑通过OD打开进程进行附加,但是这个游戏本身是全屏的,如果通过OD打开全屏的游戏,在OD中下了断点之后,游戏进程是无法处理任何事件的,也就无法从游戏界面切换到OD界面中。OD在打开进程时还提供了参数选项,只需要在打开游戏时加上参数-window,就可以将全屏游戏缩小成窗口(有的游戏内没有提供改分辨率的选项,如我正在学习使用的剑侠情缘2白金版)。如图,OD附加找不到进程。
2024-07-26 07:58:22
801
原创 《设计模式之美》读书笔记2
2、分层与模块化:不同模块之间使用接口进行通信,模块之间的耦合很小,每个团队聚焦于一个独立的高内聚模块来开发,最终像搭积木一样将各个模块组装起来构成一个复杂的系统。统一的访问方式能够简化上层代码的编写,并且使代码更容易复用。除此之外,抽象和封装还能有效控制代码复杂性的蔓延,将复杂性封装在局部代码中,隔离实现的易变性,提供简单、统一的访问接口,其他模块使用会更简单。1、封装与抽象:封装了不同类型设备的访问细节,抽象为统一的文件访问方式,更高层的代码就能基于统一的访问方式,来访问底层不同类型的设备。
2024-07-22 15:15:06
428
原创 《设计模式之美》学习笔记1
模块化是构建复杂系统常用的手段,对于一个大型复杂的系统来说,没有人能够掌控所有的细节,因此将系统划分成各个独立的模块,让不同的人负责不同的模块,这样即使在不了解全部细节的情况下,管理者也能协调各个模块,让整个系统有效运转。不同的应用场景、不同阶段的需求背景下,对同一个类的职责是否单一的判定可能都是不一样的。大型重构指的是对顶层代码设计的重构,包括系统、模块、代码结构、类与类之间的关系等的重构,重构的手段有分层、模块化、解耦、抽象可复用组件等,使用的重构工具包括设计思想、原则和模式。
2024-07-20 16:32:04
446
原创 Windows PE文件浅析
4、数据目录:Windows下的可执行文件是PE中的一种,这种文件除了包含代码及数据段的相关数据以外还包含了许多与文件执行有关的其他数据。Windows操作系统在加载可执行文件时,会为这些具有不同属性怼的数据分别分配标记有不同属性的页面(当然,相同属性的数据可能会被放到同一个页面中),以确保程序运行时的安全。相对虚拟内存地址RVA是相对于基地址的偏移,几RVA是虚拟内存中用来定位某个特定未知的,该地址的值是这个特定位置距离某个模块基地址的偏移量。RVA是相对于模块而言的,VA是相对于进程而言的。
2024-07-18 08:08:49
660
原创 《面向对象分析与设计》读书笔记2
3、UML元素(包括包)之间的依赖关系是用一个虚拟的开房间头来表示的,箭头的尾部位于具有依赖性的元素(客户),箭头位于支持这种依赖的元素(提供者)。13、好的软件架构通常具有以下一些共性:1)它们由定义良好的抽象层构成,每层代表了一种内聚的抽象,提供了定义良好的、受控的接口,并且建立在同样定义良好的、受控的底层抽象设施之上。在某种程度上,系统的架构基本上与系统的最终用户无关,但是对于构建可理解、可扩展、可重新组织、可维护和可测试的系统而言,拥有“清晰的内部结构”是很关键的。8、分析关注的是行为而不是形式。
2024-07-10 15:57:07
810
原创 《面向对象分析与设计》学习笔记1
随着系统的演变,曾经被认为是复杂的对象就变成了基础对象,在这些基础对象的基础上构建更复杂的系统。24、关键抽象反映了问题域的抽象,而机制是设计的灵魂,在设计过程中,开发者不仅必须考虑单个类的设计,还需要考虑这些类的实例如何一起工作。2.1层次结构:复杂性常常以层次结构的形式存在,复杂的系统由一些相关的子系统组成,这些子系统又有自己的系统,如此下去,直到达到某种低层次的基本组件。18、类和对象的设计是一个增量、迭代的过程,坦白的说,除了那些最不重要的抽象,我们从来没有第一次就完全正确的定义一个类。
2024-07-05 15:04:42
572
原创 条件断点在找call中的应用
以TLBB为例,在2024.6.24附近左右的时间段,游戏窗口切换时就会有两个左右的call,在x64dbg下断点之后切换回游戏窗口,很难分辨出哪个是我们需要的动作引起的call,因此在send函数处下条件断点:$breakpointcounter % 4 == 3。断点启用后,成功找到了召唤坐骑的call。
2024-06-26 08:09:11
271
原创 UML与设计模式
节点是应用程序的部署单元。组合关系是用一条带实心菱形箭头的直线表示的,组合关系用于类图,特别用于表示实体对象关系,表达整体拥有部分的语义,组合关系是一种强依赖的特殊聚合关系,如果整体不存在了,则部分也将消亡。例如在分析一个商业过程的时候,对象的规模(粒度)大到如银行、工厂、商场的程度,不论它有多么巨大,只要我们认为它是对象,它与其他对象交互时就是一个整体,不能分割。换言之,通过一个场景,我们仅能得到对象的一个侧面的信息,如图2.4所示,如果以每一个场景为坐标(维度),那么对象实例就是对象在该坐标上的投影。
2024-06-15 10:59:50
1408
原创 《Intel开发手册卷3》读书笔记3
中断和异常是强制性的执行流的转移,从当前正在执行的程序或任务转移到一个特殊的称作句柄的例程或任务。当硬件发出信号时,便产生中断,中断的产生同正在执行的程序是异步的,即中断的产生是随机的。其用于处理处理器的外部事件,比如为外设服务的请求。使用INTn指令,软件也可以产生中断。异常是在处理器执行指令的过程中发现错误而产生的,比如除数为零。处理器可以检测出多种不同的错误,包括保护异常,页错误,内部机器错误。当处理器收到中断信号或检测到异常时,便挂起当前正在运行的进程或任务,而转去执行中断或异常处理例程。
2024-05-29 13:35:30
734
原创 《intel开发手册卷3》读书笔记1
1)实模式:8086的寄存器只有16位,我们也习惯于称8086的工作模式为1·6位模式。后续的CPU为了保持兼容性,在芯片上了电以后,还必须运行于16位模式之下。这种模式还有个正式的名字叫做实模式。在实模式下,程序是不能通过内存管理单元间接访问物理内存的,而是直接访问物理内存。访问方式是通过“段寄存器:段内偏移”这种形式,计算方式为: 物理地址 = 段寄存器
2024-05-13 19:03:15
922
1
原创 《intel开发手册卷1》学习笔记3
—Call(调用过程)和RET(从过程返回)指令允许从一个过程(或子例程)跳转到另一个过程(或子例程),并随后跳转回(返回)到调用过程。因此,字符串操作可以从较高的地址开始,然后向较低的地址移动,也可以从较低的地址开始,然后向较高的地址移动。LDS(使用 DS 加载远指针)、LES(使用 ES 加载远指针)、LFS(使用 FS 加载远指针)、LGS(使用 GS 加载远指针)和 LSS(使用 SS 加载远指针)将远指针从内存加载到段寄存器和通用通用寄存器中。目标操作数指定目标指令的地址(指令指针)。
2024-05-10 13:58:19
528
原创 x64dbg中类似于*.exe+地址偏移
在CE和xdb中,形如*.exe+数字偏移形式的地址被称为模块地址,CE附加到进程后点击查看内存,显示如下图。但是xdbg如何关闭,倒不是很清楚,不过最新版本的xdbg sub后面的就是绝对虚拟地址。CE中可以关闭,从而显示绝对的虚拟地址,如下图所示。
2024-05-09 23:47:04
488
原创 《intel开发手册卷1》学习笔记1
在 IA-32 处理器上运行的任何程序或任务都有一组资源,用于执行指令和存储代码、数据及状态信息。这些资源(如图 3-1 所示)构成了 IA-32 处理器的基本执行环境。英特尔 64 处理器支持 IA-32 处理器的基本执行环境,以及 IA-32e 模式下的类似环境,它可以执行 64 位程序(64 位子模式)和 32 位程序(兼容性子模式)。基本执行环境由处理器上运行的应用程序和操作系统或执行程序共同使用。地址空间:在 IA-32 处理器上运行的任何任务或程序都可以寻址最大 4 GB 字节(
2024-05-08 16:22:55
959
原创 《intel开发手册卷1》学习笔记2
向量 32 至 255 为软件定义中断,可用于软件中断或可屏蔽硬件中断。请注意,处理器还定义了几个不指向 IDT 中条目的额外中断;其中最著名的是 SMI 中断。异常被分类为故障、陷阱或中止,具体取决于异常的报告方式以及导致异常的指令是否可以在不丢失程序或任务连续性的情况下重新启动。1)故障— 故障是一种通常可以纠正的异常,并且一旦纠正,就可以重新启动程序而不会失去连续性。当报告错误时,处理器将机器状态恢复到开始执行错误指令之前的状态。
2024-05-08 14:23:07
904
原创 MFC DLL注入失败一些错误总结
以下是dll绝对路径中均含有中文字符,会报错误:注入dll失败 Force load module failed:没有查找到地址OLEAUT32!尽量确保编程时路径全为英文字符,中文字符实在是难搞。
2024-05-07 23:34:11
772
原创 《深入解析Windows操作系统》第12章读书笔记
2、可恢复性:原子性事务是一种用来处理数据库修改的技术,其目标是,系统的失败不会影响到数据库的正确性或者完整性。原子性事务的基本原则是,有些称为事务的数据库操作,是“要么全部完成,要么全部不做”的任务(事务被定义为一个“改变了文件系统数据护理者改变了卷目录结构的IO操作”)。构成一个事务的那些独立磁盘更新必须按照原子方式来执行,也就是说,一旦失误开始执行,它的所有磁盘更新就必须被完成。1、日志系统:一个数据库或者日志文件系统实现的日志语义,经常需要跟踪那些在文件或者项目包含的数据或者元数据上所做的修改。
2024-05-07 14:20:46
269
原创 《深入解析WIndows操作系统》第10章读书笔记
对于运行在内核中的代码,我们期望它比用户模式代码有更少的递归调用,同时能更充分地利用变量,并保持较小的栈缓冲区,因为内核栈位于系统地址空间中(通常是所有进程共享的),因此它们的内存使用会对整个系统带来较大的影响。这正是字节偏移量域的目的。4)如果PTE中的“有效”位是空白的,则会触发一个页面异常(内存管理错误),操作系统的内存错误处理器找到该页面并试图将其变成有效的页面,然后进行第5步,如果该页面不能或者不应该变成有效位(如页面保护错误),则内存管理错误处理器产生一个访问违例或者错误检验。
2024-05-07 12:46:14
666
原创 《深入解析WIndows操作系统》第9章读书笔记
NOR闪存在操作上最接近RAM,它的每个字节都可以被独立地寻址,而NAND闪存则被组织成以块为单位,就像磁盘一样。NOR类型的闪存用来设计保存计算机主板上的BIOS,而NAND类型的闪存被用在SSD中。相比较于RAM和磁盘,闪存应当被视为一种有限生命周期的存储介质。闪存也无法被原地更新,再写入一个快之前,整个块都必须被擦除(即使是NOR类型的闪存也是这样)。Windows包含了多路径IO的支持,以便吧多路径磁盘按照单个磁盘来管理,但是它依赖于一个叫DSM模块(与设备相关的模块)的第三方驱动程序。
2024-04-30 16:29:52
356
原创 《深入解析Windows操作系统》第8章读书笔记
需要注意的是,在发出了一个异步IO操作以后,该线程必须非常小心,在IO设备完成IO操作之前,应用程序的这个线程不能访问该IO操作中的任何数据,并且这个线程必须监视一个“可在该IO操作完成时能被信号通知到的同步对象(事件对象、IO完成端口或者对象本身)”,以便将 线程对该IO的数据的访问操作 和 IO请求 同步起来。1、同步IO:应用程序发出的大多数IOI操作都是同步的(默认的),也就是说,在IO设备执行数据操作的过程中,应用程序一直等待,直到IO操作完成,设备返回一个状态码。
2024-04-30 15:46:45
208
原创 《深入解析Windows操作系统》第7章读书笔记
然后存根调用RPC运行时过程,这些RPC运行时过程可以找到远程过程所在的RPC服务器、确定RPC服务器使用哪些传输机制、然后将参数序列化后的二进制流以RPC请求的方式发送给RPC服务器。重定向器将该操作传递给远程文件系统,RPC客户端上的存根过程与RPC服务器上的远程过程具有相同的函数名和函数参数(即两者的函数签名是一致的),但是存根过程(RPC客户端)并不处理所请求的操作,相反地,它(位于RPC客户端)将传递给它的参数进行序列化(参数一一取出来并转变成一个二进制的数据流)以便通过网络传输到RPC服务端。
2024-04-30 11:56:06
419
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人