自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(194)
  • 资源 (21)
  • 收藏
  • 关注

原创 博客将迁移到 zhouguoqionghai.life

如题,csdn 的版面越来越难看,之后的博客将优先在自己新搭建的博客上更新,欢迎查看。

2020-12-12 19:21:51 144

原创 C++ 中 new, delete 形式必须匹配的原理

C++当中,new 和delete必须匹配的原理探究不考虑面向对象的情况下,C++ 当中的 struct与 C 语言的 struct 的一个大不同就是C++当中存在构造函数和析构函数。对象创建时,要调用构造函数;对象离开作用域,会调用析构函数。c++ 中 new的几种形式C++中的 new有 3 种形式,常见的用来在堆上构建对象的那个 new,还有 operator new 和 placement new. operator new 可以重载,其实 placement new 就是operato

2022-01-15 14:12:48 571

原创 x64 可变参数原理完全解析

问题引子stackoverflow 上有这个问题,标准里说makecontext的可变参数都必须是int类型,然后发现 makecontext 的源码里有如下一段注释说明。 /* Handle arguments. The standard says the parameters must all be int values. This is an historic accident and would be done differently today. F...

2021-12-31 15:41:23 1492 1

原创 通过函数名称字符串发起调用/函数名反射

python在 python 当中,一切都是对象。函数也是第一等公民。如果要使用函数名称字符串发起调用,目标在于通过字符串找到函数对象。函数```pythondef func(a): print("global function func", a)```显示的从全局命名空间中查找python 当中,全局的命名空间可使用内置函数`global`获取。```pythonglobals()["func"](3)```使用内置的解释器脚本语言都是解释执行,而且一般...

2021-12-03 17:47:09 1315

原创 调用栈被破坏的手动恢复

函数调用前言后序一般来说,在未优化的情况下,函数的调用栈的前言和后续对应的指令都是固定的。push %rbpmov %rsp,%rbpsub $10,%rsp #这里的立即数 10 表示函数需要的栈大小,与函数自身小关​​leave # leave 等价于以下两条指令#mov %rbp,%rsp#pop %rbpretpush %rbp 之后,栈顶指针rsp 便指向rbp; mov %rsp,%rbp 之后,rbp 也指向栈顶,所以在 callee 被调用函数的栈当中,rbp指

2021-11-26 15:26:25 1236

原创 LD_PRELOAD,patchelf 与 hook

之前一篇文章说明过 elf 当中的符号决议顺序,最先被解析的符号先入为主,作为最终被使用的符号,本篇的用到的代码同之前的一篇相同。LD_PRELOAD LD_PRELOAD 的原理就是在先于所有依赖的动态库,提前加载 LD_PRELOAD 环境变量当中指定的库。main.out 依赖外部动态库 libmyprintf.so 的 myprintf 函数,依赖的动态库在编译时,被写入到可执行文件当中,可以使用readelf -d来查看。加入此时另外有个动态库 libmsgpri..

2021-11-23 12:27:30 568

原创 elf 符号决议 处理详情

通过源码文本文件得到 elf 二进制文件,包含预处理,编译成汇编文件,汇编成目标文件,链接这几个过程。链接有编译时链接,加载时链接(动态链接库),运行时链接(dlopen的那一套)。动态库当中定义的全局符号无论是变量还是函数,都是间接访问,即使是定义在同一个源文件当中。访问本动态库中的全局变量,一样的使用 .got; 调用本动态库当中的函数,一样的使用 plt 技术。myprintf.s 文件.section .data​.type age,@object.global age

2021-11-23 11:25:04 497

原创 Linux 匿名文件之 O_TMPFILE, memfd

Linux 系统编程都在跟进程与文件打交道。Linux 上创建文件描述符的接口普通文件open信号,定时器,事件signalfd, eventfd, timerfd_create可进程间通信的特殊文件shm_open, pipe, mkfifo, socket监控文件事件的文件inotify_init内存文件memfd_create当然,还有 dup 及 fcntl 能用来复制文件描述符。所有这些,跟文件系统有关的有open, socket(Unix域socket),

2021-05-31 15:07:18 2851

原创 mycli 启动 UnicodeDecodeError 及运行时 WinError 995 问题

mycli 是一个 python 写的功能强大的 mysql 命令行补全工具,交互体验类似 ipython 或者 jupyter。项目在这里.直接使用 pip 来安装即可,pip install mycli.安装完毕运行报错。UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0xa8 in position 52: invalid start byte报错的调用栈如上。报错的部分是 configobj 模块,遇到编码问题。configobj

2021-04-22 09:16:49 639 10

原创 msys2 结合 vscode 使用 lldb 进行调试及 lldb-mi.exe 问题

默认 clang++.exe 环境生成的调试 launch.json 文件使用的 lldb-mi.exe 问题clang 和 lldb 通过 pacman 安装。pacman -Sy mingw-w64-x86_64-clangpacman -Sy mingw-w64-x86_64-lldbF5 进行调试,选择 clang++ 自动生成的 tasks.json 和 launch.json ,使用的调试器是 lldb-mi.exe,通过 msys 源安装的 clang 没有这个文件,google 一

2021-04-04 23:59:11 4296 2

原创 python 中 fcntl, ioctl 值结果参数

python 标准库中包含一些 Linux 系列的专有服务 模块,fcntl 就是其中一个。本文讨论的 fcntl 和 ioctl 的 python 包装函数都包含在这个模块当中。fcntl 获取操作fcntl 的函数 C 原型如下,《Linux/Unix系统编程手册》5.2 节有介绍。fcntl 对于大多数操作来说,从返回值中就能获取结果;只有少部分需要值结果参数来完成功能。int fcntl(int fd, int cmd, ... /* arg */ );python 原型如下 fcntl

