logo
publist
写文章

简介

该用户还未填写简介

擅长的技术栈

可提供的服务

暂无可提供的服务

The Art of 64-Bit Assembly Volume 1学习:x86-64 栈段与 push 指令:从零理解

程序运行时,内存里有一块专门的区域叫"栈段"。你可以把它想成一摞盘子:CPU 里有一个专门的寄存器叫 RSP(stack pointer,栈指针),它的作用只有一个:始终记录当前栈顶的地址。程序刚开始运行时,操作系统会把 RSP 设置成栈内存区域里最后一个位置的地址。这里有一个很反直觉但很重要的事实:x86-64 的栈是向低地址增长的。也就是说,往栈里放数据,RSP 的值会变小;从栈里拿数据,RS

#学习#c++#开发语言
C++反汇编与逆向分析技术揭秘第2版学习:6.5 函数的返回值:返回地址与返回值是怎么回事

一句话记忆:返回地址管"回到哪",返回值管"带回什么"。下面用调试器里观察到的两组真实数据,看看前后寄存器和栈内存到底变了什么。调用之前: 当前要执行的是 ,它在地址 ,它的下一条指令在地址 。此时:内存里的数据是低位字节在前存放的(这叫小端序)。所以看内存里的字节,要倒过来读:而恰好就是的下一条指令的地址。这就证明了:call 压进栈里的,就是它自己的下一条指令的地址。同样的道理,参数倒过来读是

#c++#学习#开发语言
C++反汇编与逆向分析技术揭秘第2版学习:第六章函数是怎么工作的:返回地址与参数传递

问题 1:返回地址从哪来?不是编译器"记住"的,而是 CPU 在执行指令时,自动把"下一条指令的地址"压进栈里。函数最后执行 ,再把栈顶弹出来赋给 ,程序就回到了的下一条指令。问题 2:为什么要复制实参?调用者执行时,把实参的值复制了一份放到栈上,这份复制品就是形参。函数只认识栈上这一份,不需要知道调用者的变量在哪,也改不到调用者的变量。这样函数和调用者互不干扰,调用关系清晰。下面从零开始,一步一

#c++#学习#开发语言
C++反汇编与逆向分析技术揭秘第2版学习:第5章 流程控制语句的识别(从零理解版)

流程控制语句的识别分支循环共同基础if / if-elseif-else if-elseswitchcase 很少cmp + je 一串比较case 连续跳转表case 分散索引表或二分比较forwhiledo-whilecmp / test设置标志位jcc / jmp修改 EIP栈帧ESP 与 EBPCPU 本来只会"一条接一条往下执行"。要实现分支和循环,只需要两步配合: 的内部动作是:先算一

#c++#学习#开发语言
Pointers On C 学习:15.20 习题 1:fopen 的返回值不检查会怎样

题目:如果不检查的返回值是否出错,会发生什么?一句话:不检查,就是把"文件打不开"这个很容易处理的小问题,变成一个难以追查的大问题。从零理解:打开文件要靠操作系统帮忙,而操作系统可能拒绝你,原因很多:同样的树,用 Mermaid 画一遍:fopen 失败的原因文件不存在没有权限路径写错打开文件太多磁盘或系统问题这些情况在实际运行中一定会遇到,所以"文件打不开"不是例外,而是正常情况之一。 本质上是

#c语言#学习
C++新经典学习:从零理解 C 和 C++:语言起源 与 跑通第一个程序

C 语言并不是凭空出现的,它是从一门更早的语言"B 语言"演化来的。B 语言诞生于 1971 年,运行在一台叫 PDP-11 的大型机器上,作者是贝尔实验室的研究员 Ken Thompson,他还用 B 语言写出了 UNIX 操作系统。但是 B 语言功能太简单,很多事情做不了,所以 1972 到 1973 年间,同样在贝尔实验室工作的 Dennis Ritchie 在 B 语言的基础上,设计出了

#c++#学习#c语言
C++ Actor Framework学习:CAF 调度器(Scheduler)详解

CAF 运行时的一个核心设计是:把 NNN 个 Actor 映射到 MMM 条线程上运行,其中通常 N≫MN \gg MN≫M(Actor 的数量远远多于线程的数量)。这意味着 CAF 并不会给每一个 Actor 都分配一条独立的操作系统线程,而是让少量的线程去"轮流"执行大量的 Actor。用 CAF 写应用程序时,推荐的做法是把一个大任务拆分成很多个相互独立的小步骤,每个小步骤都实现成一个 A

#学习#c++
opencv打开摄像头ffmpeg推流到nginx-rtmp

基于opencv采集推流1.opencv采集rtsp解码 //可以基于usb 摄像机(调用系统驱动)和rtsp(调用ffmpeg 接口 转yuv加解码) 摄像机2.ffmpeg缩放转换像素格式3.ffmpeg编码H2644.ffmpeg推流rtmpsws_getCachedContext (像素格式转换 会清理之前的数据)1.struct SwsContext *context,2.int src

#opencv#nginx#音视频
算法导论第四版学习:第11章 哈希表(Hash Tables)

想象你有一本字典,要查某个单词,有两种方法:如果所有可能的键(key)都来自集合 U={0,1,…,m−1}U = \{0, 1, \ldots, m-1\}U={0,1,…,m−1},且 mmm 不太大,可以直接用一个长度为 mmm 的数组 TTT:2.2 三种操作三种操作都极其简单,每种只需 O(1)O(1)O(1) 时间:2.3 直接地址表的缺点如果键的全集 UUU 很大(比如所有 64 位

#算法#学习#散列表
Algorithms_4th学习:4.4 最短路径(Shortest Paths)

从顶点sss到顶点ttt的最短路径,是所有从sss到ttt的有向路径中,路径权重最小的那条。两个核心数据结构distTo[](最短距离)和edgeTo[](父边),是所有最短路径算法的基础。松弛操作是灵魂:每次对一条边做松弛,本质是在问"走这条边,能不能更新目标顶点的最短距离?Dijkstra 的贪心策略:每次优先处理"当前已知最短距离"的顶点,对非负权图保证正确性。优先队列的懒惰删除:C++ 的

#学习#算法#c++
    共 364 条
  • 1
  • 2
  • 3
  • 37
  • 请选择