自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Bit和Byte的历史

他认为,我们身边的所有信息,都可以用一串二进制数来表示,而Bit正是这些信息的最小单位。我刚接触到Bit这个概念的时候,是在2011年,我刚上高中,家里买了第一台笔记本电脑,当时的CPU还是Intel第一代酷睿i系列称霸PC市场的时候,主流内存还只有2GB,而ISP运营商的网速带宽,普遍还在4Mbps~8Mbps。的行业规定,但在当时并非如此,当时定义:Byte是一串连续的Bit组成的二进制数据,有可能是6 Bits构成1Byte,也有可能是12 Bits构成1Byte。”,那个学生摇摇头。

2025-09-28 11:15:29 641

原创 用哪个GCC版本编译你的GLIBC版本,你了解吗?【Section 3(final)】

glibc的编译选项还有很多,要把所有选项的特性搞清楚,需要花费不少时间,但也许正是因为这样的学习摸索的过程,才让你的能力和知识,有了长足的进步。

2025-06-26 16:46:49 1067

原创 用哪个GCC版本编译你的GLIBC版本,你了解吗?【Section 2】

至此,对于GCC和GLIBC的版本发布特点和编译兼容性问题如何解决,应该有了比较清醒的认知,以后面对编译问题,我们也能更加从容的解决了。

2025-06-24 17:48:15 1196

原创 用哪个GCC版本编译你的GLIBC版本,你了解吗?【Section 1】

的确,版本众多,每个主版本支持的重大特性也不同,因此拿到某个版本的GLIBC库后,用哪个GCC版本对其进行编译,咋一看,一头雾水。不过每个GLIBC版本的源码Pack包中,都会有INSTALL文件进行依赖说明(但也无法避免我开头所讲的,用gcc-13.3.0编译glibc-2.39报错的问题)。下一节讲讲GLIBC各版本特性,未完待续。

2025-06-23 23:00:59 1447

原创 文件内存映射分析(Windows VS Linux)【Section 2】

对映射的虚拟内存地址不可被访问(既不能读、写,也不能执行)。啧,这个也有点意思。:可执行权限,这个有点意思,待会儿重点讨论下。:对映射的虚拟内存地址读权限。:对映射的虚拟内存地址写权限。

2025-06-20 23:21:55 482

原创 跨平台输出日志封装

Log API

2025-06-16 12:53:04 426

原创 【拆解】指针和const属性

当指针引入const属性后,情况会变得比较复杂,但是学习C语言,学会正确使用const非常重要,大学时可能不以为意,但是工作后,你越深有体会!

2025-06-15 14:27:18 395

原创 【拆解】数组指针 & 指针数组

【代码】【拆解】数组指针 & 指针数组。

2025-06-14 23:36:06 239

原创 文件内存映射分析(Windows VS Linux)【Section 1】

【代码】文件内存映射分析(Windows VS Linux)【Section 1】

2025-06-13 11:21:49 1117

原创 Linux下含有中文日志输出到终端显示不出来

今天遇到一个中文日志输出到终端显示不出来的问题。用户要升级操作系统,由redhat7.9升级到redhat8.6x86_64的环境。升级完后,交易服务端程序启动过程中,预期是会在终端输出一些或的日志信息,用于提示服务端程序启动过程中的状态,日志信息中包含中文字符,程序中是通过类似于的方式输出的,中文编码是宽字符,使用%ls输出,预期的输出效果如图1所示,但实际输出效果如图2所示。之前对于中文字符的编码使用这块,没怎么研究过,因此借此机会,定位和记录下排查过程。

2024-11-08 17:52:59 2224

原创 Arm架构函数调用和栈结构分析(1)

经过对示例代码的每一个汇编指令的详细解析,我们现在能够构建出Arm架构下的函数调用和栈结构了,后期我会补上从f 0到f 3调用栈的栈结构图,届时就能一目了然了!在下一篇文章中,我将探究main函数执行之前,glibc做的初始化工作究竟有啥?

2024-11-07 10:18:26 2153

原创 让你在Wireshark中的数据包好看点(Lua脚本调试)

假设我们的私有协议,包含消息头和消息体,消息头是一个POD类型的结构体,定义如下// 消息长度// 功能标识// 位域低3位// 位域高5位union {union {struct// 低3字节当uint32_t使用,业务中代表消息体的长度结构体在解析时,需要注意以下几点位域的解析(位操作,还好)联合体的解析(C++写习惯了,初次遇到uint24很不习惯)字节序(大小端)

2024-11-04 20:39:45 783

原创 偷梁换柱(Linux下的hook技术)

如果是自己实现的API,那调试起来还好说,加些打印,加些日志,也能糊弄过去。在Linux端开发服务端程序,经常能遇到某个API被执行了,但是只看到执行后的效果,却不能明确是哪个线程执行的,更不清楚其执行路径。attach上去后,打好断点,然后等着复现,但是最大的问题是,灵活度受限,在必现的问题面前还好,但在偶现的问题面前,就显的力不从心。)的存在,导致不同设备,不同环境上运行相同的程序,加载起来的动态库符号地址都不一样,因此该地址需要进行计算,计算方法(以。实现hook非常的灵活,但有较高的学习门槛。

2024-10-29 14:19:40 816

原创 记一个zk io线程调用getaddrinfo触发的coredump

交易服务端是由C++开发的大型交易系统,使用ZkServer进行分布式部署,交易服务端通过ZooKeeper的C API与ZkServer进行交互。崩溃出现在服务端退出阶段,主框架正在执行服务的退出动作,而崩溃点在zk的do_io线程,在调用时,触发了SIGABRT信号(如图1图1。

2024-10-18 17:21:54 2330

原创 记一个_Unwind_Resume异常堆栈展开触发的coredump

交易服务端是由C++开发的大型交易系统,业务的实现是以动态库的形式,由平台端的中间件,统一通过dlopen的方式加载起来的。事发时,业务上正在做某笔委托的交易,内部触发了coredump,导致交易服务端(中间件平台)异常退出。问题出现在调用gcc运行时库libgcc_s.so.1的_Unwind_Resume(堆栈展开)方法时,内部抛出了abort。可疑点是,实际上在平台侧最外层(堆栈f 18),是有异常捕获的,但是似乎它失效了。

2024-10-11 17:01:44 2138

空空如也

空空如也

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

TA关注的人

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