2021-02-20 14:00:46 1744 1

原创 malloc 内存分配位置及进程内存布局

进程内存分布典型的 Linux 进程内存分布图,图片来自这里:这张图中有映射段的位置,但是还有一个重要的部分的缺失,就是运行时的参数和环境变量,在 Linux/Unix 系统编程手册这本书第 6 章讲进程的内存分配里有给:malloc 内存分配在映射段当 malloc 申请分配的内存过大(128K以上),内部将使用 mmap 而不是 brk 来分配内存。测试代码: printf("program break:%p\n", sbrk(0)); char* ptr[10];

2021-01-18 12:19:28 4921

原创 git bash 下 pacman 环境配置

如果不是为了跟着经历一边(折腾自己),直接跳到最后最优的方法。git bash 下 pacman 环境配置安装 pacman下载 pacman,解压到 git 的安装目录(D:\Program Files\Git,一定要是 git 的安装根目录,这样解压出来的目录结构和安装 git 时的层次保持一致)。tar xvf pacman-5.2.2-4-x86_64.pkg.tar.xz此时在 git bash 里运行 pacman 会提示没有软件源相关的配置文件。error: config fi

2020-12-13 19:27:02 7128 2

原创 使用git bash在windows上搭建 git 服务器

在 windows 上安装 git,都会附带 git bash.git bash 相关路径git bash 是基于 msys2 的,在 windows 上任务管理器里可以看到:git bash 的根目录msys2 本身用来在 windows 上模拟 Linux 类环境。git bash 的根目录的实际物理目录是 git 的安装目录,在我的 windows 上,是`D:\Program Files\Git`可以在 git bash 里切换到根目录 cd /,然后在当前目录创建个文件来确证。g

2020-12-12 19:36:48 866

原创 Linux 对齐掩码

Linux对齐掩码对齐宏位运算描述#define alignment_mask(size) (~(size-1))#define alignment_down(a, size) (a & alignment_mask(size) )#define alignment_up(a, size) ((a+size-1) & alignment_mask(size))一般对齐都是按照 2 的指数值来对齐的,~(size-1) 本质是 size 的相反数。如果 size 是2的指数,那

2020-11-16 18:22:51 276

原创 centos8 neovim 安装 coc.nvim 补全

用来补全 C++和 golang.C++ 语言服务器后端有 clangd 与 ccls,可搜 github. clangd 在centos 上使用 dnf 直接安装,在 clang 的扩展包里。cquery 是另外一个 c++ 语言服务器。cquery is no longer under development. clangd and ccls are both good replacements.一、安装 cplusplus 补全。1、设置 http 代理,不然后边需要网络下载时可能会失

2020-08-28 21:34:30 3584 2

原创 有道词典带来的 wireshark 卡死的一种可能

最近使用 wireshark 分析 tcpdump 抓的包,界面交互几次之后,总是无故卡死。后来发现只有开着有道词典的时候才会卡死,关掉有道词典,再重新开启 wireshark 正常。进一步发现,只要关闭有道的屏幕取词画词功能 wireshark 便不会卡死。。。...

2020-06-05 10:32:58 1582

