- 博客(6)
- 收藏
- 关注
原创 Linux下含有中文日志输出到终端显示不出来
今天遇到一个中文日志输出到终端显示不出来的问题。用户要升级操作系统,由redhat7.9升级到redhat8.6x86_64的环境。升级完后,交易服务端程序启动过程中,预期是会在终端输出一些或的日志信息,用于提示服务端程序启动过程中的状态,日志信息中包含中文字符,程序中是通过类似于的方式输出的,中文编码是宽字符,使用%ls输出,预期的输出效果如图1所示,但实际输出效果如图2所示。之前对于中文字符的编码使用这块,没怎么研究过,因此借此机会,定位和记录下排查过程。
2024-11-08 17:52:59
2091
原创 Arm架构函数调用和栈结构分析(1)
经过对示例代码的每一个汇编指令的详细解析,我们现在能够构建出Arm架构下的函数调用和栈结构了,后期我会补上从f 0到f 3调用栈的栈结构图,届时就能一目了然了!在下一篇文章中,我将探究main函数执行之前,glibc做的初始化工作究竟有啥?
2024-11-07 10:18:26
1865
原创 让你在Wireshark中的数据包好看点(Lua脚本调试)
假设我们的私有协议,包含消息头和消息体,消息头是一个POD类型的结构体,定义如下// 消息长度// 功能标识// 位域低3位// 位域高5位union {union {struct// 低3字节当uint32_t使用,业务中代表消息体的长度结构体在解析时,需要注意以下几点位域的解析(位操作,还好)联合体的解析(C++写习惯了,初次遇到uint24很不习惯)字节序(大小端)
2024-11-04 20:39:45
557
原创 偷梁换柱(Linux下的hook技术)
如果是自己实现的API,那调试起来还好说,加些打印,加些日志,也能糊弄过去。在Linux端开发服务端程序,经常能遇到某个API被执行了,但是只看到执行后的效果,却不能明确是哪个线程执行的,更不清楚其执行路径。attach上去后,打好断点,然后等着复现,但是最大的问题是,灵活度受限,在必现的问题面前还好,但在偶现的问题面前,就显的力不从心。)的存在,导致不同设备,不同环境上运行相同的程序,加载起来的动态库符号地址都不一样,因此该地址需要进行计算,计算方法(以。实现hook非常的灵活,但有较高的学习门槛。
2024-10-29 14:19:40
703
原创 记一个zk io线程调用getaddrinfo触发的coredump
交易服务端是由C++开发的大型交易系统,使用ZkServer进行分布式部署,交易服务端通过ZooKeeper的C API与ZkServer进行交互。崩溃出现在服务端退出阶段,主框架正在执行服务的退出动作,而崩溃点在zk的do_io线程,在调用时,触发了SIGABRT信号(如图1图1。
2024-10-18 17:21:54
2105
原创 记一个_Unwind_Resume异常堆栈展开触发的coredump
交易服务端是由C++开发的大型交易系统,业务的实现是以动态库的形式,由平台端的中间件,统一通过dlopen的方式加载起来的。事发时,业务上正在做某笔委托的交易,内部触发了coredump,导致交易服务端(中间件平台)异常退出。问题出现在调用gcc运行时库libgcc_s.so.1的_Unwind_Resume(堆栈展开)方法时,内部抛出了abort。可疑点是,实际上在平台侧最外层(堆栈f 18),是有异常捕获的,但是似乎它失效了。
2024-10-11 17:01:44
1464
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人