
问题解决
文章平均质量分 58
lqw198421
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
windows vscode clang-format不生效
windows vscode clang-format不生效原创 2022-07-14 17:18:41 · 2823 阅读 · 1 评论 -
c++多线程调用python时的 Segmentation fault 问题
问题主程序(C++)加载多个so,so里有python的,也有c++的,并且有的C++的so里会有多个线程;会出现多个线程解析并调用python so的问题;会发现,除了wrapper so(直接解析python so的so)里起的线程,其他线程解析时,就会出现SEGMENT现象;原因说到底就是GIL的问题,有兴趣的同学可以去查一下,再次不赘述(对python了解不多,只是有个基本的了解,不误人子弟了)解决方案参考:Embedding a Python interpreter in a mult原创 2021-08-24 09:30:10 · 1050 阅读 · 0 评论 -
VsCode建立非工程目录下的头文件自动查找
前言当前项目中,是通过RPM安装包的方式来把各个子项目联系在一起的,有利有弊,不好的一点就是,安装后的子项目的头文件都是在/usr/local/目录下,通过VSCode建立的工程就不能够进行类型的自动跳转了。今天从同事那边知道了怎么设置来实现自动跳转;具体操作其实有2种方式:一种是我之前操作的,就是通过“将文件夹添加到工作区”来实现;还有一种是今天从同事那边学到的,具体的操作见下图:1、点击“快速修复”2、点击“编辑"includePath"设置”3、在出现的 C/C++ Config原创 2021-08-13 14:04:58 · 1600 阅读 · 0 评论 -
mmap的 Bus error问题及解决
前言新交易系统中,通过mmap来实现持仓和订单的本地持久化,之前未用过mmap,在本次实现中遇到了一些问题,仅记录Bus error问题;实现基本逻辑OM或者PM在启动时,先通过本地的持久化文件来恢复订单或者持仓:如果是当日的第一次的正常启动,那么是没有持久化文件的,这个时候,PM需要从别的地方来获取初始化的持仓(当天还没有开始交易,没有订单,OM不需要做处理);如果不是当天的第一次正常启动,那么是有持久化文件的,OM或者PM就需要从本地的持久化文件来获取订单和持仓,完成初始化;问题持久原创 2021-07-01 08:43:54 · 3637 阅读 · 2 评论 -
python 查看第三方库的api接口
前言今天看到一个python画樱花树的帖子,觉得好玩,想尝试一下,但在import turtle并使用的时候出现了问题:提示没有相关api的定义,所以想查看一下import 的turtle是否正确,又不知道如何查看,搜了一下,看到如下2种办法:python自带的文档查看器直接参看这个连接:python自带库及第三方库api察看由于我是在win10机器上的docker下,所以这个对我来说不行;dirimport 第三方库dir(第三方库)>>> import random原创 2021-06-28 10:54:18 · 1921 阅读 · 0 评论 -
cmake的基本使用
前言公司当前使用的都是cmake,之前没怎么用过,趁着项目间歇期专门学习一下,以此为记;这次是有针对性的学习,所以都是通过各种例子来实现的;cmake具体使用一个cpp文件编译出一个可执行文件文件目录其中build是目录,是为了把cmake编译过程中产生的文件与源文件隔离而建立的,这就是cmake推荐使用的外部构建模式;文件内容main.cpp#include <stdlib.h>#include <stdio.h>int main() { printf(原创 2021-06-25 16:29:14 · 404 阅读 · 1 评论 -
win10解压文件时,出错:不能创建符号链接 你可能需要以管理员权限运行Winrar 客户端没有所需的特权
参考链接windows解压文件时,出错:不能创建符号链接xxxxxxx客户端没有所需得特权win10命令行进入文件夹的方法转载 + 记录1、用管理员权限打开命令行——有多种方式,最简单的一种就是右键cmd,然后选择“以管理员身份运行”2、进入rar文件所在目录首先是进入指定的盘(以D盘为例),就是在cmd下直接输入 D: --注意":"不能少3、然后cd到目的目录即可:D:\>cd Program\Docker\linux——注意,在windows下,是以 " \ "来作原创 2021-04-06 13:57:34 · 6635 阅读 · 0 评论 -
“我的”Bug大全(转载)
背景搜索资料时发现了这个链接,作者跟我做的事情有些像:记录自己的每一个bug(最好加上反思和回溯,确定自己犯错的根本原因,方便后面针对性的改进),所以转载过来。我的BUG大全Bug记录buff溢出后,把栈破坏了,这个线程也没崩溃,一直死循环在一小段不可知的代码里。调用getaddrinfo很多次以后,getaddrinfo报错:No address associated with NAME。非常地奇怪呀~~后来把同样的程序部署到比较旧的linux上,报错: Too many open files转载 2021-03-18 10:39:25 · 431 阅读 · 0 评论 -
centos 下调用libnanolog.so时的“ undefined reference to `std::thread::_M_start_thread ”错误
背景当前项目中通过 libnanolog.so 来记录log,但是在编译时,出现以下错误:包含如下错误:/workspace/AutoClose/unit_tests/lib/centos/libnanolog.so: undefined reference to `std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State> &原创 2021-03-15 11:05:27 · 1810 阅读 · 0 评论 -
Win10 vscode 代码格式化设置与远程断点调试
背景公司的代码风格是Google,要求设置自动化格式;文龙和李泽分别在linux和windows下设置的,我参考了李泽的win10下的设置,结果踩了个大坑,浪费了整整一天;过程李泽提供的设置过程:1.下载官网下载vscode https://code.visualstudio.com/——重点说明:我就是这里踩了大坑,由于公司网络问题,从官网下载总是失败,所以就从其他网站上下了一个不用安装的绿色版;导致后面的格式化设置一直提示找不到clang,哪怕我手动安装了LLVM并把它加入到环境变量,能在w原创 2021-03-08 09:01:07 · 1133 阅读 · 0 评论 -
Raw Socket抓包,某些端口的数据包抓不到
背景TCP回包过滤项目,把执行程序部署到实盘上后,发现有一些port(或者说连接)的报文是可以捕获到的,但有一些连接的报文捕获不到,而根据墨菲定律,目标报文没有被捕获到(dog head);定位1、回想整个执行流程,没有发现有问题的地方,并且也加了打印,发现的确是没有捕获到目标port的连接,而不是捕获到了后因为其他条件而被过滤到;2、由于是在实盘环境才能复现该问题,而在本地的docker下复现不了该问题,但实盘调试又要通过乙方来完成,非常麻烦,所以文龙建议通过tcpreplay来复现;折腾了一下,原创 2021-03-04 09:20:53 · 1235 阅读 · 1 评论 -
Linux下的md5的实现
背景当前项目中基于raw socket实现了tcp包的过滤,其中的过滤条件是我司的产品编号,为了防止甲方爸爸随意乱用我们的产品,所以需要对配置文件里的产品编号进行加密,简单起见,使用md5来进行加密;md5sum使用linux下使用md5非常简单:md5sum filename即可:[root@09de35f53b68 exch_rsp_filter_1]# md5sum MD5.cpp cde2e31dc14220ce250f3ebb906f8d18 MD5.cpp关于linux下md5原创 2021-03-01 16:25:07 · 648 阅读 · 0 评论 -
linux下cmake3的使用及问题解决
使用cmake3而不是cmake1、如果想使用cmake,也是可以的,需要在环境变量里设置2、具体使用,是先修改自己写的CMakeLists里的内容(比如说添加新的cpp文件),如果CMakeLists写得好的话,会自动包含的,其实也很简单;工程中c和cpp混杂如果CMakeLists没有特别说明,那么基于CMakeLists生成的makefile会针对c和cpp分别编译,导致生成的函数符号命名不同,最终导致找不到函数定义的错误:简单起见,把所有的c文件修改为cpp文件,即可解决此问题——当然,原创 2021-03-01 16:07:30 · 1536 阅读 · 1 评论 -
Linux redis 使用记录
背景新的期货交易系统,需要用redis来做持久化;需要调研一下它的多机热备的功能,调研它的哨兵模式;安装、配置及使用重点参考:Redis详解(九)------ 哨兵(Sentinel)模式详解redis主从+哨兵搭建问题及解决redis-cli: command not foundredis-cli: command not found解决:将redis-cli拷贝到/usr/local/bin/下,让redis-cli指令可以在任意目录下直接使用:sudo cp src/redis-原创 2021-02-25 10:55:29 · 182 阅读 · 0 评论 -
CentOS docker下解决man的 command not found 和 No manual entry for xxx的问题
背景一开始的问题:man: command not found安装后的问题:No manual entry for read in section 2解决先后执行如下命令:1、yum install man2、yum install -y man-pages3、vi /etc/yum.conf隐藏/etc/yum.conf文件中的tsflags=nodocs一行:4、rpm -qa | xargs yum reinstall -y参考linux - man 提示:-bash: m原创 2021-02-25 09:00:13 · 542 阅读 · 0 评论 -
Linux下C++里可用的轻量级lock的性能比较
背景介绍当前工作中,有一个场景,有一个碰撞几率较低的变量的读写操作,为了保证操作安全性,需要对这个变量的读写操作加上锁;为了选择一个性能较好的lock,文龙做了以下测试;lock介绍参赛选手:cpp: atomic_flaggcc: __sync_bool_compare_and_swapspi: pthread_spinlock_tnone:空操作,baseline具体的测试用例见下面的测试代码测试代码#include <iostream>#i原创 2021-02-23 20:11:44 · 726 阅读 · 0 评论 -
cmake3 :undefined reference to `pthread_create
背景代码上库,需要用cmake来编译整个项目;问题及解决由于项目较小,之前的编译都是直接通过命令行来实现的:编译选项:-std=c++11 -lpthread -O3 -g在CMakeLists.txt里添加了:set(THREADS_PREFER_PTHREAD_FLAG ON)find_package(Threads REQUIRED)add_compile_options(-std=c++11 -O3) 但是在编译时,还是提示 undefined reference to pt原创 2021-02-22 16:55:13 · 229 阅读 · 1 评论 -
inet_ntoa 踩坑记录(同一语句内调用2次或多次inet_ntoa,结果会被覆盖)
背景目前手头上在做的项目是上期所的TCP回包过滤项目,需要通过Raw Socket把目标节点上所有的TCP链接接收到的数据截获后识别出我司的信息,然后通过建立的UDP链接把我司信息转发到UDP Server上;在转发的时候,除了原来的TCP应用层的报文外,还需要添加TCP链接的信息:tcp_src_ip, tcp_dst_ip, tcp_src_port, tcp_dst_port;当前整个功能已经实现,但是在测试功能的时候出现了意外问题及源码在UDP Server端,接收到消息后解析然后打印来查原创 2021-02-19 16:33:22 · 964 阅读 · 0 评论 -
Win10下的docker安装及使用
背景新公司不像菊厂和快马,没有公共的linux服务器供使用——应该是也有,但目前还是算了,自己在本地安装一个Docker Desktop,这样的话,能够把Windows下的本机资源做虚拟化,然后使用;Docker Desktopwin10下安装Docker Desktop下载链接:Docker官方下载链接安装后不必注册——除非你想上传自己的镜像——主要遇到的大坑就是win10下的虚拟化开关,需要通过Bios设置来打开,而不同的机器下的Bios是完全不同的,基本是在CPU下面的虚拟化选项里来设置—原创 2021-01-19 19:55:20 · 860 阅读 · 1 评论 -
Windows下Java通过Jni调用C/C++(x64, 多层依赖)
前言客户(证券公司)要求把T2协议的适配改为windows版本,以方便添加GUI进行操作。我的工作等于说是基于恒生的T2的sdk的dll,生成我们自己的dll(依赖恒生的dll),供我们的同事编写的上层应用(java编写)调用windows下Java通过JNI调用C/C++可参考链接:Windows下使用Java Jni调用C/C++初探需要特别注意的问题有2个:1、需要在工程的配置里,引入jdk相关的头文件或者其目录;2、设置生成的dll的系统属性,就是dll是32位还是64位的,现在绝大部原创 2020-10-29 10:38:22 · 516 阅读 · 0 评论 -
csdn怎么快速转载别人的文章(转载)
转载链接:https://blog.youkuaiyun.com/weixin_41704733/article/details/79872007 在csdn看到好的文章想转载,无奈找不到转载的功能,只能想办法了。首先确定原文允许转载在文章开头处一般有版权声明,如图转载时要注明出处和作者如何转载用谷歌浏览器加载文章地址,打开文章F12打开Developer Tools,并打开Elemen转载 2020-09-09 11:53:59 · 126 阅读 · 0 评论 -
内核栈回溯原理学习应用(转载,针对arm)
转载链接:https://www.cnblogs.com/mysky007/p/12539754.html前言:在网上看到这篇文章,作者写这个应该是很用心的,所涉及的技术相对比较偏门,研究或者学习这方面的人应该很少,不过正好跟我现在在做的一些东西是相关的,因此转发。不过,换做是我,如果想解决这个问题的话,我还是会用plt hook来实现,当前已经做出来的成功已经可以分析出 double free的问题了。问题:一台客户现场机器,运行一周左右偶然发生一次应用段错误或者double free问题,c转载 2020-09-09 10:37:45 · 1705 阅读 · 0 评论 -
一个由进程内存布局异常引起的问题(转载)
转载链接:https://www.cnblogs.com/catch/p/6370859.html前段时间业务反映某类服务器上更新了 bash 之后,ssh 连上去偶发登陆失败,客户端吐出错误信息如下所示:图 - 0该版本 bash 为部门这边所定制,但是实现上与原生版并没有不同,那么这些错误从哪里来?是 bash 的锅吗从上面的错误信息可以猜测,异常是 bash 在启动过程中分配内存失败所导致,看起来像是某些情况下该进程错误地进行了大量内存分配,最后导致内存不足,要确认这个事情比较简单,动态转载 2020-09-08 18:00:31 · 185 阅读 · 0 评论 -
单线程目标进程注入一个多线程的动态库(so)失败
简介当前项目中,需要查看C++的目标进程的内存分配情况,最直接的方式就是跟踪new/delete的使用情况;通过查看libstd++的源码发现,new的底层调用的还是malloc(有的版本可能不是,需要注意,c++的标准里没有强制要求new的底层一定要通过malloc来实现);因此就对libstd++.so里的malloc进行hook【这里需要注意:不能对全局的malloc进行hook,而要对libstd++.so里的malloc进行hook】;具体实现当前考虑的方案是通过ptrace对目标进程进行a原创 2020-07-28 22:06:31 · 519 阅读 · 0 评论 -
一个由进程内存布局异常引起的问题(转载)
参考链接:https://www.cnblogs.com/catch/p/6370859.html一句话表达:32位进程启动一个64位的程序作为其中一个线程时,在fork阶段,认为自己是32位线程而进行相应的内存的申请和处理,导致出错——个人理解如此,不知道是否有错——这篇文章的坑较深!...转载 2020-07-20 15:15:14 · 138 阅读 · 0 评论 -
符号(全局or静态变量或者函数)的GLOBAL或者LOCAL的差别
前言还是前面所说的项目:公司项目有个比较偏门的需求,需要在java进程里找到并修改libjvm.so里定义的一个类的static + private的成员变量,但是通过代码一直没有找到该变量的符号和地址。之前的测试已经完成,但是在c++的demo里,可以找到 static + private 的变量的符号和地址,问题到底在哪呢?分析没啥其他方法,先通过nm来查看一下变量在对应的so里到底是什么性质的.libjvm.so里的变量:0000000000e27d00 b _ZN14AttachLis原创 2020-07-17 15:09:22 · 2459 阅读 · 0 评论 -
g++链接so时,找不到类的static成员变量
前言公司项目有个比较偏门的需求,需要在java进程里找到并修改libjvm.so里定义的一个类的static + private的成员变量,但是一直没有找到该变量的符号和地址。因此想通过c的程序来验证一下,确定是不是libjvm.so的问题,于是自己写了一个简单的demo,没想到折腾了2个小时,以此为记;代码so相关代码代码很简单,so的代码分为b.h和b.cpp;b.h:#ifndef B_H_#define B_H_class BClass{ private: static i原创 2020-07-16 17:20:28 · 1061 阅读 · 1 评论 -
linux下 c程序崩溃时产生core文件的设置
前言C程序运行崩溃时,如果能够自动产生core文件,会对问题的分析和定位有一定的帮助,但是需要一定的设置才可以开启该选项;core文件产生如果程序本身有问题,在崩溃时,可能会产生core文件——注意:不是一定会产生的;产生的core文件默认是在执行文件的目录下,但也可以指定,参考目录:修改/etc/security/limits.conf(root)在文件最后添加了两行:ulimit -c unlimitedcore文件生成目录坑:注意:这里需要自己mkdir corefile目录原创 2020-07-06 14:13:20 · 886 阅读 · 0 评论 -
malloc申请内存一定会引起进程Heap的Rss变化吗?
前言linux的开发人员,大概都知道可以通过 cat /proc/pid/smaps 来查看进程的memory占用情况,以确定线程占用memory是否过大:可以看到每个大的字段都有size、Rss、Pss等不同的小的字段,它们可以各自理解为:size:该字段所占用的虚拟内存大小Rss/Pss:该字段所占用的物理内存大小;两者的区别在于,举例来说,libc-2.17.so被进程A和进程B都加载了,但实际上,这种共享的so所占用的物理内存是一份,而不是占用2份,那么假设libc-2.17.s原创 2020-05-19 19:54:36 · 1438 阅读 · 0 评论 -
python调用face++接口,实现图像识别
@[TOC](python调用face++接口,实现图像识别)#需求##需要识别的图片在本地,通过python调用face++的接口,实现图像识别,并读取识别后的返回结果#具体实现##参考链接https://www.faceplusplus.com.cn/general-text-recognition/首先需要注册,注册后可以得到属于你注册账户的key和secret,这个会被用于后续的组包##实现代码可以参考:https://console.faceplusplus.c原创 2020-05-17 22:49:36 · 563 阅读 · 0 评论 -
dlopen_mode load so失败的可能原因
今天测试一个用例,其实不能说是测试,因为前面都已经完成了,只是需要支持一些新的功能,所以需要在当前版本上进行相应的修改然后测试。简单来说,还是plt hook的实现,只不过前一段时间针对的都是java编写的目标程序,现在针对的是c编写的目标程序(c编写的目标程序的功能早就验证过了)。本来以为是一个很轻松的事情,结果添加新功能的代码后,凉凉,根本找不到注入的函数,不应该啊,因为c编写的目标程序应该是最没有问题的。通过查看线程的maps信息,发现so注入都没有成功,再通过log查看,调用dlopen_mod原创 2020-05-11 21:42:35 · 1402 阅读 · 0 评论 -
安卓手机硬件信息修改 Device ID Changer 2020
目前在做linux下java程序的指定so的指定函数的hook,功能已经完成并经过了初步测试,开发过程中发现了一些例子是在安卓系统下的一些hook的开源工具,比如大名鼎鼎的xpose,原谅我才知道有这么厉害的工具,然后搜到了硬件信息修改的工具,就是现在要介绍的Device ID Changer 2020 ,还是挺方便使用的,推荐刷机用户使用,可以用来随便更改手机的硬件信息,避过检测,你懂我说的意...原创 2020-04-21 17:55:20 · 13255 阅读 · 1 评论 -
记录一次问题调试过程 -- ptrace + libunwind + malloc hook
整体方案参考自:https://xz.aliyun.com/t/6883#reply-14067当前任务是监控malloc等应用层面的调用,获取其输入参数、返回值、调用栈等情况,之前已经完成了参数和返回值的测试;本周主要研究调用栈的获取;之前测试过通过libunwind来解析调用栈,结果是有时候注入成功,有时候注入失败,与之对比的是不用libunwind时,连续测试超过100次均成功;...原创 2020-04-07 13:55:17 · 1471 阅读 · 0 评论 -
动态库加载后的函数解析
最近做一个demo,简单来说就是通过ptrace的功能,把自己写的一个so(内有咱们要hook后的函数实现),动态加载到目标程序后,通过修改GOT表的方式,把目标函数替换成咱们自己的函数,后面在目标程序的代码里,再调用该函数时,调用的就是咱们hook后的函数。这种实现方式之前被广泛的用在外挂开发、动态调试等领域,也是hacker们的一种手段。 闲话少说,进入正文,本文的...原创 2020-03-30 18:45:40 · 620 阅读 · 0 评论 -
linux下的excel
今天调试ptrace的一个用例,里面用到了excel这个函数:#include <sys/ptrace.h>#include <sys/types.h>#include <sys/wait.h>#include <unistd.h>#include <sys/reg.h> /* For constants ORIG_R...原创 2020-03-16 15:12:03 · 1775 阅读 · 0 评论 -
无法将参数 2 从“const char [58]”转换为“LPCWSTR”
问题类似,解决方案相同,感谢网友的总结,参考以下链接:https://blog.youkuaiyun.com/u010257002/article/details/45393385在使用RegOpenKey(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\NetworkCards", &m_hregkey1) !...转载 2018-06-11 23:56:14 · 2235 阅读 · 0 评论 -
VS2013工程导入自己生成的Dll,编译通过,运行时提示“无法启动程序,因为计算机中丢失*.DLL”
基本上是按照:https://blog.youkuaiyun.com/u010273652/article/details/25514577,来实现的,叶挺顺利,但在最后运行时,提示缺少Dll。尝试了各种方法还是不能解决,后来随便一试,终于OK,特以此为记;解决方案:除了上述链接里提到的:所以我们自己项目简单调用dll时就把生成的dll文件复制到工程目录中,如果经常用可以把dll文件放到C:\Windows\...原创 2018-06-11 23:35:12 · 3919 阅读 · 0 评论