原创 blocking socket 读写返回 EAGAIN

非阻塞的 socket 读写操作返回 EAGAIN,表示当前已经读完内核缓冲区或者写满内核缓冲区,需要等待下一次 select/poll/epoll 事件到来时再操作。对于阻塞的 socket 读写操作,如果内核缓冲区是空,read 将一直阻塞;如果不能一下全部写入用户态缓冲区的所有数据,write 将阻塞。原以为对于阻塞的 socket,如果设置超时时间,读操作内核缓冲区为空或写操作内核缓冲区已满,返回的是 ETIMEDOUT,原来返回的也是 EAGAIN.内核缓冲区还有 4 个字节的剩余空间,那

2020-05-27 12:51:37 800 1

原创 centos8 安装 YouCompleteMe

centos 8.1 上自带的 vim 版本为 8.0 版本,已经可以支持 YouCompleteMe.安装涉及到大量的从 github 拉取源码,所以首先配置 git 的代理,相比直接从国内的网络过去要节省很多时间。git config --global http.proxy socks5://192.168.0.103:5555git config --global https.proxy socks5://192.168.0.103:55551、下载安装 vim 插件管理器 vbund

2020-05-16 16:22:10 1437

原创 Linux 上日志记录崩溃函数调用栈方法

背景:线上环境进程崩溃,运维为了不背锅,要求崩溃之后立马将进程拉起。然而发现有个问题:一旦运维将进程拉起之后,之后使用崩溃的 core 文件来进行分析时,符号信息都丢失,看到的都是问号。但是,如果崩溃之后未被拉起,可以正常的看到符号。后来发现,是运维启动进程的 shell 脚本,每次启动之前,会将需要加载的部分业务相关的 so 文件,文件名字修改(名称里加上了时间戳,类似 lib20200423002608_xxxx.so 这种)。名称被修改之后,gdb 自然没法加载加载这个 so 文件。.

2020-05-12 13:43:21 1241

原创 git bash 添加 tmux

git bash 是基于 msys2 的,但是没有提供包管理工具 pacman.当然下载安装了 git 的 sdk,也能使用 pacman.最简单的方法是直接下载 tmux_for_git-bash,解压之后,将 usr/bin 目录下的所有内容,包括 tmux 和 依赖的动态库 dll 文件,全部拷贝到 git bash 安装的存放命令目录即可,比如我的机器是 D:\Program Files\Git\usr\bin.然后就可以愉快的在 git bash 里使用 tmux了。...

2020-05-11 12:19:22 1009

原创 -std=c99 编译 sigaction 类型报错 error: storage size of ‘sa’ isn’t known

struct sigaction sa;不加 -std=c99 选项可以编译通过。这篇 博文 有详细的编译器版本说明,文中也给出了解决办法。但是通常来说,<bits> 目录下的内容是用来实现标准库的细节,不建议直接包含。所以,更好的解决办法是在文件的顶部加上编译宏 #define _POSIX_SOURCE#define _POSIX_SOURCE#includ...

2020-04-22 14:25:00 1136 1

原创 LISTEN 状态的 Recv-Q Send-Q

ESTAB 状态下的 Recv-Q Send-Q 分别表示内核协议栈的发送缓冲区和接受缓冲区中保存的内容字节数。在 Linux 上,TCP 的三次握手在内核里完成。内核通过一个半连接和已连接 2 个队列来实现。已连接队列的大小由 net.core.somaxconn 和 int listen(int sockfd, int backlog) 传入的 backlog 较小值来决定。对于 LI...

2020-04-21 14:17:58 2036

原创 自定义鼠标右键菜单

1、选中文件,鼠标右键可选择打开的程序a、地址栏输入 计算机\HKEY_CLASSES_ROOT\*\shell ,避免查找。b、右键 shell 节点,新建(N) ->项(K),创建一个新节点,可以用要添加的程序名字来命名,比如 sublime .c、右键新创建的节点,新建(N)->字符串值(S),名称必须为 Icon,为右键菜单里的小图标。d、右键 sublim...

2020-04-15 22:03:45 1192 1

原创 SVN部分 checkout 方法

打开仓库地址之后,在左边目录树中,选中根目录,鼠标右键 checkout;在弹出的 Checkout 提示窗里选中 Choose items 即可勾选需要 checkout 出的部分。

2020-04-07 14:52:42 1143

原创 Linux 共享库详细说明与符号解析顺序

