编程基础
文章平均质量分 78
lqw198421
这个作者很懒,什么都没留下…
展开
-
当 std::bind 遇上 this
背景阅读公司之前项目的代码,看到一段代码如下: if (!m_api->SubFutureL1( m_config.config.symbol[0].future, std::bind( &ArbitrageFc::OnSymbol1FutureMd, this,原创 2021-03-22 18:01:03 · 5633 阅读 · 2 评论 -
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 · 735 阅读 · 0 评论 -
C++ =delete的使用
背景今天看公司的编程规范,其中有个原则:如果你的类不需要拷贝/移动操作,请显式的通过在public域中(private本身就是不能显式的直接调用的)使用 =delete 或其他手段禁用之;对其中的 =delete不了解,之前没用过,查了一下以此为记;=delete使用方式C++11中=delete的巧妙用法#include <cstdio>class TestClass{public: int func(int data)=delete;};那么如果使用时:i原创 2021-01-20 17:56:54 · 7436 阅读 · 3 评论 -
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 · 406 阅读 · 0 评论 -
内核栈回溯原理学习应用(转载,针对arm)
转载链接:https://www.cnblogs.com/mysky007/p/12539754.html前言:在网上看到这篇文章,作者写这个应该是很用心的,所涉及的技术相对比较偏门,研究或者学习这方面的人应该很少,不过正好跟我现在在做的一些东西是相关的,因此转发。不过,换做是我,如果想解决这个问题的话,我还是会用plt hook来实现,当前已经做出来的成功已经可以分析出 double free的问题了。问题:一台客户现场机器,运行一周左右偶然发生一次应用段错误或者double free问题,c转载 2020-09-09 10:37:45 · 1348 阅读 · 0 评论 -
python中的转义字符
背景介绍当前项目中,需要把监测到的数据,从监测端发送到服务器端,并且在服务器端上画图显示出来。为减少开发工作量,在服务器上的开发是用python来实现的(检测端用的是c和c++),然后在服务器上的解析上遇到了一些问题;具体问题由于用python解析c/c++发来的数据解析有问题——原来设计的是监测端(c/c++)发送的数据是 unsigned long long;但是在python段解析时出现了问题,哪怕是用python 自带的struct进行解析也是不对的——不知道是我使用的问题不——因为不值得在这原创 2020-08-06 10:46:56 · 496 阅读 · 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 · 2002 阅读 · 0 评论 -
C语言字符串操作总结大全(超详细)【转载】
1)字符串操作strcpy(p, p1) 复制字符串strncpy(p, p1, n) 复制指定长度字符串strcat(p, p1) 附加字符串strncat(p, p1, n) 附加指定长度字符串strlen(p) 取字符串长度strcmp(p, p1) 比较字符串strcasecmp忽略大小写比较字符串strncmp(p, p1, n) 比较指定长度字符串strchr(p, c) 在字符串中查找指定字符strrchr(p, c) 在字符串中反向查找strstr(p, p1) 查找字转载 2020-07-16 19:51:15 · 3565 阅读 · 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 · 859 阅读 · 1 评论 -
g++编译so里调用外部so
背景要给甲方爸爸A演示一下公司的产品,但是我们公司的产品,最终都是要跟爸爸们的产品结合在一起的,等于说要把甲方爸爸的代码抽出来编译成一个so,供我们的产品的java代码来调用——这本来是个很常见的场景——但是问题在于,甲方爸爸的这些代码,是在它的另一个乙方儿子上的so的基础上完成的,那么场景就变成了如下:之前没有自己搞过这样的逻辑,趁此机会,尝试一下,以此为记;尝试PS:因为自己一直做的是C(也会有C++)的开发,所以当前的demo演示里,我们来调用甲方爸爸的so时,用C的程序来代替Java的程序原创 2020-07-07 16:29:10 · 4020 阅读 · 0 评论 -
通过libunwind来解析调用栈
简介当前工作中有一部分工作需要解析出目标函数的调用栈以便进行进一步的分析,经过调研之后,发现libunwind较为符合要求,所以采用调用libunwind的接口来实现调用栈解析的功能,以此为记;具体操作1.下载libunwind我下载的是1.4版本,下载链接:http://download-mirror.savannah.gnu.org/releases/libunwind/找到自己所需要的目标版本即可2.编译这里面由于我有特别的需求——在我生成的so里调用libunwind的接口——所以我原创 2020-07-01 14:44:06 · 7990 阅读 · 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 · 1119 阅读 · 0 评论 -
X64 汇编入门
目录前言64位和32位汇编的差异示例说明前言公司项目需要实现通过汇编来获取调用栈的功能,自己写了一个,直接崩溃,回头学习一下,以此为记;64位和32位汇编的差异这方面我现在涉及的不多,就不展开了,大家可以自己去查一下资料,或者直接参考一下下面的链接:https://blog.csdn.net/qq_29343201/article/details/512787...原创 2020-03-31 14:07:26 · 2258 阅读 · 0 评论 -
linux中线程创建简单示例
当前项目中涉及到多线程编程,之前搞过,但没啥记录,在此记录一下#include <stdio.h>#include <stdlib.h>#include <pthread.h>#include <unistd.h>void threadFunc(){ int count = 0; while(count < 3...原创 2020-01-03 14:28:26 · 440 阅读 · 0 评论 -
c/c++中,*与++的优先级
今天看openj9的源码,看到一句代码,如下:data = *cursor++;当时稍微有点奇怪,为啥要这么写,为何不用()对其进行明确以提高代码阅读性?另外就是自己想了一下,这句话的意义是啥?首先想到的是优先级,个人理解,*和++在c c++中,应该是++的优先级更高,查了一下,结果如下:那么感觉结果应该是先++,后*,自己写了个简单代码进行测试,代码如下:int m...原创 2019-12-10 16:30:39 · 7768 阅读 · 0 评论