1、静态库和动态库的构建与使用创建实验所需的源文件。[root@localhost project]# tree.├── librarypathlib│ └── say.c├── main.c├── runpathlib│ └── say.c└── staticlib └── say.c文件内容如下,这里将 4 个文件中的内容放在一起展示。//m...

2020-04-05 19:03:04 1019

转载 A Deep Dive into Iptables and Netfilter Architecture(深入理解 iptables 和 netfilter 架构)

SVG 图看这里。重点标红:连接收到的应答包会自动应用反方向的 NAT 规则。IntroductionFirewalls are an important tool that can be configured to protect your servers and infrastructure. In the Linux ecosystem, iptables is a w...

2020-01-16 12:00:54 844

原创 ctypes 指针类型 byref pointer POINTER

byref 并不会构造一个指针对象,因此速度比 pointer 快,只能作为导出函数的实参使用。其 _obj 是只读属性,不能更改。pointer 会构造一个指针对象。.contents 属性即其所指的对象,但是指向是能够变动的。相当于int *ptr = n;ptr = &m; //指向可以变化对于一个包含如下函数,名为 lib.so 动态库:void chang...

2019-12-28 21:49:52 8452

原创 Wireshark 提示 TCP segment of a reassembled PDU

It means that Wireshark thinks the packet in question contains part of a packet (PDU - "Protocol Data Unit") for a protocol that runs on top of TCP.If the reassembly is successful, the TCP segment c...

2019-12-03 12:12:02 1268

原创 Linux pyinstaller 打包问题 enable-shared

线上服务器的系统基本都是centos 6.x,python 版本是 2.7.5。仅仅是为字符的问题处理上,应该使用python3.x,而不是python2。所以用 pyinstaller 打包 python 3.x 运行的脚本,而不用在线上安装依赖的环境。wget 下载源码,configure ;make ;make install 三部曲安装。wget https://www.pyth...

2019-11-16 21:30:46 2942 1

原创 Linux 文件描述符标记之 FD_CLOEXEC

重读The method to epoll’s madness 之前转载的这篇博客,里边提到的文件描述符标记和文件描述状态:当前的Linux 支持的文件描述符标记只有 FD_CLOEXEC,可通过 fcntl 指定宏 F_SETFD 和 F_GETFD 来设置和读取文件描述符标记,参看 GUN 文件描述符标记文档。系统调用 open 可以指定 O_CLOEXEC 来置位文件描述...

2019-11-03 12:27:30 1974 2

原创 shell 编程之参数展开总结

1、shell的执行方式为先展开替换,再执行。2、shell 的展开的几种情况:路波花,参算命。前3种在双引号中不再展开,后3种在双引号中能展开。单引号中的是字面量,不展开,但是嵌套的双层单引号中全部展开。参数展开有6种情况:1.)直接展开:${var}2.)删除模式展开:${var#pattern}${var##pattern}# #表示从头开始匹配 ##是贪...

2019-10-09 20:03:11 638 1

原创 AWS rds table storage engine for doesn't have this option 问题

aws rds上做数据迁移时,导出的文件在导入新数据库出现 : table storage engine for doesn't have this option 报错,报错这一行的内容为: ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED .突然发现建表的时候,使用的引擎明明是 MyISAM 的,怎么导出之后成了 InnoDB 的了。原来...

2019-09-10 13:35:50 6863

原创 python threading 模块类总结

1、print 函数不是线程安全的。logging 系列方法时,deque.Queue 线程安全队列。2、python 线程对象的daemon属性继承自父线程,主线程的daemon属性是 False. 所谓 daemon 即父线程退出时,子线程立即退出。而非 deamon 子线程;父线程会等待子线程退出时才退出。3、threading.Event 类,线程间同步工具类之一。内部维持一个状态...

2019-09-08 17:07:40 364

原创 centos6 python2 安装pip的一次记录

服务器上需要 kazoo 包监控 zookeeper 上的节点。打算使用 yum 来安装,首先安装 epel 包:1、yum -y install epel-release通过 yum 安装 pip.2、yum -y install python-pip.安装完毕之后,运行 pip 提示:pkg_resources.DistributionNotFound: The 'pi...

2019-08-29 19:09:55 453

原创 python 包有无 __init__.py 文件的区别

python 的包并不一定需要一个 __init__.py 文件。1、命名空间包不包含 __init__.py 文件的包叫 命名空间包,这种包有几个差异的地方。假如文件的组织结构如下,每一个 py 文件都只简单的包含一句 print(__name__) 。包路径下不包含 __init__.py 文件:import syssys.path.append(r"D:\foo\spa...

2019-08-17 22:24:36 4778

原创 EPOLLRDHUP vs EPOLLHUP

EPOLLRDHUP 表示读关闭。不是所有的内核版本都支持,没有查证。有两种场景:1、对端发送 FIN (对端调用close 或者 shutdown(SHUT_WR)).2、本端调用 shutdown(SHUT_RD). 当然,关闭 SHUT_RD 的场景很少。测试环境为 Linux localhost.localdomain 3.10.0-957.el7.x86_64 #1 SMP.........

2019-07-03 22:43:10 13997 1

原创 ssh-agent 详解

此博客的配图来自《SSH The Secure Shell 2nd》,内容也是对该书相关章节的总结与一些实验的补充。ssh 推荐的登录方式是使用私钥登录。但是如果生成私钥的时候,设置了口令(passphrase),每次登录时需要输入口令也很麻烦。可以通过 ssh-agent 来管理私钥,把私钥加载进内存,之后便不用再输入私钥。ssh-agent 代理ssh-agent 的原理如下图:...

2019-06-15 18:54:05 29809 1

原创 python socket 超时设置

python socket 提供 settimeout 设置阻塞 IO 的超时时间,一旦超时,抛出 timeout 异常。不过这样,接收与发送的超时时间都被设置为相同了。如果需要接收与发送设置不同的超时时间,需要利用 socket 选项 SO_RCVTIMEO 和 SO_SNDTIMEO 来实现。Linux 下,选项的参数值为 timeval,两个字段表示秒与微妙,都是 64 位整数。s...

2019-06-14 21:55:57 20345 1

原创 macbook air 裸机 U盘 安装windows10

1、使用支持 uefi 的PE U盘开机按option键启动进入PE。我这里使用的是 BigBaiCai_UEFI_gw.exe,网上有BigBaiCai,DaBaiCai,WinBaicai的,也不知道哪个是山寨的,谷歌的第一条是BigBaiCai,用这个经过我测试能用。我用的是 win10 来制作 U盘 PE的,注意安装 BigBaiCai 到完成 U盘PE 制作之前,保持 win 10自...

2019-04-21 18:59:51 21987

tmux_for_git-bash.zip

tmux_for_git-bash 来自 github,原始链接也许不能下载。tmux_for_git-bash 来自 github,原始链接也许不能下载。

2020-05-11

The Hacker’s Guide to Scaling Python

The Hacker's Guide to Scaling Python Julien Danjou The Hacker's Guide to Scaling Python Julien Danjou

2018-05-25

mastering go packt 2018

mastering go packt 2018 mastering go packt 2018 mastering go packt 2018

2018-05-09

Mastering TensorFlow 1.x

Mastering TensorFlow 1.x Copyright 2018 Packt Publishing

2018-04-25

Deep Learning with TensorFlow 第二版

Deep Learning with TensorFlow Second Edition 2018 Packt Publishing

2018-04-18

With Open AI, TensorFlow and Keras Using Python

With Open AI, TensorFlow and Keras Using Python

2018-04-18

Discover the Mathematical Language of Data in Python

Discover the Mathematical Language of Data in Python

2018-04-18

Memory Dump Analysis Anthology, Volume 3 内存分析技术

Memory Dump Analysis Anthology 内存分析系列 缺少第四卷

2018-04-08

Memory Dump Analysis Anthology, Volume 5

Memory Dump Analysis Anthology, Volume 5 内存分析技术系列 缺少第四卷

2018-04-08

Memory Dump Analysis Anthology Volume 7

Memory Dump Analysis Anthology, Volume 7 内存分析技术系列

2018-04-08

Machine Learning with TensorFlow

Machine Learning with TensorFlow tensorflow 学习资料

2018-03-19

sourceInsight4 4084破解

sourceInsight4 4084破解

2017-03-05

sourceInsight4 2017最新版

sourceInsight4 支持代码折叠 支持代码折叠 支持代码折叠

2017-02-23

GNU二进制工具链介绍

GNU二进制工具链介绍

2017-02-19

VSPD虚拟串口软件

VSPD虚拟串口软件 vspd7.2.308.7

2016-12-09

securecrt注册机

securecrt注册机,支持最新8.0版本

2016-12-09

Ultra Edit

编辑器

2016-08-14

空空如也

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

TA关注的人

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